]> granicus.if.org Git - clang/commitdiff
correct the -isystem option to not add the -isysroot path. Only the weird
authorChris Lattner <sabre@nondot.org>
Tue, 24 Aug 2010 22:27:37 +0000 (22:27 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 24 Aug 2010 22:27:37 +0000 (22:27 +0000)
-iwithsysroot flag should do that.  This fixes rdar://8345942

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

include/clang/Frontend/HeaderSearchOptions.h
lib/Frontend/CompilerInvocation.cpp
lib/Frontend/InitHeaderSearch.cpp

index c6682451835afdc470996518b71fe69151dd7dfe..588d32bf736ef07585d12181c03e61edec321000 100644 (file)
@@ -35,11 +35,16 @@ public:
     frontend::IncludeDirGroup Group;
     unsigned IsUserSupplied : 1;
     unsigned IsFramework : 1;
-
-    Entry(llvm::StringRef _Path, frontend::IncludeDirGroup _Group,
-          bool _IsUserSupplied, bool _IsFramework)
-      : Path(_Path), Group(_Group), IsUserSupplied(_IsUserSupplied),
-        IsFramework(_IsFramework) {}
+    
+    /// IsSysRootRelative - This is true if an absolute path should be treated
+    /// relative to the sysroot, or false if it should always be the absolute
+    /// path.
+    unsigned IsSysRootRelative : 1;
+
+    Entry(llvm::StringRef path, frontend::IncludeDirGroup group,
+          bool isUserSupplied, bool isFramework, bool isSysRootRelative)
+      : Path(path), Group(group), IsUserSupplied(isUserSupplied),
+        IsFramework(isFramework), IsSysRootRelative(isSysRootRelative) {}
   };
 
   /// If non-empty, the directory to use as a "virtual system root" for include
@@ -85,8 +90,9 @@ public:
 
   /// AddPath - Add the \arg Path path to the specified \arg Group list.
   void AddPath(llvm::StringRef Path, frontend::IncludeDirGroup Group,
-               bool IsUserSupplied, bool IsFramework) {
-    UserEntries.push_back(Entry(Path, Group, IsUserSupplied, IsFramework));
+               bool IsUserSupplied, bool IsFramework, bool IsSysRootRelative) {
+    UserEntries.push_back(Entry(Path, Group, IsUserSupplied, IsFramework,
+                                IsSysRootRelative));
   }
 };
 
index f0a9bf457f85e33be116f8e97b870dbf1b59ee4a..86ce31538f3ca4b458c22d1f59f9a5c80032eb35 100644 (file)
@@ -1149,7 +1149,7 @@ static void ParseHeaderSearchArgs(HeaderSearchOptions &Opts, ArgList &Args) {
   for (arg_iterator it = Args.filtered_begin(OPT_I, OPT_F),
          ie = Args.filtered_end(); it != ie; ++it)
     Opts.AddPath((*it)->getValue(Args), frontend::Angled, true,
-                 /*IsFramework=*/ (*it)->getOption().matches(OPT_F));
+                 /*IsFramework=*/ (*it)->getOption().matches(OPT_F), true);
 
   // Add -iprefix/-iwith-prefix/-iwithprefixbefore options.
   llvm::StringRef Prefix = ""; // FIXME: This isn't the correct default prefix.
@@ -1161,21 +1161,22 @@ static void ParseHeaderSearchArgs(HeaderSearchOptions &Opts, ArgList &Args) {
       Prefix = A->getValue(Args);
     else if (A->getOption().matches(OPT_iwithprefix))
       Opts.AddPath(Prefix.str() + A->getValue(Args),
-                   frontend::System, false, false);
+                   frontend::System, false, false, true);
     else
       Opts.AddPath(Prefix.str() + A->getValue(Args),
-                   frontend::Angled, false, false);
+                   frontend::Angled, false, false, true);
   }
 
   for (arg_iterator it = Args.filtered_begin(OPT_idirafter),
          ie = Args.filtered_end(); it != ie; ++it)
-    Opts.AddPath((*it)->getValue(Args), frontend::After, true, false);
+    Opts.AddPath((*it)->getValue(Args), frontend::After, true, false, true);
   for (arg_iterator it = Args.filtered_begin(OPT_iquote),
          ie = Args.filtered_end(); it != ie; ++it)
-    Opts.AddPath((*it)->getValue(Args), frontend::Quoted, true, false);
+    Opts.AddPath((*it)->getValue(Args), frontend::Quoted, true, false, true);
   for (arg_iterator it = Args.filtered_begin(OPT_isystem, OPT_iwithsysroot),
          ie = Args.filtered_end(); it != ie; ++it)
-    Opts.AddPath((*it)->getValue(Args), frontend::System, true, false);
+    Opts.AddPath((*it)->getValue(Args), frontend::System, true, false,
+                 (*it)->getOption().matches(OPT_iwithsysroot));
 
   // FIXME: Need options for the various environment variables!
 }
index 55e3a4264af8cb7b5c5202e295e7ed2753a0c449..1b6712f128a0e8da462214cac0a4bbd9493080ef 100644 (file)
@@ -912,7 +912,7 @@ void clang::ApplyHeaderSearchOptions(HeaderSearch &HS,
   for (unsigned i = 0, e = HSOpts.UserEntries.size(); i != e; ++i) {
     const HeaderSearchOptions::Entry &E = HSOpts.UserEntries[i];
     Init.AddPath(E.Path, E.Group, false, E.IsUserSupplied, E.IsFramework,
-                 false);
+                 !E.IsSysRootRelative);
   }
 
   // Add entries from CPATH and friends.