From: Daniel Dunbar Date: Sat, 7 Nov 2009 04:20:39 +0000 (+0000) Subject: Lift InitHeaderSearch::AddEnvVarPaths logic higher. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e166582f8f36f4db8f4ea157538fab7fe6bf2658;p=clang Lift InitHeaderSearch::AddEnvVarPaths logic higher. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86337 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Frontend/InitHeaderSearch.h b/include/clang/Frontend/InitHeaderSearch.h index 34672c73ee..261a912e2c 100644 --- a/include/clang/Frontend/InitHeaderSearch.h +++ b/include/clang/Frontend/InitHeaderSearch.h @@ -53,10 +53,6 @@ public: bool isCXXAware, bool isUserSupplied, bool isFramework, bool IgnoreSysRoot = false); - /// AddEnvVarPaths - Add a list of paths from an environment variable to a - /// header search list. - void AddEnvVarPaths(const char *Name); - /// AddGnuCPlusPlusIncludePaths - Add the necessary paths to suport a gnu /// libstdc++. void AddGnuCPlusPlusIncludePaths(const std::string &Base, const char *Dir32, @@ -69,9 +65,9 @@ public: const char *Arch, const char *Version); - /// AddDefaultEnvVarPaths - Adds list of paths from default environment - /// variables such as CPATH. - void AddDefaultEnvVarPaths(const LangOptions &Lang); + /// AddDelimitedPaths - Add a list of paths delimited by the system PATH + /// separator. The processing follows that of the CPATH variable for gcc. + void AddDelimitedPaths(const char *String); // AddDefaultCIncludePaths - Add paths that should always be searched. void AddDefaultCIncludePaths(const llvm::Triple &triple); @@ -80,9 +76,6 @@ public: // compiling c++. void AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple); - // AddDefaultFrameworkIncludePaths - Add the framework paths. Used on darwin. - void AddDefaultFrameworkIncludePaths(const llvm::Triple &triple); - /// AddDefaultSystemIncludePaths - Adds the default system include paths so /// that e.g. stdio.h is found. void AddDefaultSystemIncludePaths(const LangOptions &Lang, diff --git a/lib/Frontend/InitHeaderSearch.cpp b/lib/Frontend/InitHeaderSearch.cpp index 6f87e033ea..0ca6e0b830 100644 --- a/lib/Frontend/InitHeaderSearch.cpp +++ b/lib/Frontend/InitHeaderSearch.cpp @@ -82,9 +82,8 @@ void InitHeaderSearch::AddPath(const llvm::StringRef &Path, } -void InitHeaderSearch::AddEnvVarPaths(const char *Name) { - const char* at = getenv(Name); - if (!at || *at == 0) // Empty string should not add '.' path. +void InitHeaderSearch::AddDelimitedPaths(const char *at) { + if (*at == 0) // Empty string should not add '.' path. return; const char* delim = strchr(at, llvm::sys::PathSeparator); @@ -443,35 +442,20 @@ void InitHeaderSearch::AddDefaultCPlusPlusIncludePaths(const llvm::Triple &tripl } } -void InitHeaderSearch::AddDefaultFrameworkIncludePaths(const llvm::Triple &triple) { - llvm::Triple::OSType os = triple.getOS(); - if (os != llvm::Triple::Darwin) - return; - AddPath("/System/Library/Frameworks", System, true, false, true); - AddPath("/Library/Frameworks", System, true, false, true); -} - void InitHeaderSearch::AddDefaultSystemIncludePaths(const LangOptions &Lang, const llvm::Triple &triple) { AddDefaultCIncludePaths(triple); - AddDefaultFrameworkIncludePaths(triple); + + // Add the default framework include paths on Darwin. + if (triple.getOS() == llvm::Triple::Darwin) { + AddPath("/System/Library/Frameworks", System, true, false, true); + AddPath("/Library/Frameworks", System, true, false, true); + } + if (Lang.CPlusPlus) AddDefaultCPlusPlusIncludePaths(triple); } -void InitHeaderSearch::AddDefaultEnvVarPaths(const LangOptions &Lang) { - AddEnvVarPaths("CPATH"); - if (Lang.CPlusPlus && Lang.ObjC1) - AddEnvVarPaths("OBJCPLUS_INCLUDE_PATH"); - else if (Lang.CPlusPlus) - AddEnvVarPaths("CPLUS_INCLUDE_PATH"); - else if (Lang.ObjC1) - AddEnvVarPaths("OBJC_INCLUDE_PATH"); - else - AddEnvVarPaths("C_INCLUDE_PATH"); -} - - /// RemoveDuplicates - If there are duplicate directory entries in the specified /// search list, remove the later (dead) ones. static void RemoveDuplicates(std::vector &SearchList, diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp index 168a840332..dac9b0dc01 100644 --- a/tools/clang-cc/clang-cc.cpp +++ b/tools/clang-cc/clang-cc.cpp @@ -1149,7 +1149,24 @@ void InitializeIncludePaths(const char *Argv0, HeaderSearch &Headers, } } - Init.AddDefaultEnvVarPaths(Lang); + // Add CPATH environment paths. + if (const char *Env = getenv("CPATH")) + Init.AddDelimitedPaths(Env); + + // Add language specific environment paths. + if (Lang.CPlusPlus && Lang.ObjC1) { + if (const char *Env = getenv("OBJCPLUS_INCLUDE_PATH")) + Init.AddDelimitedPaths(Env); + } else if (Lang.CPlusPlus) { + if (const char *Env = getenv("CPLUS_INCLUDE_PATH")) + Init.AddDelimitedPaths(Env); + } else if (Lang.ObjC1) { + if (const char *Env = getenv("OBJC_INCLUDE_PATH")) + Init.AddDelimitedPaths(Env); + } else { + if (const char *Env = getenv("C_INCLUDE_PATH")) + Init.AddDelimitedPaths(Env); + } if (!nobuiltininc) { std::string P = GetBuiltinIncludePath(Argv0);