]> granicus.if.org Git - clang/commitdiff
Store more information in HeaderSearchOptions so that its initialization is not
authorDaniel Dunbar <daniel@zuster.org>
Mon, 16 Nov 2009 22:38:40 +0000 (22:38 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Mon, 16 Nov 2009 22:38:40 +0000 (22:38 +0000)
language dependent.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@88981 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 967f9067caf82561adaad5951eab7fa2adebddd7..500663b82c70bd5d2163ff40dbfae62588d511f4 100644 (file)
@@ -59,11 +59,11 @@ public:
   /// environment variable for gcc.
   std::string EnvIncPath;
 
-  /// A (system-path) delimited list of include paths to be added from the
-  /// environment following the user specified includes and the \see EnvIncPath
-  /// includes (but prior to builtin and standard includes). This is parsed in
-  /// the same manner as the CPATH environment variable for gcc.
-  std::string LangEnvIncPath;
+  /// Per-language environmental include paths, see \see EnvIncPath.
+  std::string CEnvIncPath;
+  std::string ObjCEnvIncPath;
+  std::string CXXEnvIncPath;
+  std::string ObjCXXEnvIncPath;
 
   /// If non-empty, the path to the compiler builtin include directory, which
   /// will be searched following the user and environment includes.
index 70f0b2175a48dbb85267e1a0c8358ee5c4895788..5964a26debecc72782bfcc3c5fb200795a4ea702 100644 (file)
@@ -636,7 +636,14 @@ void clang::ApplyHeaderSearchOptions(HeaderSearch &HS,
 
   // Add entries from CPATH and friends.
   Init.AddDelimitedPaths(HSOpts.EnvIncPath.c_str());
-  Init.AddDelimitedPaths(HSOpts.LangEnvIncPath.c_str());
+  if (Lang.CPlusPlus && Lang.ObjC1)
+    Init.AddDelimitedPaths(HSOpts.ObjCXXEnvIncPath.c_str());
+  else if (Lang.CPlusPlus)
+    Init.AddDelimitedPaths(HSOpts.CXXEnvIncPath.c_str());
+  else if (Lang.ObjC1)
+    Init.AddDelimitedPaths(HSOpts.ObjCEnvIncPath.c_str());
+  else
+    Init.AddDelimitedPaths(HSOpts.CEnvIncPath.c_str());
 
   if (!HSOpts.BuiltinIncludePath.empty()) {
     // Ignore the sys root, we *always* look for clang headers relative to
index 174143d39c8fc42b15766e1a4c34e58c44771f99..1dccafd5260f7fea932930cc62d9470e61074325 100644 (file)
@@ -910,8 +910,7 @@ void clang::InitializeFrontendOptions(FrontendOptions &Opts) {
 }
 
 void clang::InitializeHeaderSearchOptions(HeaderSearchOptions &Opts,
-                                          llvm::StringRef BuiltinIncludePath,
-                                          const LangOptions &Lang) {
+                                          llvm::StringRef BuiltinIncludePath) {
   using namespace headersearchoptions;
 
   Opts.Sysroot = isysroot;
@@ -993,19 +992,14 @@ void clang::InitializeHeaderSearchOptions(HeaderSearchOptions &Opts,
     Opts.EnvIncPath = Env;
 
   // Add language specific environment paths.
-  if (Lang.CPlusPlus && Lang.ObjC1) {
-    if (const char *Env = getenv("OBJCPLUS_INCLUDE_PATH"))
-      Opts.LangEnvIncPath = Env;
-  } else if (Lang.CPlusPlus) {
-    if (const char *Env = getenv("CPLUS_INCLUDE_PATH"))
-      Opts.LangEnvIncPath = Env;
-  } else if (Lang.ObjC1) {
-    if (const char *Env = getenv("OBJC_INCLUDE_PATH"))
-      Opts.LangEnvIncPath = Env;
-  } else {
-    if (const char *Env = getenv("C_INCLUDE_PATH"))
-      Opts.LangEnvIncPath = Env;
-  }
+  if (const char *Env = getenv("OBJCPLUS_INCLUDE_PATH"))
+    Opts.ObjCXXEnvIncPath = Env;
+  if (const char *Env = getenv("CPLUS_INCLUDE_PATH"))
+    Opts.CXXEnvIncPath = Env;
+  if (const char *Env = getenv("OBJC_INCLUDE_PATH"))
+    Opts.CEnvIncPath = Env;
+  if (const char *Env = getenv("C_INCLUDE_PATH"))
+    Opts.CEnvIncPath = Env;
 
   if (!nobuiltininc)
     Opts.BuiltinIncludePath = BuiltinIncludePath;
index 0b67da3594c01509c5fe64367133b8a6cc87565c..9a2fd9d59a164ee4f67a1198527b559f2ef916a7 100644 (file)
@@ -40,8 +40,7 @@ void InitializeDiagnosticOptions(DiagnosticOptions &Opts);
 void InitializeFrontendOptions(FrontendOptions &Opts);
 
 void InitializeHeaderSearchOptions(HeaderSearchOptions &Opts,
-                                   llvm::StringRef BuiltinIncludePath,
-                                   const LangOptions &Lang);
+                                   llvm::StringRef BuiltinIncludePath);
 
 void InitializeLangOptions(LangOptions &Options,
                            FrontendOptions::InputKind LK,
index aea97744208c5aeb27f5a300f2c19642dfc1038d..fb397d5e7413548800a9059fb76cd4e197c40ebf 100644 (file)
@@ -52,7 +52,7 @@
 using namespace clang;
 
 //===----------------------------------------------------------------------===//
-// Utility Methods
+// Main driver
 //===----------------------------------------------------------------------===//
 
 std::string GetBuiltinIncludePath(const char *Argv0) {
@@ -74,9 +74,14 @@ std::string GetBuiltinIncludePath(const char *Argv0) {
   return P.str();
 }
 
-//===----------------------------------------------------------------------===//
-// Main driver
-//===----------------------------------------------------------------------===//
+static void LLVMErrorHandler(void *UserData, const std::string &Message) {
+  Diagnostic &Diags = *static_cast<Diagnostic*>(UserData);
+
+  Diags.Report(diag::err_fe_error_backend) << Message;
+
+  // We cannot recover from llvm errors.
+  exit(1);
+}
 
 /// ClangFrontendTimer - The front-end activities should charge time to it with
 /// TimeRegion.  The -ftime-report option controls whether this will do
@@ -144,15 +149,6 @@ static FrontendAction *CreateFrontendAction(CompilerInstance &CI) {
   }
 }
 
-static void LLVMErrorHandler(void *UserData, const std::string &Message) {
-  Diagnostic &Diags = *static_cast<Diagnostic*>(UserData);
-
-  Diags.Report(diag::err_fe_error_backend) << Message;
-
-  // We cannot recover from llvm errors.
-  exit(1);
-}
-
 static TargetInfo *
 ConstructCompilerInvocation(CompilerInvocation &Opts, Diagnostic &Diags,
                             const char *Argv0, bool &IsAST) {
@@ -194,8 +190,7 @@ ConstructCompilerInvocation(CompilerInvocation &Opts, Diagnostic &Diags,
 
   // Initialize the header search options.
   InitializeHeaderSearchOptions(Opts.getHeaderSearchOpts(),
-                                GetBuiltinIncludePath(Argv0),
-                                Opts.getLangOpts());
+                                GetBuiltinIncludePath(Argv0));
 
   // Initialize the other preprocessor options.
   InitializePreprocessorOptions(Opts.getPreprocessorOpts());