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,
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);
// 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,
}
-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);
}
}
-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,
}
}
- 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);