[cfe-dev] Extracting the include tree from a source file

Paul Davey plmdvy at gmail.com
Thu Nov 18 17:12:05 PST 2010


On Fri, Nov 19, 2010 at 8:21 AM, Bertjan Broeksema <broeksema at kde.org> wrote:
> Nico Weber wrote:
>
>> Hm, this _might_ be because clang comes with a few standard headers,
>> see clang/lib/Headers. Maybe clang adds these to the search path
>> somehow. Adding a gentoo-specific include path is the correct fix in
>> this case.
>
> Yes it is because clang needs this standard headers installed in
> /usr/lib/clang/2.8/include (on linux of course, don't know about other
> platforms). From libs/Driver/Driver.cpp: (line 76 and further in 2.8)
>
> // Compute the path to the resource directory.
> llvm::sys::Path P(Dir);
> P.eraseComponent(); // Remove /bin from foo/bin
> P.appendComponent("lib");
> P.appendComponent("clang");
> P.appendComponent(CLANG_VERSION_STRING);
> ResourceDir = P.str();
>
>
> I don't really understand why. Moreover, I don't understand why
> AddGnuCPlusPlusIncludePaths in InitHeaderSearch.cpp is implemented as is.
> For example take:
>
> AddGnuCPlusPlusIncludePaths(
>         "/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.4/include/g++-v4",
>         "x86_64-pc-linux-gnu", "32", "", triple);
>
> The directory above (i.e. /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3/include/)
> also contains the headers which are in /usr/lib/clang/2.8/include. So I
> wondered why AddGnuCPlusPlusIncludePaths, doesn't add this path too so that
> the clang include directory is not required.
>
> This might be Gentoo specific, meaning that for other distros the current
> code *does* find the standard headers and therefore doesn't need the clang
> include path. If so, please tell me. In that case for the Gentoo adding a
> line like:
>
> AddPath( "/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.4/include/"
>         , System, true, false, false );
>
> would remove the need for custom apps to add the clang include dir.
>
> Cheers,
>
> Bertjan
>
The headers in lib/clang/2.8/include are clang header, the ones for
gcc are gcc header, the ones for clang should be used with clang.
That function only adds the C++ header path which is actually for
libstdc++ not part of gcc the other headers are part of gcc and
shouldn't be messed with AFAIK.  As you said the driver computes the
path to clangs headers relative to itself, perhaps this should be
separated into a separate function.




More information about the cfe-dev mailing list