MakeStep: Do not require C++ tool chain

Fall back to C tool chain and then to any other tool chain.

Change-Id: I1683f304a8042cd949f33fcbd4ef18b663e56ea3
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Eike Ziller
2018-05-24 09:37:15 +02:00
parent ae5698fa8e
commit b48742ad40

View File

@@ -112,12 +112,35 @@ QString MakeStep::defaultDisplayName()
return tr("Make");
}
static const QList<ToolChain *> preferredToolChains(const Kit *kit)
{
QList<ToolChain *> tcs = ToolChainKitInformation::toolChains(kit);
// prefer CXX, then C, then others
Utils::sort(tcs, [](ToolChain *tcA, ToolChain *tcB) {
if (tcA->language() == tcB->language())
return false;
if (tcA->language() == Constants::CXX_LANGUAGE_ID)
return true;
if (tcB->language() == Constants::CXX_LANGUAGE_ID)
return false;
if (tcA->language() == Constants::C_LANGUAGE_ID)
return true;
return false;
});
return tcs;
}
QString MakeStep::defaultMakeCommand() const
{
BuildConfiguration *bc = buildConfiguration();
ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit(), ProjectExplorer::Constants::CXX_LANGUAGE_ID);
if (bc && tc)
return tc->makeCommand(environment(bc));
if (!bc)
return QString();
const Utils::Environment env = environment(bc);
for (const ToolChain *tc : preferredToolChains(target()->kit())) {
const QString make = tc->makeCommand(env);
if (!make.isEmpty())
return make;
}
return QString();
}
@@ -141,8 +164,8 @@ Utils::Environment MakeStep::environment(BuildConfiguration *bc) const
Utils::Environment::setupEnglishOutput(&env);
if (makeCommand().isEmpty()) {
// We also prepend "L" to the MAKEFLAGS, so that nmake / jom are less verbose
ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit(),
ProjectExplorer::Constants::CXX_LANGUAGE_ID);
const QList<ToolChain *> tcs = preferredToolChains(target()->kit());
const ToolChain *tc = tcs.isEmpty() ? nullptr : tcs.constFirst();
if (tc && tc->targetAbi().os() == Abi::WindowsOS
&& tc->targetAbi().osFlavor() != Abi::WindowsMSysFlavor) {
const QString makeFlags = "MAKEFLAGS";