]> granicus.if.org Git - clang/commitdiff
Split AddDefaultSystemIncludePaths into C, C++ and framework specific functions.
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 27 Oct 2009 14:47:31 +0000 (14:47 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 27 Oct 2009 14:47:31 +0000 (14:47 +0000)
The user visible changes are:

*) Frameworks are only searched on OS X
*) The Cygwin c++ headers are now marked as c++ aware. I am almost
sure that not marking them was a bug.

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

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

index a90b4eaf9e2b50a7ee782aa8dfbeca33a4d304f1..48c426825262435c09ff502e58f9391c6ec52e7d 100644 (file)
@@ -73,6 +73,16 @@ public:
   ///  variables such as CPATH.
   void AddDefaultEnvVarPaths(const LangOptions &Lang);
 
+  // AddDefaultCIncludePaths - Add paths that should always be searched.
+  void AddDefaultCIncludePaths(const llvm::Triple &triple);
+
+  // AddDefaultCPlusPlusIncludePaths -  Add paths that should be searched when
+  //  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,
index 25316bed9fb458bf72a8589026437c8e92e0921d..b0d4c5b663dcc533cc80260bb457a0f3d82eb0d4 100644 (file)
@@ -241,11 +241,9 @@ bool getVisualStudioDir(std::string &path) {
   return(false);
 }
 
-void InitHeaderSearch::AddDefaultSystemIncludePaths(const LangOptions &Lang,
-                                                    const llvm::Triple &triple) {
+void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple) {
   // FIXME: temporary hack: hard-coded paths.
   llvm::Triple::OSType os = triple.getOS();
-
   switch (os) {
   case llvm::Triple::Win32:
     {
@@ -276,162 +274,175 @@ void InitHeaderSearch::AddDefaultSystemIncludePaths(const LangOptions &Lang,
       }
     }
     break;
-  case llvm::Triple::Cygwin:
-    if (Lang.CPlusPlus) {
-      AddPath("/lib/gcc/i686-pc-cygwin/3.4.4/include",
-        System, false, false, false);
-      AddPath("/lib/gcc/i686-pc-cygwin/3.4.4/include/c++",
-        System, false, false, false);
-    }
-    AddPath("/usr/include", System, false, false, false);
-    break;
   case llvm::Triple::MinGW64:
-    if (Lang.CPlusPlus) { // I'm guessing here.
-      // Try gcc 4.4.0
-      AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw64", "4.4.0");
-      // Try gcc 4.3.0
-      AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw64", "4.3.0");
-    }
-    // Fall through.
   case llvm::Triple::MinGW32:
-    if (Lang.CPlusPlus) {
-      // Try gcc 4.4.0
-      AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.4.0");
-      // Try gcc 4.3.0
-      AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.3.0");
-    }
     AddPath("c:/mingw/include", System, true, false, false);
     break;
   default:
-    if (Lang.CPlusPlus) {
-      switch (os) {
-        case llvm::Triple::Darwin:
-          AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1",
-                                      "i686-apple-darwin10",
-                                      "i686-apple-darwin10/x86_64",
-                                      triple);
-          AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.0.0",
-                                      "i686-apple-darwin8",
-                                      "i686-apple-darwin8",
-                                      triple);
-          break;
-        case llvm::Triple::Linux:
-          // Ubuntu 7.10 - Gutsy Gibbon
-          AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.1.3",
-                                      "i486-linux-gnu",
-                                      "i486-linux-gnu",
-                                      triple);
-          // Ubuntu 9.04
-          AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.3",
-                                      "x86_64-linux-gnu/32",
-                                      "x86_64-linux-gnu",
-                                      triple);
-          // Fedora 8
-          AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.1.2",
-                                      "i386-redhat-linux",
-                                      "i386-redhat-linux",
-                                      triple);
-          // Fedora 9
-          AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.0",
-                                      "i386-redhat-linux",
-                                      "i386-redhat-linux",
-                                      triple);
-          // Fedora 10
-          AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.2",
-                                      "i386-redhat-linux",
-                                      "i386-redhat-linux",
-                                      triple);
-          // openSUSE 11.1 32 bit
-          AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3",
-                                      "i586-suse-linux",
-                                      "i586-suse-linux",
-                                      triple);
-          // openSUSE 11.1 64 bit
-          AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3",
-                                      "x86_64-suse-linux/32",
-                                      "x86_64-suse-linux",
-                                      triple);
-          // openSUSE 11.2
-          AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.4",
-                                      "i586-suse-linux",
-                                      "i586-suse-linux",
-                                      triple);
-          AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.4",
-                                      "x86_64-suse-linux",
-                                      "x86_64-suse-linux",
-                                      triple);
-          // Arch Linux 2008-06-24
-          AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.1",
-                                      "i686-pc-linux-gnu",
-                                      "i686-pc-linux-gnu",
-                                      triple);
-          AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.1",
-                                      "x86_64-unknown-linux-gnu",
-                                      "x86_64-unknown-linux-gnu",
-                                      triple);
-          // Gentoo x86 2009.1 stable
-          AddGnuCPlusPlusIncludePaths(
-             "/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4",
-             "i686-pc-linux-gnu",
-             "i686-pc-linux-gnu",
-             triple);
-          // Gentoo x86 2009.0 stable
-          AddGnuCPlusPlusIncludePaths(
-             "/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4",
-             "i686-pc-linux-gnu",
-             "i686-pc-linux-gnu",
-             triple);
-          // Gentoo x86 2008.0 stable
-          AddGnuCPlusPlusIncludePaths(
-             "/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4",
-             "i686-pc-linux-gnu",
-             "i686-pc-linux-gnu",
-             triple);
-          // Ubuntu 8.10
-          AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3",
-                                      "i486-pc-linux-gnu",
-                                      "i486-pc-linux-gnu",
-                                      triple);
-          // Ubuntu 9.04
-          AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3",
-                                      "i486-linux-gnu",
-                                      "i486-linux-gnu",
-                                      triple);
-          // Gentoo amd64 stable
-          AddGnuCPlusPlusIncludePaths(
-             "/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/include/g++-v4",
-             "i686-pc-linux-gnu",
-             "i686-pc-linux-gnu",
-             triple);
-          break;
-        case llvm::Triple::FreeBSD:
-          // DragonFly
-          AddPath("/usr/include/c++/4.1", System, true, false, false);
-          // FreeBSD
-          AddPath("/usr/include/c++/4.2", System, true, false, false);
-          break;
-        case llvm::Triple::Solaris:
-          // Solaris - Fall though..
-        case llvm::Triple::AuroraUX:
-          // AuroraUX
-          AddGnuCPlusPlusIncludePaths("/opt/gcc4/include/c++/4.2.4",
-                                      "i386-pc-solaris2.11",
-                                      "i386-pc-solaris2.11",
-                                      triple);
-          break;
-        default:
-          break;
-      }
-    }
     break;
   }
 
   AddPath("/usr/local/include", System, false, false, false);
   AddPath("/usr/include", System, false, false, false);
+}
+
+void InitHeaderSearch::AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple) {
+  llvm::Triple::OSType os = triple.getOS();
+  // FIXME: temporary hack: hard-coded paths.
+  switch (os) {
+  case llvm::Triple::Cygwin:
+    AddPath("/lib/gcc/i686-pc-cygwin/3.4.4/include",
+        System, true, false, false);
+    AddPath("/lib/gcc/i686-pc-cygwin/3.4.4/include/c++",
+        System, true, false, false);
+    break;
+  case llvm::Triple::MinGW64:
+    // Try gcc 4.4.0
+    AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw64", "4.4.0");
+    // Try gcc 4.3.0
+    AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw64", "4.3.0");
+    // Fall through.
+  case llvm::Triple::MinGW32:
+    // Try gcc 4.4.0
+    AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.4.0");
+    // Try gcc 4.3.0
+    AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.3.0");
+    break;
+  case llvm::Triple::Darwin:
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1",
+                               "i686-apple-darwin10",
+                               "i686-apple-darwin10/x86_64",
+                               triple);
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.0.0",
+                               "i686-apple-darwin8",
+                               "i686-apple-darwin8",
+                               triple);
+    break;
+  case llvm::Triple::Linux:
+    // Ubuntu 7.10 - Gutsy Gibbon
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.1.3",
+                               "i486-linux-gnu",
+                               "i486-linux-gnu",
+                               triple);
+    // Ubuntu 9.04
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.3",
+                               "x86_64-linux-gnu/32",
+                               "x86_64-linux-gnu",
+                               triple);
+    // Fedora 8
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.1.2",
+                               "i386-redhat-linux",
+                               "i386-redhat-linux",
+                               triple);
+    // Fedora 9
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.0",
+                               "i386-redhat-linux",
+                               "i386-redhat-linux",
+                               triple);
+    // Fedora 10
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.2",
+                               "i386-redhat-linux",
+                               "i386-redhat-linux",
+                               triple);
+    // openSUSE 11.1 32 bit
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3",
+                               "i586-suse-linux",
+                               "i586-suse-linux",
+                               triple);
+    // openSUSE 11.1 64 bit
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3",
+                               "x86_64-suse-linux/32",
+                               "x86_64-suse-linux",
+                               triple);
+    // openSUSE 11.2
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.4",
+                               "i586-suse-linux",
+                               "i586-suse-linux",
+                               triple);
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.4",
+                               "x86_64-suse-linux",
+                               "x86_64-suse-linux",
+                               triple);
+    // Arch Linux 2008-06-24
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.1",
+                               "i686-pc-linux-gnu",
+                               "i686-pc-linux-gnu",
+                               triple);
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3.1",
+                               "x86_64-unknown-linux-gnu",
+                               "x86_64-unknown-linux-gnu",
+                               triple);
+    // Gentoo x86 2009.1 stable
+    AddGnuCPlusPlusIncludePaths(
+        "/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4",
+       "i686-pc-linux-gnu",
+       "i686-pc-linux-gnu",
+       triple);
+    // Gentoo x86 2009.0 stable
+    AddGnuCPlusPlusIncludePaths(
+        "/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4",
+       "i686-pc-linux-gnu",
+       "i686-pc-linux-gnu",
+       triple);
+    // Gentoo x86 2008.0 stable
+    AddGnuCPlusPlusIncludePaths(
+        "/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4",
+       "i686-pc-linux-gnu",
+       "i686-pc-linux-gnu",
+       triple);
+    // Ubuntu 8.10
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3",
+                               "i486-pc-linux-gnu",
+                               "i486-pc-linux-gnu",
+                               triple);
+    // Ubuntu 9.04
+    AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.3",
+                               "i486-linux-gnu",
+                               "i486-linux-gnu",
+                               triple);
+    // Gentoo amd64 stable
+    AddGnuCPlusPlusIncludePaths(
+        "/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/include/g++-v4",
+        "i686-pc-linux-gnu",
+        "i686-pc-linux-gnu",
+        triple);
+    break;
+  case llvm::Triple::FreeBSD:
+    // DragonFly
+    AddPath("/usr/include/c++/4.1", System, true, false, false);
+    // FreeBSD
+    AddPath("/usr/include/c++/4.2", System, true, false, false);
+    break;
+  case llvm::Triple::Solaris:
+    // Solaris - Fall though..
+  case llvm::Triple::AuroraUX:
+    // AuroraUX
+    AddGnuCPlusPlusIncludePaths("/opt/gcc4/include/c++/4.2.4",
+                                "i386-pc-solaris2.11",
+                                "i386-pc-solaris2.11",
+                                triple);
+    break;
+  default:
+    break;
+  }
+}
+
+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);
+  if (Lang.CPlusPlus)
+    AddDefaultCPlusPlusIncludePaths(triple);
+}
+
 void InitHeaderSearch::AddDefaultEnvVarPaths(const LangOptions &Lang) {
   AddEnvVarPaths("CPATH");
   if (Lang.CPlusPlus && Lang.ObjC1)