Clang: Forward compiler options for gcc/clang

Rely on clang to do the "right thing" with them.

Change-Id: I44adf2cd5c61549896da3fc9b7c35c2fb0142060
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
Nikolai Kosjar
2019-01-08 16:22:39 +01:00
parent d52af48883
commit 4c0c3f5a64
9 changed files with 206 additions and 50 deletions

View File

@@ -85,6 +85,72 @@ TEST_F(CompilerOptionsBuilder, AddToolchainAndProjectMacros)
ASSERT_THAT(compilerOptionsBuilder.options(), ElementsAre("-Dfoo=bar", "-DprojectFoo=projectBar"));
}
TEST_F(CompilerOptionsBuilder, CompilerFlagsFiltering_UnknownOptionsAreForwarded)
{
ProjectPart part = projectPart;
part.compilerFlags = QStringList{"-fancyFlag"};
CppTools::CompilerOptionsBuilder compilerOptionsBuilder{part,
CppTools::UseSystemHeader::No,
CppTools::UseToolchainMacros::Yes,
CppTools::UseTweakedHeaderPaths::Yes,
CppTools::UseLanguageDefines::Yes};
compilerOptionsBuilder.build(ProjectFile::CXXSource, CppTools::UsePrecompiledHeaders::No);
ASSERT_THAT(compilerOptionsBuilder.options(), Contains(part.compilerFlags.first()));
}
TEST_F(CompilerOptionsBuilder, CompilerFlagsFiltering_DiagnosticOptionsAreRemoved)
{
ProjectPart part = projectPart;
part.compilerFlags = QStringList{"-Wbla", "-pedantic"};
CppTools::CompilerOptionsBuilder compilerOptionsBuilder{part,
CppTools::UseSystemHeader::No,
CppTools::UseToolchainMacros::Yes,
CppTools::UseTweakedHeaderPaths::Yes,
CppTools::UseLanguageDefines::Yes};
compilerOptionsBuilder.build(ProjectFile::CXXSource, CppTools::UsePrecompiledHeaders::No);
ASSERT_THAT(compilerOptionsBuilder.options(), Not(Contains(part.compilerFlags[0])));
ASSERT_THAT(compilerOptionsBuilder.options(), Not(Contains(part.compilerFlags[1])));
}
TEST_F(CompilerOptionsBuilder, CompilerFlagsFiltering_CLanguageVersionIsRewritten)
{
ProjectPart part = projectPart;
part.compilerFlags = QStringList{"-std=c18"};
// We need to set the language version here to overcome a QTC_ASSERT checking
// consistency between ProjectFile::Kind and ProjectPart::LanguageVersion
part.languageVersion = Utils::LanguageVersion::C18;
CppTools::CompilerOptionsBuilder compilerOptionsBuilder{part,
CppTools::UseSystemHeader::No,
CppTools::UseToolchainMacros::Yes,
CppTools::UseTweakedHeaderPaths::Yes,
CppTools::UseLanguageDefines::Yes};
compilerOptionsBuilder.build(ProjectFile::CSource, CppTools::UsePrecompiledHeaders::No);
ASSERT_THAT(compilerOptionsBuilder.options(), Not(Contains(part.compilerFlags.first())));
ASSERT_THAT(compilerOptionsBuilder.options(), Contains("-std=c17"));
}
TEST_F(CompilerOptionsBuilder, CompilerFlagsFiltering_LanguageVersionIsExplicitlySetIfNotProvided)
{
CppTools::CompilerOptionsBuilder compilerOptionsBuilder{projectPart,
CppTools::UseSystemHeader::No,
CppTools::UseToolchainMacros::Yes,
CppTools::UseTweakedHeaderPaths::Yes,
CppTools::UseLanguageDefines::Yes};
compilerOptionsBuilder.build(ProjectFile::CXXSource, CppTools::UsePrecompiledHeaders::No);
ASSERT_THAT(compilerOptionsBuilder.options(), Contains("-std=c++17"));
}
TEST_F(CompilerOptionsBuilder, AddToolchainAndProjectMacrosWithoutSkipingLanguageDefines)
{
CppTools::CompilerOptionsBuilder compilerOptionsBuilder{projectPart,
@@ -441,7 +507,7 @@ TEST_F(CompilerOptionsBuilder, BuildAllOptions)
ASSERT_THAT(compilerOptionsBuilder.options(),
ElementsAre(
"-nostdlibinc", "-c", "-m64", "-target", "x86_64-apple-darwin10",
"-arch", "x86_64", "-x", "c++", "-std=c++17", "-Dfoo=bar",
"-x", "c++", "-std=c++17", "-arch", "x86_64", "-Dfoo=bar",
"-DprojectFoo=projectBar", "-undef",
"-I", IsPartOfHeader("wrappedQtHeaders"),
"-I", IsPartOfHeader(QDir::toNativeSeparators("wrappedQtHeaders/QtCore").toStdString()),