From 5f9eae529abc0be48055ba9f4d7274f859da9e2d Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 1 Mar 2008 08:07:28 +0000 Subject: [PATCH] Add support for the CPATH, C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJC_INCLUDE_PATH, and OBJCPLUS_INCLUDE_PATH environment variables. Patch by Sam Bishop! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47785 91177308-0d34-0410-b5e6-96231b3b80d8 --- Driver/clang.cpp | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/Driver/clang.cpp b/Driver/clang.cpp index 48bcbbdef8..36a7f16d7c 100644 --- a/Driver/clang.cpp +++ b/Driver/clang.cpp @@ -779,6 +779,30 @@ static void RemoveDuplicates(std::vector &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) { -- 2.40.0