diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/Frontend/InitHeaderSearch.cpp')
-rw-r--r-- | contrib/llvm/tools/clang/lib/Frontend/InitHeaderSearch.cpp | 55 |
1 files changed, 28 insertions, 27 deletions
diff --git a/contrib/llvm/tools/clang/lib/Frontend/InitHeaderSearch.cpp b/contrib/llvm/tools/clang/lib/Frontend/InitHeaderSearch.cpp index fb9c182..da3ccd8 100644 --- a/contrib/llvm/tools/clang/lib/Frontend/InitHeaderSearch.cpp +++ b/contrib/llvm/tools/clang/lib/Frontend/InitHeaderSearch.cpp @@ -245,8 +245,8 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple, if (HSOpts.UseBuiltinIncludes) { // Ignore the sys root, we *always* look for clang headers relative to // supplied path. - llvm::sys::Path P(HSOpts.ResourceDir); - P.appendComponent("include"); + SmallString<128> P = StringRef(HSOpts.ResourceDir); + llvm::sys::path::append(P, "include"); AddUnmappedPath(P.str(), ExternCSystem, false); } @@ -313,15 +313,20 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple, break; case llvm::Triple::MinGW32: { // mingw-w64 crt include paths - llvm::sys::Path P(HSOpts.ResourceDir); - P.appendComponent("../../../i686-w64-mingw32/include"); // <sysroot>/i686-w64-mingw32/include + // <sysroot>/i686-w64-mingw32/include + SmallString<128> P = StringRef(HSOpts.ResourceDir); + llvm::sys::path::append(P, "../../../i686-w64-mingw32/include"); AddPath(P.str(), System, false); - P = llvm::sys::Path(HSOpts.ResourceDir); - P.appendComponent("../../../x86_64-w64-mingw32/include"); // <sysroot>/x86_64-w64-mingw32/include + + // <sysroot>/x86_64-w64-mingw32/include + P.resize(HSOpts.ResourceDir.size()); + llvm::sys::path::append(P, "../../../x86_64-w64-mingw32/include"); AddPath(P.str(), System, false); + // mingw.org crt include paths - P = llvm::sys::Path(HSOpts.ResourceDir); - P.appendComponent("../../../include"); // <sysroot>/include + // <sysroot>/include + P.resize(HSOpts.ResourceDir.size()); + llvm::sys::path::append(P, "../../../include"); AddPath(P.str(), System, false); AddPath("/mingw/include", System, false); #if defined(_WIN32) @@ -386,6 +391,7 @@ AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple, const HeaderSearchOp case llvm::Triple::Cygwin: // Cygwin-1.7 + AddMinGWCPlusPlusIncludePaths("/usr/lib/gcc", "i686-pc-cygwin", "4.7.3"); AddMinGWCPlusPlusIncludePaths("/usr/lib/gcc", "i686-pc-cygwin", "4.5.3"); AddMinGWCPlusPlusIncludePaths("/usr/lib/gcc", "i686-pc-cygwin", "4.3.4"); // g++-4 / Cygwin-1.5 @@ -406,6 +412,7 @@ AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple, const HeaderSearchOp // mingw.org C++ include paths AddMinGWCPlusPlusIncludePaths("/mingw/lib/gcc", "mingw32", "4.5.2"); //MSYS #if defined(_WIN32) + AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.8.1"); AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.6.2"); AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.6.1"); AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.5.2"); @@ -420,14 +427,6 @@ AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple, const HeaderSearchOp else AddPath("/usr/include/c++/4.4", CXXSystem, false); break; - case llvm::Triple::FreeBSD: - // FreeBSD 8.0 - // FreeBSD 7.3 - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2", - "", "", "", triple); - AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2/backward", - "", "", "", triple); - break; case llvm::Triple::OpenBSD: { std::string t = triple.getTriple(); if (t.substr(0, 6) == "x86_64") @@ -475,15 +474,17 @@ void InitHeaderSearch::AddDefaultIncludePaths(const LangOptions &Lang, if (HSOpts.UseLibcxx) { if (triple.isOSDarwin()) { // On Darwin, libc++ may be installed alongside the compiler in - // lib/c++/v1. - llvm::sys::Path P(HSOpts.ResourceDir); - if (!P.isEmpty()) { - P.eraseComponent(); // Remove version from foo/lib/clang/version - P.eraseComponent(); // Remove clang from foo/lib/clang - - // Get foo/lib/c++/v1 - P.appendComponent("c++"); - P.appendComponent("v1"); + // include/c++/v1. + if (!HSOpts.ResourceDir.empty()) { + // Remove version from foo/lib/clang/version + StringRef NoVer = llvm::sys::path::parent_path(HSOpts.ResourceDir); + // Remove clang from foo/lib/clang + StringRef Lib = llvm::sys::path::parent_path(NoVer); + // Remove lib from foo/lib + SmallString<128> P = llvm::sys::path::parent_path(Lib); + + // Get foo/include/c++/v1 + llvm::sys::path::append(P, "include", "c++", "v1"); AddUnmappedPath(P.str(), CXXSystem, false); } } @@ -693,8 +694,8 @@ void clang::ApplyHeaderSearchOptions(HeaderSearch &HS, if (HSOpts.UseBuiltinIncludes) { // Set up the builtin include directory in the module map. - llvm::sys::Path P(HSOpts.ResourceDir); - P.appendComponent("include"); + SmallString<128> P = StringRef(HSOpts.ResourceDir); + llvm::sys::path::append(P, "include"); if (const DirectoryEntry *Dir = HS.getFileMgr().getDirectory(P.str())) HS.getModuleMap().setBuiltinIncludeDir(Dir); } |