David,
      Did you ever look at the APPLE LOCAL changes in their own clang
compiler sources at
http://opensource.apple.com/source/clang/clang-503.0.38/src/tools/clang/lib/Frontend/InitHeaderSearch.cpp?
The diff for that file against the one in the stock cfe 3.4.1 sources is…

--- lib/Frontend/InitHeaderSearch.cpp 2013-11-15 13:07:59.000000000 -0500
+++ lib/Frontend/InitHeaderSearch.cpp.apple 2014-05-25 09:11:01.000000000
-0400
@@ -1,3 +1,4 @@
+InitHeaderSearch.cpp   [plain text]
 //===--- InitHeaderSearch.cpp - Initialize header search paths
------------===//
 //
 //                     The LLVM Compiler Infrastructure
@@ -47,7 +48,6 @@
   bool HasSysroot;

 public:
-
   InitHeaderSearch(HeaderSearch &HS, bool verbose, StringRef sysroot)
     : Headers(HS), Verbose(verbose), IncludeSysroot(sysroot),
       HasSysroot(!(sysroot.empty() || sysroot == "/")) {
@@ -338,8 +338,58 @@
     break;
   }

-  if ( os != llvm::Triple::RTEMS )
+  if ( os != llvm::Triple::RTEMS ) {
+    // APPLE LOCAL: On Darwin, include the toolchain include directory in
the
+    // default include search list. Since we have a split between the
toolchains
+    // and the SDK, we need a place for tools to be able to drop headers
+    // (resources) that can be used with any SDK, for example in generated
+    // files.
+    //
+    // This functionality is currently only used to support flex's
FlexLexer.h
+    // file. See:
+    //
+    //   <rdar://problem/13135439> Include toolchain include directory in
+    //   default header paths (for FlexLexer.h)
+    //
+    // for more information.
+    //
+    // We compute the toolchain include directory relative to the resource
+    // directory, so that it works with -ccc-install-dir properly. The
resource
+    // directory follows the convention "../usr/lib/clang/<version>" so
+    // "<resource_dir>/../../../include" is the toolchain include
directory.
+    StringRef P = HSOpts.ResourceDir;
+    P = llvm::sys::path::parent_path(P);
+    P = llvm::sys::path::parent_path(P);
+    P = llvm::sys::path::parent_path(P);
+
+    // If the last component is a '..' remove it, this is important
because the
+    // driver sometimes forms the resource path with a '..' in it.
+    if (llvm::sys::path::filename(P) == "..") {
+      P = llvm::sys::path::parent_path(P);
+      P = llvm::sys::path::parent_path(P);
+    }
+
+    // Only add this directory if the compiler is actually installed in a
+    // toolchain or the command line tools directory.
+    if (P.endswith(".xctoolchain/usr") ||
P.endswith("/CommandLineTools/usr")) {
+      AddUnmappedPath(P + "/include", ExternCSystem, false);
+
+      // If this is a toolchain directory, but not the default one, also
add the
+      // default. See:
+      //
+      //   <rdar://problem/14796042> FlexLexer.h is missing from
command-line
+      //   tools and SDKs.
+      if (P.endswith(".xctoolchain/usr") &&
+          !P.endswith("/XcodeDefault.xctoolchain/usr")) {
+        P = llvm::sys::path::parent_path(P);
+        P = llvm::sys::path::parent_path(P);
+        AddUnmappedPath(P + "/XcodeDefault.xctoolchain/usr/include",
+                        ExternCSystem, false);
+      }
+    }
+
     AddPath("/usr/include", ExternCSystem, false);
+  }
 }

 void InitHeaderSearch::
@@ -376,6 +426,11 @@
       AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1",
                                   "arm-apple-darwin10", "v6", "", triple);
       break;
+
+    case llvm::Triple::arm64:
+      AddGnuCPlusPlusIncludePaths("/usr/include/c++/4.2.1",
+                                  "arm64-apple-darwin10", "", "", triple);
+      break;
     }
     return;
   }
@@ -475,17 +530,15 @@
     if (HSOpts.UseLibcxx) {
       if (triple.isOSDarwin()) {
         // On Darwin, libc++ may be installed alongside the compiler in
-        // include/c++/v1.
+        // lib/c++/v1.
         if (!HSOpts.ResourceDir.empty()) {
           // Remove version from foo/lib/clang/version
           StringRef NoVer =
llvm::sys::path::parent_path(HSOpts.ResourceDir);
           // Remove clang from foo/lib/clang
-          StringRef Lib = llvm::sys::path::parent_path(NoVer);
-          // Remove lib from foo/lib
-          SmallString<128> P = llvm::sys::path::parent_path(Lib);
-
-          // Get foo/include/c++/v1
-          llvm::sys::path::append(P, "include", "c++", "v1");
+          SmallString<128> P = llvm::sys::path::parent_path(NoVer);
+
+          // Get foo/lib/c++/v1
+          llvm::sys::path::append(P, "c++", "v1");
           AddUnmappedPath(P.str(), CXXSystem, false);
         }
       }
@@ -703,3 +756,4 @@

   Init.Realize(Lang);
 }
+

Of particular interest here is Apple's removal of the code under section…

           // Remove clang from foo/lib/clang
-          StringRef Lib = llvm::sys::path::parent_path(NoVer);
-          // Remove lib from foo/lib
-          SmallString<128> P = llvm::sys::path::parent_path(Lib);
-
-          // Get foo/include/c++/v1
-          llvm::sys::path::append(P, "include", "c++", "v1");

which would have the compiler look for the libc++ headers in
/usr/lib/c++/v1 rather than /usr/include/c++/v1 as the stock sources from
llvm.org currently do.
     So on darwin12, we need…

+          SmallString<128> P = llvm::sys::path::parent_path(NoVer);
+
+          // Get foo/lib/c++/v1
+          llvm::sys::path::append(P, "c++", "v1");

but on darwin13, we need the variation…

+          SmallString<128> P = llvm::sys::path::parent_path(NoVer);
+
+          // Get foo/lib/c++/v1
+          llvm::sys::path::append("/Library/Developer/CommandLineTools", P,
"c++", "v1");

for the libc++ headers to be found.
                    Jack


On Sun, May 25, 2014 at 12:52 AM, Jack Howarth <howarth.at.f...@gmail.com>wrote:

> David,
>        Since fink assumes that the user will have installed the command
> line tools, we should use those locations for the c++ headers. However,
> because fink has a binary distribution again, llvm34 should have a post
> installation script in the clang34 split-off that checks for these expected
> system c++ header directories and if they aren't present either throws an
> error in the package installation or perhaps even invokes 'xcode-select
> --install' to automatically install the missing command line tools.
>                   Jack
>
> On Sunday, May 25, 2014, Jack Howarth <howarth.at.f...@gmail.com> wrote:
>
>> David,
>>      We still have one major issue to address on the llvm34 packaging for
>> 10.8 and 10.9. While on 10.7, clang++-3.4 automatically finds the c++
>> headers, this isn't the case yet for the later OS releases.
>>
>> On 10.8, the libc++ headers are stored in…
>>
>> /usr/lib/c++/v1
>>
>> whereas the libstdc++ headers are stored in…
>>
>> /usr/include/c++/4.2.1
>>
>> On 10.9,  the libc++ headers are installed with the Command Line Tools in…
>>
>> /Library/Developer/CommandLineTools/usr/lib/c++/v1
>>
>> whereas the libstdc++ headers are stored in the same location as in 10.8.
>> of…
>>
>> /usr/include/c++/4.2.1
>>
>> I am unfamiliar with how clang sets these paths. Hopefully we can have
>> the correct default locations added for both -stdlib=libc++ and
>> -stdlib=stdlibc++ for each OS release.
>>                Jack
>>
>
------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.
Get unparalleled scalability from the best Selenium testing platform available
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Fink-devel mailing list
Fink-devel@lists.sourceforge.net
List archive:
http://news.gmane.org/gmane.os.apple.fink.devel
Subscription management:
https://lists.sourceforge.net/lists/listinfo/fink-devel

Reply via email to