]> granicus.if.org Git - clang/commitdiff
Lift InitHeaderSearch::AddEnvVarPaths logic higher.
authorDaniel Dunbar <daniel@zuster.org>
Sat, 7 Nov 2009 04:20:39 +0000 (04:20 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Sat, 7 Nov 2009 04:20:39 +0000 (04:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86337 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Frontend/InitHeaderSearch.h
lib/Frontend/InitHeaderSearch.cpp
tools/clang-cc/clang-cc.cpp

index 34672c73eebc9f8116bb581409d4c684d757f7ac..261a912e2ce494b2095a7f096896696e27364a75 100644 (file)
@@ -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,
index 6f87e033ea94b4e95d867054934748f2ddbaba2c..0ca6e0b830c69fee7bef57463d68bc848bab8f6f 100644 (file)
@@ -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,
index 168a840332977a9a5bb63fef44252b02bb19cb6c..dac9b0dc0105301776b58d769df77a424f81931e 100644 (file)
@@ -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);