summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-03-01 08:07:28 +0000
committerChris Lattner <sabre@nondot.org>2008-03-01 08:07:28 +0000
commitc1bc541323b06567430efa71d228030ef8334276 (patch)
tree1b2af3ecdac4d82e71fc4e9d12dbd9911364d0eb
parentb7e02fc0bf18ec1d026291aab48d125a455b3ec5 (diff)
downloadbcm5719-llvm-c1bc541323b06567430efa71d228030ef8334276.tar.gz
bcm5719-llvm-c1bc541323b06567430efa71d228030ef8334276.zip
Add support for the CPATH, C_INCLUDE_PATH, CPLUS_INCLUDE_PATH,
OBJC_INCLUDE_PATH, and OBJCPLUS_INCLUDE_PATH environment variables. Patch by Sam Bishop! llvm-svn: 47785
-rw-r--r--clang/Driver/clang.cpp39
1 files changed, 35 insertions, 4 deletions
diff --git a/clang/Driver/clang.cpp b/clang/Driver/clang.cpp
index 48bcbbdef8b..36a7f16d7cd 100644
--- a/clang/Driver/clang.cpp
+++ b/clang/Driver/clang.cpp
@@ -779,6 +779,30 @@ static void RemoveDuplicates(std::vector<DirectoryLookup> &SearchList) {
}
}
+// AddEnvVarPaths - Add a list of paths from an environment variable to a
+// header search list.
+//
+static void AddEnvVarPaths(const char *Name, HeaderSearch &Headers) {
+ const char* at = getenv(Name);
+ if (!at)
+ return;
+
+ const char* delim = strchr(at, llvm::sys::PathSeparator);
+ while (delim != 0) {
+ if (delim-at == 0)
+ AddPath(".", Angled, false, true, false, Headers);
+ else
+ AddPath(std::string(at, std::string::size_type(delim-at)), Angled, false,
+ true, false, Headers);
+ at = delim + 1;
+ delim = strchr(at, llvm::sys::PathSeparator);
+ }
+ if (*at == 0)
+ AddPath(".", Angled, false, true, false, Headers);
+ else
+ AddPath(at, Angled, false, true, false, Headers);
+}
+
/// InitializeIncludePaths - Process the -I options and set them in the
/// HeaderSearch object.
static void InitializeIncludePaths(HeaderSearch &Headers, FileManager &FM,
@@ -842,10 +866,17 @@ static void InitializeIncludePaths(HeaderSearch &Headers, FileManager &FM,
}
}
}
-
- // FIXME: Add contents of the CPATH, C_INCLUDE_PATH, CPLUS_INCLUDE_PATH,
- // OBJC_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH environment variables.
-
+
+ AddEnvVarPaths("CPATH", Headers);
+ if (Lang.CPlusPlus && Lang.ObjC1)
+ AddEnvVarPaths("OBJCPLUS_INCLUDE_PATH", Headers);
+ else if (Lang.CPlusPlus)
+ AddEnvVarPaths("CPLUS_INCLUDE_PATH", Headers);
+ else if (Lang.ObjC1)
+ AddEnvVarPaths("OBJC_INCLUDE_PATH", Headers);
+ else
+ AddEnvVarPaths("C_INCLUDE_PATH", Headers);
+
// FIXME: temporary hack: hard-coded paths.
// FIXME: get these from the target?
if (!nostdinc) {
OpenPOWER on IntegriCloud