diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-11-07 04:20:39 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-11-07 04:20:39 +0000 |
commit | e166582f8f36f4db8f4ea157538fab7fe6bf2658 (patch) | |
tree | c04a78028884b04ce3ec591963f6ad1160ef898a | |
parent | 5c5758bb0a4ec0f572cd20249277736da5715003 (diff) |
Lift InitHeaderSearch::AddEnvVarPaths logic higher.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86337 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Frontend/InitHeaderSearch.h | 13 | ||||
-rw-r--r-- | lib/Frontend/InitHeaderSearch.cpp | 34 | ||||
-rw-r--r-- | tools/clang-cc/clang-cc.cpp | 19 |
3 files changed, 30 insertions, 36 deletions
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<DirectoryLookup> &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); |