[cfe-commits] r136507 - /cfe/trunk/lib/Frontend/InitHeaderSearch.cpp

Douglas Gregor dgregor at apple.com
Fri Jul 29 19:09:18 PDT 2011



Sent from my iPhone

On Jul 29, 2011, at 7:02 PM, Eli Friedman <eli.friedman at gmail.com> wrote:

> On Fri, Jul 29, 2011 at 1:21 PM, Douglas Gregor <dgregor at apple.com> wrote:
>> Author: dgregor
>> Date: Fri Jul 29 15:21:18 2011
>> New Revision: 136507
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=136507&view=rev
>> Log:
>> On Darwin, libc++ may be installed alongside the compiler in
>> lib/c++/v1. Look there first, before falling back to the normal
>> /usr/include/c++/v1. <rdar://problem/9866149>
>> 
>> Modified:
>>    cfe/trunk/lib/Frontend/InitHeaderSearch.cpp
>> 
>> Modified: cfe/trunk/lib/Frontend/InitHeaderSearch.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitHeaderSearch.cpp?rev=136507&r1=136506&r2=136507&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Frontend/InitHeaderSearch.cpp (original)
>> +++ cfe/trunk/lib/Frontend/InitHeaderSearch.cpp Fri Jul 29 15:21:18 2011
>> @@ -940,8 +940,24 @@
>>                                                     const llvm::Triple &triple,
>>                                             const HeaderSearchOptions &HSOpts) {
>>   if (Lang.CPlusPlus && HSOpts.UseStandardCXXIncludes) {
>> -    if (HSOpts.UseLibcxx)
>> +    if (HSOpts.UseLibcxx) {
>> +      if (triple.isOSDarwin()) {
>> +        // On Darwin, libc++ may be installed alongside the compiler in
>> +        // lib/c++/v1.
>> +        llvm::sys::Path P(HSOpts.ResourceDir);
>> +        if (!P.isEmpty()) {
>> +          P.eraseComponent();  // Remove version from foo/lib/clang/version
>> +          P.eraseComponent();  // Remove clang from foo/lib/clang
>> +
>> +          // Get foo/lib/c++/v1
>> +          P.appendComponent("c++");
>> +          P.appendComponent("v1");
>> +          AddPath(P.str(), CXXSystem, true, false, false, true);
>> +        }
>> +      }
>> +
>>       AddPath("/usr/include/c++/v1", CXXSystem, true, false, false);
>> +    }
>>     else
>>       AddDefaultCPlusPlusIncludePaths(triple, HSOpts);
>>   }
> 
> Is there any particular reason to restrict this to Darwin?

I didn't want to speak for any other OS's, but I'd be happy to generalize it if people agree that this is the right thing to do. 



More information about the cfe-commits mailing list