Ticket #53194: 9001-macports-libstdcxx.diff

File 9001-macports-libstdcxx.diff, 4.8 KB (added by MarcusCalhoun-Lopez (Marcus Calhoun-Lopez), 4 years ago)
  • tools/clang/include/clang/Lex/HeaderSearchOptions.h

    old new  
    158158  /// Use libc++ instead of the default libstdc++.
    159159  unsigned UseLibcxx : 1;
    160160
     161  /// Use MacPorts libstdc++ instead of default system libstdc++.
     162  unsigned UseMacPortsLibstdcxx : 1;
     163
    161164  /// Whether header search information should be output as for -v.
    162165  unsigned Verbose : 1;
    163166
  • tools/clang/lib/Frontend/CompilerInvocation.cpp

    old new  
    13551355  Opts.UseBuiltinIncludes = !Args.hasArg(OPT_nobuiltininc);
    13561356  Opts.UseStandardSystemIncludes = !Args.hasArg(OPT_nostdsysteminc);
    13571357  Opts.UseStandardCXXIncludes = !Args.hasArg(OPT_nostdincxx);
    1358   if (const Arg *A = Args.getLastArg(OPT_stdlib_EQ))
     1358  if (const Arg *A = Args.getLastArg(OPT_stdlib_EQ)) {
    13591359    Opts.UseLibcxx = (strcmp(A->getValue(), "libc++") == 0);
     1360    Opts.UseMacPortsLibstdcxx = (strcmp(A->getValue(), "macports-libstdc++") == 0);
     1361  }
    13601362  Opts.ResourceDir = Args.getLastArgValue(OPT_resource_dir);
    13611363  Opts.ModuleCachePath = Args.getLastArgValue(OPT_fmodules_cache_path);
    13621364  Opts.ModuleUserBuildPath = Args.getLastArgValue(OPT_fmodules_user_build_path);
  • tools/clang/lib/Frontend/InitHeaderSearch.cpp

    old new  
    109109#if defined(LLVM_ON_WIN32)
    110110  return !Path.empty() && llvm::sys::path::is_separator(Path[0]);
    111111#else
    112   return llvm::sys::path::is_absolute(Path);
     112  return llvm::sys::path::is_absolute(Path) && Path.find("@@MACPORTS_GCC_INCLUDE_DIR@@")!=0;
    113113#endif
    114114}
    115115
     
    362362
    363363    case llvm::Triple::ppc:
    364364    case llvm::Triple::ppc64:
     365      if (HSOpts.UseMacPortsLibstdcxx) {
     366        AddGnuCPlusPlusIncludePaths("@@MACPORTS_GCC_INCLUDE_DIR@@",
     367                                    "@@MACPORTS_HOST_NAME@@", "", "ppc64",
     368                                    triple);
     369      } else {
    365370      AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1",
    366371                                  "powerpc-apple-darwin10", "", "ppc64",
    367372                                  triple);
    368373      AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.0.0",
    369374                                  "powerpc-apple-darwin8", "", "ppc64",
    370375                                  triple);
     376      }
    371377      break;
    372378
    373379    case llvm::Triple::x86:
    374380    case llvm::Triple::x86_64:
     381      if (HSOpts.UseMacPortsLibstdcxx) {
     382        AddGnuCPlusPlusIncludePaths("@@MACPORTS_GCC_INCLUDE_DIR@@",
     383                                    "@@MACPORTS_HOST_NAME@@", "i386", "", triple);
     384      } else {
    375385      AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1",
    376386                                  "i686-apple-darwin10", "", "x86_64", triple);
    377387      AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.0.0",
    378388                                  "i686-apple-darwin8", "", "x86_64", triple);
     389      }
    379390      break;
    380391
    381392    case llvm::Triple::arm:
  • tools/clang/include/clang/Driver/ToolChain.h

    old new  
    5151
    5252  enum CXXStdlibType {
    5353    CST_Libcxx,
    54     CST_Libstdcxx
     54    CST_Libstdcxx,
     55    CST_MacPortsLibstdcxx
    5556  };
    5657
    5758  enum RuntimeLibType {
  • tools/clang/lib/Driver/ToolChains.cpp

    old new  
    773773    // Otherwise, let the linker search.
    774774    CmdArgs.push_back("-lstdc++");
    775775    break;
     776  case ToolChain::CST_MacPortsLibstdcxx:
     777    if (getVFS().exists("@@MACPORTS_libstdc++@@")) {
     778      CmdArgs.push_back("@@MACPORTS_libstdc++@@");
     779      return;
     780    }
     781    CmdArgs.push_back("-lstdc++");
     782    break;
    776783  }
    777784}
    778785
     
    30153022    return ToolChain::CST_Libstdcxx;
    30163023
    30173024  StringRef Value = A->getValue();
     3025  if (Value == "macports-libstdc++" )
     3026      return ToolChain::CST_MacPortsLibstdcxx;
    30183027  if (Value != "libstdc++")
    30193028    getDriver().Diag(diag::err_drv_invalid_stdlib_name) << A->getAsString(Args);
    30203029
  • tools/clang/lib/Driver/ToolChain.cpp

    old new  
    545545    Type = ToolChain::CST_Libcxx;
    546546  else if (Name == "libstdc++")
    547547    Type = ToolChain::CST_Libstdcxx;
     548  else if (Name == "macports-libstdc++")
     549    Type = ToolChain::CST_MacPortsLibstdcxx;
    548550  else
    549551    return false;
    550552
     
    640642    break;
    641643
    642644  case ToolChain::CST_Libstdcxx:
     645  case ToolChain::CST_MacPortsLibstdcxx:
    643646    CmdArgs.push_back("-lstdc++");
    644647    break;
    645648  }