CppEditor: Make CompilerOptionsBuilder take the actual clang include dir

This is more clear than passing in version and fallback path and
calculating the real path from them somewhere down the line.
No functional changes for now.

Change-Id: Iae2fc8015c778d787ed6e0ce898f41a7a05b2607
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2022-05-09 14:59:04 +02:00
parent d458f9f5e6
commit ad8db12de9
8 changed files with 43 additions and 65 deletions

View File

@@ -375,10 +375,11 @@ CompilerOptionsBuilder clangOptionsBuilder(const ProjectPart &projectPart,
const auto useBuildSystemWarnings = warningsConfig.useBuildSystemWarnings() const auto useBuildSystemWarnings = warningsConfig.useBuildSystemWarnings()
? UseBuildSystemWarnings::Yes ? UseBuildSystemWarnings::Yes
: UseBuildSystemWarnings::No; : UseBuildSystemWarnings::No;
const FilePath clangIncludeDir = Core::ICore::clangIncludeDirectory(
QString(CLANG_VERSION), FilePath(CLANG_INCLUDE_DIR));
CompilerOptionsBuilder optionsBuilder(projectPart, UseSystemHeader::No, CompilerOptionsBuilder optionsBuilder(projectPart, UseSystemHeader::No,
UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseTweakedHeaderPaths::Yes, UseLanguageDefines::No,
useBuildSystemWarnings, QString(CLANG_VERSION), useBuildSystemWarnings, clangIncludeDir);
FilePath(CLANG_INCLUDE_DIR));
optionsBuilder.provideAdditionalMacros({ProjectExplorer::Macro("Q_CREATOR_RUN", "1")}); optionsBuilder.provideAdditionalMacros({ProjectExplorer::Macro("Q_CREATOR_RUN", "1")});
optionsBuilder.build(ProjectFile::Unclassified, UsePrecompiledHeaders::No); optionsBuilder.build(ProjectFile::Unclassified, UsePrecompiledHeaders::No);
const QString uiIncludePath const QString uiIncludePath

View File

@@ -119,13 +119,14 @@ AnalyzeUnit::AnalyzeUnit(const FileInfo &fileInfo,
const FilePath &clangIncludeDir, const FilePath &clangIncludeDir,
const QString &clangVersion) const QString &clangVersion)
{ {
const FilePath actualClangIncludeDir = Core::ICore::clangIncludeDirectory(
clangVersion, clangIncludeDir);
CompilerOptionsBuilder optionsBuilder(*fileInfo.projectPart, CompilerOptionsBuilder optionsBuilder(*fileInfo.projectPart,
UseSystemHeader::No, UseSystemHeader::No,
UseTweakedHeaderPaths::Tools, UseTweakedHeaderPaths::Tools,
UseLanguageDefines::No, UseLanguageDefines::No,
UseBuildSystemWarnings::No, UseBuildSystemWarnings::No,
clangVersion, actualClangIncludeDir);
clangIncludeDir);
file = fileInfo.file.toString(); file = fileInfo.file.toString();
arguments = extraClangToolsPrependOptions(); arguments = extraClangToolsPrependOptions();
arguments.append(optionsBuilder.build(fileInfo.kind, CppEditor::getPchUsage())); arguments.append(optionsBuilder.build(fileInfo.kind, CppEditor::getPchUsage()));

View File

@@ -108,14 +108,12 @@ CompilerOptionsBuilder::CompilerOptionsBuilder(const ProjectPart &projectPart,
UseTweakedHeaderPaths useTweakedHeaderPaths, UseTweakedHeaderPaths useTweakedHeaderPaths,
UseLanguageDefines useLanguageDefines, UseLanguageDefines useLanguageDefines,
UseBuildSystemWarnings useBuildSystemWarnings, UseBuildSystemWarnings useBuildSystemWarnings,
const QString &clangVersion,
const FilePath &clangIncludeDirectory) const FilePath &clangIncludeDirectory)
: m_projectPart(projectPart) : m_projectPart(projectPart)
, m_useSystemHeader(useSystemHeader) , m_useSystemHeader(useSystemHeader)
, m_useTweakedHeaderPaths(useTweakedHeaderPaths) , m_useTweakedHeaderPaths(useTweakedHeaderPaths)
, m_useLanguageDefines(useLanguageDefines) , m_useLanguageDefines(useLanguageDefines)
, m_useBuildSystemWarnings(useBuildSystemWarnings) , m_useBuildSystemWarnings(useBuildSystemWarnings)
, m_clangVersion(clangVersion)
, m_clangIncludeDirectory(clangIncludeDirectory) , m_clangIncludeDirectory(clangIncludeDirectory)
{ {
} }
@@ -351,7 +349,6 @@ void CompilerOptionsBuilder::addHeaderPathOptions()
Internal::HeaderPathFilter filter{ Internal::HeaderPathFilter filter{
m_projectPart, m_projectPart,
m_useTweakedHeaderPaths, m_useTweakedHeaderPaths,
m_clangVersion,
m_clangIncludeDirectory}; m_clangIncludeDirectory};
filter.process(); filter.process();
@@ -362,8 +359,6 @@ void CompilerOptionsBuilder::addHeaderPathOptions()
addIncludeDirOptionForPath(headerPath); addIncludeDirOptionForPath(headerPath);
if (m_useTweakedHeaderPaths != UseTweakedHeaderPaths::No) { if (m_useTweakedHeaderPaths != UseTweakedHeaderPaths::No) {
QTC_CHECK(!m_clangVersion.isEmpty()
&& "Clang resource directory is required with UseTweakedHeaderPaths::Yes.");
// Exclude all built-in includes and Clang resource directory. // Exclude all built-in includes and Clang resource directory.
m_options.prepend("-nostdinc++"); m_options.prepend("-nostdinc++");

View File

@@ -50,7 +50,6 @@ public:
UseTweakedHeaderPaths useTweakedHeaderPaths = UseTweakedHeaderPaths::No, UseTweakedHeaderPaths useTweakedHeaderPaths = UseTweakedHeaderPaths::No,
UseLanguageDefines useLanguageDefines = UseLanguageDefines::No, UseLanguageDefines useLanguageDefines = UseLanguageDefines::No,
UseBuildSystemWarnings useBuildSystemWarnings = UseBuildSystemWarnings::No, UseBuildSystemWarnings useBuildSystemWarnings = UseBuildSystemWarnings::No,
const QString &clangVersion = {},
const Utils::FilePath &clangIncludeDirectory = {}); const Utils::FilePath &clangIncludeDirectory = {});
QStringList build(ProjectFile::Kind fileKind, UsePrecompiledHeaders usePrecompiledHeaders); QStringList build(ProjectFile::Kind fileKind, UsePrecompiledHeaders usePrecompiledHeaders);
@@ -116,7 +115,6 @@ private:
const UseLanguageDefines m_useLanguageDefines; const UseLanguageDefines m_useLanguageDefines;
const UseBuildSystemWarnings m_useBuildSystemWarnings; const UseBuildSystemWarnings m_useBuildSystemWarnings;
const QString m_clangVersion;
const Utils::FilePath m_clangIncludeDirectory; const Utils::FilePath m_clangIncludeDirectory;
ProjectExplorer::Macros m_additionalMacros; ProjectExplorer::Macros m_additionalMacros;

View File

@@ -209,13 +209,13 @@ void CompilerOptionsBuilderTest::testHeaderPathOptionsOrder()
TestHelper t; TestHelper t;
CompilerOptionsBuilder compilerOptionsBuilder{t.finalize(), UseSystemHeader::No, CompilerOptionsBuilder compilerOptionsBuilder{t.finalize(), UseSystemHeader::No,
UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No, UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No,
"dummy_version", ""}; "/dummy"};
compilerOptionsBuilder.addHeaderPathOptions(); compilerOptionsBuilder.addHeaderPathOptions();
QCOMPARE(compilerOptionsBuilder.options(), QCOMPARE(compilerOptionsBuilder.options(),
(QStringList{"-nostdinc", "-nostdinc++", "-I", t.toNative("/tmp/path"), (QStringList{"-nostdinc", "-nostdinc++", "-I", t.toNative("/tmp/path"),
"-I", t.toNative("/tmp/system_path"), "-isystem", "", "-isystem", "-I", t.toNative("/tmp/system_path"), "-isystem", t.toNative("/dummy"),
t.toNative("/tmp/builtin_path")})); "-isystem", t.toNative("/tmp/builtin_path")}));
} }
void CompilerOptionsBuilderTest::testHeaderPathOptionsOrderMsvc() void CompilerOptionsBuilderTest::testHeaderPathOptionsOrderMsvc()
@@ -224,14 +224,14 @@ void CompilerOptionsBuilderTest::testHeaderPathOptionsOrderMsvc()
t.toolchainType = Constants::MSVC_TOOLCHAIN_TYPEID; t.toolchainType = Constants::MSVC_TOOLCHAIN_TYPEID;
CompilerOptionsBuilder compilerOptionsBuilder{t.finalize(), UseSystemHeader::No, CompilerOptionsBuilder compilerOptionsBuilder{t.finalize(), UseSystemHeader::No,
UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No, UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No,
"dummy_version", ""}; "/dummy"};
compilerOptionsBuilder.evaluateCompilerFlags(); compilerOptionsBuilder.evaluateCompilerFlags();
compilerOptionsBuilder.addHeaderPathOptions(); compilerOptionsBuilder.addHeaderPathOptions();
QCOMPARE(compilerOptionsBuilder.options(), QCOMPARE(compilerOptionsBuilder.options(),
(QStringList{"-nostdinc", "-nostdinc++", "-I", t.toNative("/tmp/path"), (QStringList{"-nostdinc", "-nostdinc++", "-I", t.toNative("/tmp/path"),
"-I", t.toNative("/tmp/system_path"), "/clang:-isystem", "-I", t.toNative("/tmp/system_path"), "/clang:-isystem",
"/clang:", "/clang:-isystem", "/clang:" + t.toNative("/dummy"), "/clang:-isystem",
"/clang:" + t.toNative("/tmp/builtin_path")})); "/clang:" + t.toNative("/tmp/builtin_path")}));
} }
@@ -240,13 +240,14 @@ void CompilerOptionsBuilderTest::testUseSystemHeader()
TestHelper t; TestHelper t;
CompilerOptionsBuilder compilerOptionsBuilder{t.finalize(), UseSystemHeader::Yes, CompilerOptionsBuilder compilerOptionsBuilder{t.finalize(), UseSystemHeader::Yes,
UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No, UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No,
"dummy_version", ""}; "/dummy"};
compilerOptionsBuilder.addHeaderPathOptions(); compilerOptionsBuilder.addHeaderPathOptions();
QCOMPARE(compilerOptionsBuilder.options(), QCOMPARE(compilerOptionsBuilder.options(),
(QStringList{"-nostdinc", "-nostdinc++", "-I", t.toNative("/tmp/path"), (QStringList{"-nostdinc", "-nostdinc++", "-I", t.toNative("/tmp/path"),
"-isystem", t.toNative("/tmp/system_path"), "-isystem", t.toNative("/tmp/system_path"),
"-isystem", "", "-isystem", t.toNative("/tmp/builtin_path")})); "-isystem", t.toNative("/dummy"),
"-isystem", t.toNative("/tmp/builtin_path")}));
} }
void CompilerOptionsBuilderTest::testNoClangHeadersPath() void CompilerOptionsBuilderTest::testNoClangHeadersPath()
@@ -272,7 +273,7 @@ void CompilerOptionsBuilderTest::testClangHeadersAndCppIncludePathsOrderMacOs()
t.headerPaths = additionalHeaderPaths + t.headerPaths; t.headerPaths = additionalHeaderPaths + t.headerPaths;
CompilerOptionsBuilder compilerOptionsBuilder(t.finalize(), UseSystemHeader::No, CompilerOptionsBuilder compilerOptionsBuilder(t.finalize(), UseSystemHeader::No,
UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No, UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No,
"dummy_version", ""); "/dummy");
compilerOptionsBuilder.addHeaderPathOptions(); compilerOptionsBuilder.addHeaderPathOptions();
QCOMPARE(compilerOptionsBuilder.options(), QCOMPARE(compilerOptionsBuilder.options(),
@@ -281,7 +282,7 @@ void CompilerOptionsBuilderTest::testClangHeadersAndCppIncludePathsOrderMacOs()
"-isystem", t.toNative("/usr/include/c++/4.2.1"), "-isystem", t.toNative("/usr/include/c++/4.2.1"),
"-isystem", t.toNative("/usr/include/c++/4.2.1/backward"), "-isystem", t.toNative("/usr/include/c++/4.2.1/backward"),
"-isystem", t.toNative("/usr/local/include"), "-isystem", t.toNative("/usr/local/include"),
"-isystem", "", "-isystem", t.toNative("/dummy"),
"-isystem", t.toNative("/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include"), "-isystem", t.toNative("/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include"),
"-isystem", t.toNative("/usr/include"), "-isystem", t.toNative("/usr/include"),
"-isystem", t.toNative("/tmp/builtin_path")})); "-isystem", t.toNative("/tmp/builtin_path")}));
@@ -301,7 +302,7 @@ void CompilerOptionsBuilderTest::testClangHeadersAndCppIncludePathsOrderLinux()
t.builtIn("/usr/include")}; t.builtIn("/usr/include")};
CompilerOptionsBuilder compilerOptionsBuilder(t.finalize(), UseSystemHeader::No, CompilerOptionsBuilder compilerOptionsBuilder(t.finalize(), UseSystemHeader::No,
UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No, UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No,
"dummy_version", ""); "/dummy");
compilerOptionsBuilder.addHeaderPathOptions(); compilerOptionsBuilder.addHeaderPathOptions();
QCOMPARE(compilerOptionsBuilder.options(), QCOMPARE(compilerOptionsBuilder.options(),
@@ -310,7 +311,7 @@ void CompilerOptionsBuilderTest::testClangHeadersAndCppIncludePathsOrderLinux()
"-isystem", t.toNative("/usr/include/c++/4.8/backward"), "-isystem", t.toNative("/usr/include/c++/4.8/backward"),
"-isystem", t.toNative("/usr/include/x86_64-linux-gnu/c++/4.8"), "-isystem", t.toNative("/usr/include/x86_64-linux-gnu/c++/4.8"),
"-isystem", t.toNative("/usr/local/include"), "-isystem", t.toNative("/usr/local/include"),
"-isystem", "", "-isystem", t.toNative("/dummy"),
"-isystem", t.toNative("/usr/lib/gcc/x86_64-linux-gnu/4.8/include"), "-isystem", t.toNative("/usr/lib/gcc/x86_64-linux-gnu/4.8/include"),
"-isystem", t.toNative("/usr/include/x86_64-linux-gnu"), "-isystem", t.toNative("/usr/include/x86_64-linux-gnu"),
"-isystem", t.toNative("/usr/include")})); "-isystem", t.toNative("/usr/include")}));
@@ -327,7 +328,7 @@ void CompilerOptionsBuilderTest::testClangHeadersAndCppIncludePathsOrderNoVersio
t.builtIn("C:/mingw530/i686-w64-mingw32/include/c++/backward")}; t.builtIn("C:/mingw530/i686-w64-mingw32/include/c++/backward")};
CompilerOptionsBuilder compilerOptionsBuilder(t.finalize(), UseSystemHeader::No, CompilerOptionsBuilder compilerOptionsBuilder(t.finalize(), UseSystemHeader::No,
UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No, UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No,
"dummy_version", ""); "/dummy");
compilerOptionsBuilder.addHeaderPathOptions(); compilerOptionsBuilder.addHeaderPathOptions();
QCOMPARE(compilerOptionsBuilder.options(), QCOMPARE(compilerOptionsBuilder.options(),
@@ -335,7 +336,7 @@ void CompilerOptionsBuilderTest::testClangHeadersAndCppIncludePathsOrderNoVersio
"-isystem", t.toNative("C:/mingw530/i686-w64-mingw32/include/c++"), "-isystem", t.toNative("C:/mingw530/i686-w64-mingw32/include/c++"),
"-isystem", t.toNative("C:/mingw530/i686-w64-mingw32/include/c++/i686-w64-mingw32"), "-isystem", t.toNative("C:/mingw530/i686-w64-mingw32/include/c++/i686-w64-mingw32"),
"-isystem", t.toNative("C:/mingw530/i686-w64-mingw32/include/c++/backward"), "-isystem", t.toNative("C:/mingw530/i686-w64-mingw32/include/c++/backward"),
"-isystem", "", "-isystem", t.toNative("/dummy"),
"-isystem", t.toNative("C:/mingw530/i686-w64-mingw32/include")})); "-isystem", t.toNative("C:/mingw530/i686-w64-mingw32/include")}));
} }
@@ -351,14 +352,14 @@ void CompilerOptionsBuilderTest::testClangHeadersAndCppIncludePathsOrderAndroidC
t.builtIn("C:/Android/sdk/ndk-bundle/sysroot/usr/include")}; t.builtIn("C:/Android/sdk/ndk-bundle/sysroot/usr/include")};
CompilerOptionsBuilder compilerOptionsBuilder(t.finalize(), UseSystemHeader::No, CompilerOptionsBuilder compilerOptionsBuilder(t.finalize(), UseSystemHeader::No,
UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No, UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No,
"dummy_version", ""); "/dummy");
compilerOptionsBuilder.addHeaderPathOptions(); compilerOptionsBuilder.addHeaderPathOptions();
QCOMPARE(compilerOptionsBuilder.options(), QCOMPARE(compilerOptionsBuilder.options(),
(QStringList{"-nostdinc", "-nostdinc++", (QStringList{"-nostdinc", "-nostdinc++",
"-isystem", t.toNative("C:/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include"), "-isystem", t.toNative("C:/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include"),
"-isystem", t.toNative("C:/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++abi/include"), "-isystem", t.toNative("C:/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++abi/include"),
"-isystem", t.toNative(""), "-isystem", t.toNative("/dummy"),
"-isystem", t.toNative("C:/Android/sdk/ndk-bundle/sysroot/usr/include/i686-linux-android"), "-isystem", t.toNative("C:/Android/sdk/ndk-bundle/sysroot/usr/include/i686-linux-android"),
"-isystem", t.toNative("C:/Android/sdk/ndk-bundle/sources/android/support/include"), "-isystem", t.toNative("C:/Android/sdk/ndk-bundle/sources/android/support/include"),
"-isystem", t.toNative("C:/Android/sdk/ndk-bundle/sysroot/usr/include")})); "-isystem", t.toNative("C:/Android/sdk/ndk-bundle/sysroot/usr/include")}));
@@ -434,8 +435,7 @@ void CompilerOptionsBuilderTest::testInsertWrappedQtHeaders()
{ {
TestHelper t; TestHelper t;
CompilerOptionsBuilder compilerOptionsBuilder{t.finalize(), UseSystemHeader::Yes, CompilerOptionsBuilder compilerOptionsBuilder{t.finalize(), UseSystemHeader::Yes,
UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No, UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No};
"dummy_version", ""};
compilerOptionsBuilder.insertWrappedQtHeaders(); compilerOptionsBuilder.insertWrappedQtHeaders();
QVERIFY(Utils::contains(compilerOptionsBuilder.options(), QVERIFY(Utils::contains(compilerOptionsBuilder.options(),
@@ -446,7 +446,7 @@ void CompilerOptionsBuilderTest::testInsertWrappedMingwHeadersWithNonMingwToolch
{ {
TestHelper t; TestHelper t;
CompilerOptionsBuilder builder{t.finalize(), UseSystemHeader::Yes, UseTweakedHeaderPaths::Yes, CompilerOptionsBuilder builder{t.finalize(), UseSystemHeader::Yes, UseTweakedHeaderPaths::Yes,
UseLanguageDefines::No, UseBuildSystemWarnings::No, "dummy_version", ""}; UseLanguageDefines::No, UseBuildSystemWarnings::No};
builder.insertWrappedMingwHeaders(); builder.insertWrappedMingwHeaders();
QVERIFY(!Utils::contains(builder.options(), QVERIFY(!Utils::contains(builder.options(),
@@ -458,7 +458,7 @@ void CompilerOptionsBuilderTest::testInsertWrappedMingwHeadersWithMingwToolchain
TestHelper t; TestHelper t;
t.toolchainType = Constants::MINGW_TOOLCHAIN_TYPEID; t.toolchainType = Constants::MINGW_TOOLCHAIN_TYPEID;
CompilerOptionsBuilder builder{t.finalize(), UseSystemHeader::Yes, UseTweakedHeaderPaths::Yes, CompilerOptionsBuilder builder{t.finalize(), UseSystemHeader::Yes, UseTweakedHeaderPaths::Yes,
UseLanguageDefines::No, UseBuildSystemWarnings::No, "dummy_version", ""}; UseLanguageDefines::No, UseBuildSystemWarnings::No};
builder.insertWrappedMingwHeaders(); builder.insertWrappedMingwHeaders();
QVERIFY(Utils::contains(builder.options(), QVERIFY(Utils::contains(builder.options(),
@@ -600,7 +600,7 @@ void CompilerOptionsBuilderTest::testBuildAllOptions()
t.extraFlags = QStringList{"-arch", "x86_64"}; t.extraFlags = QStringList{"-arch", "x86_64"};
CompilerOptionsBuilder compilerOptionsBuilder(t.finalize(), UseSystemHeader::No, CompilerOptionsBuilder compilerOptionsBuilder(t.finalize(), UseSystemHeader::No,
UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No, UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No,
"dummy_version", ""); "/dummy");
compilerOptionsBuilder.build(ProjectFile::CXXSource, UsePrecompiledHeaders::No); compilerOptionsBuilder.build(ProjectFile::CXXSource, UsePrecompiledHeaders::No);
const QString wrappedQtHeadersPath = Utils::findOrDefault(compilerOptionsBuilder.options(), const QString wrappedQtHeadersPath = Utils::findOrDefault(compilerOptionsBuilder.options(),
@@ -614,7 +614,7 @@ void CompilerOptionsBuilderTest::testBuildAllOptions()
"-I", wrappedQtCoreHeadersPath, "-I", wrappedQtCoreHeadersPath,
"-I", t.toNative("/tmp/path"), "-I", t.toNative("/tmp/path"),
"-I", t.toNative("/tmp/system_path"), "-I", t.toNative("/tmp/system_path"),
"-isystem", "", "-isystem", t.toNative("/dummy"),
"-isystem", t.toNative("/tmp/builtin_path")})); "-isystem", t.toNative("/tmp/builtin_path")}));
} }
@@ -624,7 +624,7 @@ void CompilerOptionsBuilderTest::testBuildAllOptionsMsvc()
t.toolchainType = Constants::MSVC_TOOLCHAIN_TYPEID; t.toolchainType = Constants::MSVC_TOOLCHAIN_TYPEID;
CompilerOptionsBuilder compilerOptionsBuilder(t.finalize(), UseSystemHeader::No, CompilerOptionsBuilder compilerOptionsBuilder(t.finalize(), UseSystemHeader::No,
UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No, UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No,
"dummy_version", ""); "/dummy");
compilerOptionsBuilder.build(ProjectFile::CXXSource, UsePrecompiledHeaders::No); compilerOptionsBuilder.build(ProjectFile::CXXSource, UsePrecompiledHeaders::No);
const QString wrappedQtHeadersPath = Utils::findOrDefault(compilerOptionsBuilder.options(), const QString wrappedQtHeadersPath = Utils::findOrDefault(compilerOptionsBuilder.options(),
@@ -642,7 +642,7 @@ void CompilerOptionsBuilderTest::testBuildAllOptionsMsvc()
"-I", wrappedQtCoreHeadersPath, "-I", wrappedQtCoreHeadersPath,
"-I", t.toNative("/tmp/path"), "-I", t.toNative("/tmp/path"),
"-I", t.toNative("/tmp/system_path"), "-I", t.toNative("/tmp/system_path"),
"/clang:-isystem", "/clang:", "/clang:-isystem", "/clang:" + t.toNative("/dummy"),
"/clang:-isystem", "/clang:" + t.toNative("/tmp/builtin_path")})); "/clang:-isystem", "/clang:" + t.toNative("/tmp/builtin_path")}));
} }
@@ -653,7 +653,7 @@ void CompilerOptionsBuilderTest::testBuildAllOptionsMsvcWithExceptions()
t.toolchainMacros.append(Macro{"_CPPUNWIND", "1"}); t.toolchainMacros.append(Macro{"_CPPUNWIND", "1"});
CompilerOptionsBuilder compilerOptionsBuilder(t.finalize(), UseSystemHeader::No, CompilerOptionsBuilder compilerOptionsBuilder(t.finalize(), UseSystemHeader::No,
UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No, UseTweakedHeaderPaths::Yes, UseLanguageDefines::No, UseBuildSystemWarnings::No,
"dummy_version", ""); "/dummy");
compilerOptionsBuilder.build(ProjectFile::CXXSource, UsePrecompiledHeaders::No); compilerOptionsBuilder.build(ProjectFile::CXXSource, UsePrecompiledHeaders::No);
const QString wrappedQtHeadersPath = Utils::findOrDefault(compilerOptionsBuilder.options(), const QString wrappedQtHeadersPath = Utils::findOrDefault(compilerOptionsBuilder.options(),
@@ -672,7 +672,7 @@ void CompilerOptionsBuilderTest::testBuildAllOptionsMsvcWithExceptions()
"-I", wrappedQtCoreHeadersPath, "-I", wrappedQtCoreHeadersPath,
"-I", t.toNative("/tmp/path"), "-I", t.toNative("/tmp/path"),
"-I", t.toNative("/tmp/system_path"), "-I", t.toNative("/tmp/system_path"),
"/clang:-isystem", "/clang:", "/clang:-isystem", "/clang:" + t.toNative("/dummy"),
"/clang:-isystem", "/clang:" + t.toNative("/tmp/builtin_path")})); "/clang:-isystem", "/clang:" + t.toNative("/tmp/builtin_path")}));
} }

View File

@@ -103,17 +103,6 @@ void HeaderPathFilter::filterHeaderPath(const ProjectExplorer::HeaderPath &heade
namespace { namespace {
FilePath clangIncludeDirectory(const QString &clangVersion, const FilePath &clangFallbackIncludeDir)
{
#ifndef UNIT_TESTS
return Core::ICore::clangIncludeDirectory(clangVersion, clangFallbackIncludeDir);
#else
Q_UNUSED(clangVersion)
Q_UNUSED(clangFallbackIncludeDir)
return {CLANG_INCLUDE_DIR};
#endif
}
HeaderPaths::iterator resourceIterator(HeaderPaths &headerPaths) 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
@@ -156,11 +145,8 @@ void HeaderPathFilter::tweakHeaderPaths()
auto split = resourceIterator(builtInHeaderPaths); auto split = resourceIterator(builtInHeaderPaths);
if (!clangVersion.isEmpty()) { if (!clangIncludeDirectory.isEmpty())
const FilePath clangIncludePath builtInHeaderPaths.insert(split, HeaderPath::makeBuiltIn(clangIncludeDirectory));
= clangIncludeDirectory(clangVersion, clangFallbackIncludeDirectory);
builtInHeaderPaths.insert(split, HeaderPath::makeBuiltIn(clangIncludePath));
}
} }
void HeaderPathFilter::addPreIncludesPath() void HeaderPathFilter::addPreIncludesPath()

View File

@@ -37,13 +37,11 @@ class HeaderPathFilter
public: public:
HeaderPathFilter(const ProjectPart &projectPart, HeaderPathFilter(const ProjectPart &projectPart,
UseTweakedHeaderPaths useTweakedHeaderPaths = UseTweakedHeaderPaths::Yes, UseTweakedHeaderPaths useTweakedHeaderPaths = UseTweakedHeaderPaths::Yes,
const QString &clangVersion = {},
const Utils::FilePath &clangIncludeDirectory = {}, const Utils::FilePath &clangIncludeDirectory = {},
const QString &projectDirectory = {}, const QString &projectDirectory = {},
const QString &buildDirectory = {}) const QString &buildDirectory = {})
: projectPart{projectPart} : projectPart{projectPart}
, clangVersion{clangVersion} , clangIncludeDirectory{clangIncludeDirectory}
, clangFallbackIncludeDirectory{clangIncludeDirectory}
, projectDirectory(ensurePathWithSlashEnding(projectDirectory)) , projectDirectory(ensurePathWithSlashEnding(projectDirectory))
, buildDirectory(ensurePathWithSlashEnding(buildDirectory)) , buildDirectory(ensurePathWithSlashEnding(buildDirectory))
, useTweakedHeaderPaths{useTweakedHeaderPaths} , useTweakedHeaderPaths{useTweakedHeaderPaths}
@@ -69,8 +67,7 @@ public:
ProjectExplorer::HeaderPaths systemHeaderPaths; ProjectExplorer::HeaderPaths systemHeaderPaths;
ProjectExplorer::HeaderPaths userHeaderPaths; ProjectExplorer::HeaderPaths userHeaderPaths;
const ProjectPart &projectPart; const ProjectPart &projectPart;
const QString clangVersion; const Utils::FilePath clangIncludeDirectory;
const Utils::FilePath clangFallbackIncludeDirectory;
const QString projectDirectory; const QString projectDirectory;
const QString buildDirectory; const QString buildDirectory;
const UseTweakedHeaderPaths useTweakedHeaderPaths; const UseTweakedHeaderPaths useTweakedHeaderPaths;

View File

@@ -511,7 +511,7 @@ public:
tcInfo.targetTriple = targetTriple; tcInfo.targetTriple = targetTriple;
tcInfo.installDir = toolchainInstallDir; tcInfo.installDir = toolchainInstallDir;
projectPart = ProjectPart::create({}, rpp, {}, {}, {}, {}, {}, tcInfo); projectPart = ProjectPart::create({}, rpp, {}, {}, {}, {}, {}, tcInfo);
filter.emplace(HeaderPathFilter(*projectPart, UseTweakedHeaderPaths::No, {}, {}, filter.emplace(HeaderPathFilter(*projectPart, UseTweakedHeaderPaths::No, {},
"/project", "/build")); "/project", "/build"));
return *projectPart; return *projectPart;
} }
@@ -602,7 +602,7 @@ void HeaderPathFilterTest::testDontAddInvalidPath()
void HeaderPathFilterTest::testClangHeadersPath() void HeaderPathFilterTest::testClangHeadersPath()
{ {
HeaderPathFilterTestHelper t; HeaderPathFilterTestHelper t;
HeaderPathFilter filter(t.finalize(), UseTweakedHeaderPaths::Yes, "6.0", "clang_dir"); HeaderPathFilter filter(t.finalize(), UseTweakedHeaderPaths::Yes, "clang_dir");
filter.process(); filter.process();
QCOMPARE(filter.builtInHeaderPaths, (HeaderPaths{t.builtIn("clang_dir"), QCOMPARE(filter.builtInHeaderPaths, (HeaderPaths{t.builtIn("clang_dir"),
@@ -631,7 +631,7 @@ void HeaderPathFilterTest::testClangHeadersAndCppIncludesPathsOrderMacOs()
}; };
std::copy(builtIns.begin(), builtIns.end(), std::copy(builtIns.begin(), builtIns.end(),
std::inserter(t.headerPaths, t.headerPaths.begin())); std::inserter(t.headerPaths, t.headerPaths.begin()));
HeaderPathFilter filter(t.finalize(), UseTweakedHeaderPaths::Yes, "6.0", "clang_dir"); HeaderPathFilter filter(t.finalize(), UseTweakedHeaderPaths::Yes, "clang_dir");
filter.process(); filter.process();
QCOMPARE(filter.builtInHeaderPaths, (HeaderPaths{ QCOMPARE(filter.builtInHeaderPaths, (HeaderPaths{
@@ -653,7 +653,7 @@ void HeaderPathFilterTest::testClangHeadersAndCppIncludesPathsOrderLinux()
t.builtIn("/usr/include/x86_64-linux-gnu"), t.builtIn("/usr/include")}; t.builtIn("/usr/include/x86_64-linux-gnu"), t.builtIn("/usr/include")};
std::copy(builtIns.begin(), builtIns.end(), std::copy(builtIns.begin(), builtIns.end(),
std::inserter(t.headerPaths, t.headerPaths.begin())); std::inserter(t.headerPaths, t.headerPaths.begin()));
HeaderPathFilter filter(t.finalize(), UseTweakedHeaderPaths::Yes, "6.0", "clang_dir"); HeaderPathFilter filter(t.finalize(), UseTweakedHeaderPaths::Yes, "clang_dir");
filter.process(); filter.process();
QCOMPARE(filter.builtInHeaderPaths, (HeaderPaths{ QCOMPARE(filter.builtInHeaderPaths, (HeaderPaths{
@@ -675,7 +675,7 @@ void HeaderPathFilterTest::testRemoveGccInternalPaths()
t.builtIn("/usr/lib/gcc/x86_64-linux-gnu/7/include"), t.builtIn("/usr/lib/gcc/x86_64-linux-gnu/7/include"),
t.builtIn("/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed"), t.builtIn("/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed"),
}; };
HeaderPathFilter filter(t.finalize(), UseTweakedHeaderPaths::Yes, "6.0", "clang_dir"); HeaderPathFilter filter(t.finalize(), UseTweakedHeaderPaths::Yes, "clang_dir");
filter.process(); filter.process();
QCOMPARE(filter.builtInHeaderPaths, (HeaderPaths{t.builtIn("clang_dir")})); QCOMPARE(filter.builtInHeaderPaths, (HeaderPaths{t.builtIn("clang_dir")}));
@@ -697,7 +697,7 @@ void HeaderPathFilterTest::testRemoveGccInternalPathsExceptForStandardPaths()
HeaderPaths expected = t.headerPaths; HeaderPaths expected = t.headerPaths;
expected.append(t.builtIn("clang_dir")); expected.append(t.builtIn("clang_dir"));
HeaderPathFilter filter(t.finalize(), UseTweakedHeaderPaths::Yes, "6.0", "clang_dir"); HeaderPathFilter filter(t.finalize(), UseTweakedHeaderPaths::Yes, "clang_dir");
filter.process(); filter.process();
QCOMPARE(filter.builtInHeaderPaths, expected); QCOMPARE(filter.builtInHeaderPaths, expected);
@@ -713,7 +713,7 @@ void HeaderPathFilterTest::testClangHeadersAndCppIncludesPathsOrderNoVersion()
t.builtIn("C:/mingw/i686-w64-mingw32/include/c++/backward"), t.builtIn("C:/mingw/i686-w64-mingw32/include/c++/backward"),
}; };
t.targetTriple = "x86_64-w64-windows-gnu"; t.targetTriple = "x86_64-w64-windows-gnu";
HeaderPathFilter filter(t.finalize(), UseTweakedHeaderPaths::Yes, "6.0", "clang_dir"); HeaderPathFilter filter(t.finalize(), UseTweakedHeaderPaths::Yes, "clang_dir");
filter.process(); filter.process();
QCOMPARE(filter.builtInHeaderPaths, (HeaderPaths{ QCOMPARE(filter.builtInHeaderPaths, (HeaderPaths{
@@ -735,7 +735,7 @@ void HeaderPathFilterTest::testClangHeadersAndCppIncludesPathsOrderAndroidClang(
t.builtIn("C:/Android/sdk/ndk-bundle/sysroot/usr/include") t.builtIn("C:/Android/sdk/ndk-bundle/sysroot/usr/include")
}; };
t.targetTriple = "i686-linux-android"; t.targetTriple = "i686-linux-android";
HeaderPathFilter filter(t.finalize(), UseTweakedHeaderPaths::Yes, "6.0", "clang_dir"); HeaderPathFilter filter(t.finalize(), UseTweakedHeaderPaths::Yes, "clang_dir");
filter.process(); filter.process();
QCOMPARE(filter.builtInHeaderPaths, (HeaderPaths{ QCOMPARE(filter.builtInHeaderPaths, (HeaderPaths{