MSVC: Register toolchains also for C language

Change-Id: I1abaecc53be9e87b88178bc044e3352ddeb5c4e6
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Orgad Shaneh
2016-10-30 12:03:21 +02:00
committed by Orgad Shaneh
parent a9c967263e
commit 36ecee17fe

View File

@@ -573,7 +573,7 @@ MsvcToolChainFactory::MsvcToolChainFactory()
QSet<ToolChain::Language> MsvcToolChainFactory::supportedLanguages() const QSet<ToolChain::Language> MsvcToolChainFactory::supportedLanguages() const
{ {
return { ProjectExplorer::ToolChain::Language::Cxx }; return { ToolChain::Language::C, ToolChain::Language::Cxx };
} }
bool MsvcToolChainFactory::checkForVisualStudioInstallation(const QString &vsName) bool MsvcToolChainFactory::checkForVisualStudioInstallation(const QString &vsName)
@@ -617,24 +617,32 @@ QString MsvcToolChainFactory::vcVarsBatFor(const QString &basePath, MsvcToolChai
return QString(); return QString();
} }
static ToolChain *findOrCreateToolChain(const QList<ToolChain *> &alreadyKnown, static QList<ToolChain *> findOrCreateToolChain(
const QString &name, const Abi &abi, const QList<ToolChain *> &alreadyKnown,
const QString &varsBat, const QString &varsBatArg, const QString &name, const Abi &abi,
ToolChain::Detection d = ToolChain::ManualDetection) const QString &varsBat, const QString &varsBatArg,
ToolChain::Detection d = ToolChain::ManualDetection)
{ {
ToolChain *tc = Utils::findOrDefault(alreadyKnown, QList<ToolChain *> res;
[&varsBat, &varsBatArg, &abi](ToolChain *tc) -> bool { for (auto language: {ToolChain::Language::C, ToolChain::Language::Cxx}) {
if (tc->typeId() != Constants::MSVC_TOOLCHAIN_TYPEID) ToolChain *tc = Utils::findOrDefault(
return false; alreadyKnown,
if (tc->targetAbi() != abi) [&varsBat, &varsBatArg, &abi, &language](ToolChain *tc) -> bool {
return false; if (tc->typeId() != Constants::MSVC_TOOLCHAIN_TYPEID)
auto mtc = static_cast<MsvcToolChain *>(tc); return false;
return mtc->varsBat() == varsBat if (tc->targetAbi() != abi)
&& mtc->varsBatArg() == varsBatArg; return false;
}); if (tc->language() != language)
if (!tc) return false;
tc = new MsvcToolChain(name, abi, varsBat, varsBatArg, ToolChain::Language::Cxx, d); auto mtc = static_cast<MsvcToolChain *>(tc);
return tc; return mtc->varsBat() == varsBat
&& mtc->varsBatArg() == varsBatArg;
});
if (!tc)
tc = new MsvcToolChain(name, abi, varsBat, varsBatArg, language, d);
res << tc;
}
return res;
} }
// Detect build tools introduced with MSVC2015 // Detect build tools introduced with MSVC2015
@@ -670,10 +678,11 @@ static void detectCppBuildTools(QList<ToolChain *> *list)
const Entry &e = entries[i]; const Entry &e = entries[i];
const Abi abi(e.architecture, Abi::WindowsOS, Abi::WindowsMsvc2015Flavor, const Abi abi(e.architecture, Abi::WindowsOS, Abi::WindowsMsvc2015Flavor,
e.format, e.wordSize); e.format, e.wordSize);
list->append(new MsvcToolChain(name + QLatin1String(e.postFix), abi, for (auto language: {ToolChain::Language::C, ToolChain::Language::Cxx}) {
vcVarsBat, QLatin1String(e.varsBatArg), list->append(new MsvcToolChain(name + QLatin1String(e.postFix), abi,
ToolChain::Language::Cxx, vcVarsBat, QLatin1String(e.varsBatArg),
ToolChain::AutoDetection)); language, ToolChain::AutoDetection));
}
} }
} }