aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-11-07 04:20:39 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-11-07 04:20:39 +0000
commite166582f8f36f4db8f4ea157538fab7fe6bf2658 (patch)
treec04a78028884b04ce3ec591963f6ad1160ef898a
parent5c5758bb0a4ec0f572cd20249277736da5715003 (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.h13
-rw-r--r--lib/Frontend/InitHeaderSearch.cpp34
-rw-r--r--tools/clang-cc/clang-cc.cpp19
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);