Clang: Put clang's resource dir after /usr/local/include

...also on Linux.

That's what clang invoked from the command line does.

Change-Id: I59c48d11fab3b944bb42ca7bb4cd9093a735df60
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
Nikolai Kosjar
2019-10-11 09:29:50 +02:00
parent ceecd22e5f
commit 6156c59c62
3 changed files with 8 additions and 14 deletions

View File

@@ -120,24 +120,19 @@ QString clangIncludeDirectory(const QString &clangVersion, const QString &clangR
#endif #endif
} }
HeaderPaths::iterator resourceIterator(HeaderPaths &headerPaths, bool isMacOs) HeaderPaths::iterator resourceIterator(HeaderPaths &headerPaths)
{ {
// include/c++, include/g++, libc++\include and libc++abi\include // include/c++, include/g++, libc++\include and libc++abi\include
static const QString cppIncludes = R"((.*/include/.*(g\+\+|c\+\+).*))" static const QString cppIncludes = R"((.*/include/.*(g\+\+|c\+\+).*))"
R"(|(.*libc\+\+/include))" R"(|(.*libc\+\+/include))"
R"(|(.*libc\+\+abi/include))"; R"(|(.*libc\+\+abi/include))"
R"(|(/usr/local/include))";
static const QRegularExpression includeRegExp("\\A(" + cppIncludes + ")\\z"); static const QRegularExpression includeRegExp("\\A(" + cppIncludes + ")\\z");
// The same as includeRegExp but also matches /usr/local/include
static const QRegularExpression includeRegExpMac("\\A(" + cppIncludes
+ R"(|(/usr/local/include))" + ")\\z");
const QRegularExpression &includePathRegEx = isMacOs ? includeRegExpMac : includeRegExp;
return std::stable_partition(headerPaths.begin(), return std::stable_partition(headerPaths.begin(),
headerPaths.end(), headerPaths.end(),
[&](const HeaderPath &headerPath) { [&](const HeaderPath &headerPath) {
return includePathRegEx.match(headerPath.path).hasMatch(); return includeRegExp.match(headerPath.path).hasMatch();
}); });
} }
@@ -165,8 +160,7 @@ void HeaderPathFilter::tweakHeaderPaths()
removeClangSystemHeaderPaths(builtInHeaderPaths); removeClangSystemHeaderPaths(builtInHeaderPaths);
removeGccInternalIncludePaths(); removeGccInternalIncludePaths();
auto split = resourceIterator(builtInHeaderPaths, auto split = resourceIterator(builtInHeaderPaths);
projectPart.toolChainTargetTriple.contains("darwin"));
if (!clangVersion.isEmpty()) { if (!clangVersion.isEmpty()) {
const QString clangIncludePath = clangIncludeDirectory(clangVersion, clangResourceDirectory); const QString clangIncludePath = clangIncludeDirectory(clangVersion, clangResourceDirectory);

View File

@@ -351,10 +351,10 @@ TEST_F(CompilerOptionsBuilder, ClangHeadersAndCppIncludesPathsOrderLinux)
QDir::toNativeSeparators( QDir::toNativeSeparators(
"/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8"), "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8"),
"-isystem", "-isystem",
QDir::toNativeSeparators(CLANG_RESOURCE_DIR ""),
"-isystem",
QDir::toNativeSeparators("/usr/local/include"), QDir::toNativeSeparators("/usr/local/include"),
"-isystem", "-isystem",
QDir::toNativeSeparators(CLANG_RESOURCE_DIR ""),
"-isystem",
QDir::toNativeSeparators("/usr/lib/gcc/x86_64-linux-gnu/4.8/include"), QDir::toNativeSeparators("/usr/lib/gcc/x86_64-linux-gnu/4.8/include"),
"-isystem", "-isystem",
QDir::toNativeSeparators("/usr/include/x86_64-linux-gnu"), QDir::toNativeSeparators("/usr/include/x86_64-linux-gnu"),

View File

@@ -241,8 +241,8 @@ TEST_F(HeaderPathFilter, ClangHeadersAndCppIncludesPathsOrderLinux)
"c++/4.8/backward"), "c++/4.8/backward"),
HasBuiltIn("/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/" HasBuiltIn("/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/"
"x86_64-linux-gnu/c++/4.8"), "x86_64-linux-gnu/c++/4.8"),
HasBuiltIn(CLANG_RESOURCE_DIR),
HasBuiltIn("/usr/local/include"), HasBuiltIn("/usr/local/include"),
HasBuiltIn(CLANG_RESOURCE_DIR),
HasBuiltIn("/usr/lib/gcc/x86_64-linux-gnu/4.8/include"), HasBuiltIn("/usr/lib/gcc/x86_64-linux-gnu/4.8/include"),
HasBuiltIn("/usr/include/x86_64-linux-gnu"), HasBuiltIn("/usr/include/x86_64-linux-gnu"),
HasBuiltIn("/usr/include"), HasBuiltIn("/usr/include"),