From 36ecee17fe59da7787d134036629e142515e5321 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 30 Oct 2016 12:03:21 +0200 Subject: [PATCH] MSVC: Register toolchains also for C language Change-Id: I1abaecc53be9e87b88178bc044e3352ddeb5c4e6 Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/msvctoolchain.cpp | 53 +++++++++++-------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 859c9f78681..fab0226c40b 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -573,7 +573,7 @@ MsvcToolChainFactory::MsvcToolChainFactory() QSet MsvcToolChainFactory::supportedLanguages() const { - return { ProjectExplorer::ToolChain::Language::Cxx }; + return { ToolChain::Language::C, ToolChain::Language::Cxx }; } bool MsvcToolChainFactory::checkForVisualStudioInstallation(const QString &vsName) @@ -617,24 +617,32 @@ QString MsvcToolChainFactory::vcVarsBatFor(const QString &basePath, MsvcToolChai return QString(); } -static ToolChain *findOrCreateToolChain(const QList &alreadyKnown, - const QString &name, const Abi &abi, - const QString &varsBat, const QString &varsBatArg, - ToolChain::Detection d = ToolChain::ManualDetection) +static QList findOrCreateToolChain( + const QList &alreadyKnown, + const QString &name, const Abi &abi, + const QString &varsBat, const QString &varsBatArg, + ToolChain::Detection d = ToolChain::ManualDetection) { - ToolChain *tc = Utils::findOrDefault(alreadyKnown, - [&varsBat, &varsBatArg, &abi](ToolChain *tc) -> bool { - if (tc->typeId() != Constants::MSVC_TOOLCHAIN_TYPEID) - return false; - if (tc->targetAbi() != abi) - return false; - auto mtc = static_cast(tc); - return mtc->varsBat() == varsBat - && mtc->varsBatArg() == varsBatArg; - }); - if (!tc) - tc = new MsvcToolChain(name, abi, varsBat, varsBatArg, ToolChain::Language::Cxx, d); - return tc; + QList res; + for (auto language: {ToolChain::Language::C, ToolChain::Language::Cxx}) { + ToolChain *tc = Utils::findOrDefault( + alreadyKnown, + [&varsBat, &varsBatArg, &abi, &language](ToolChain *tc) -> bool { + if (tc->typeId() != Constants::MSVC_TOOLCHAIN_TYPEID) + return false; + if (tc->targetAbi() != abi) + return false; + if (tc->language() != language) + return false; + auto mtc = static_cast(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 @@ -670,10 +678,11 @@ static void detectCppBuildTools(QList *list) const Entry &e = entries[i]; const Abi abi(e.architecture, Abi::WindowsOS, Abi::WindowsMsvc2015Flavor, e.format, e.wordSize); - list->append(new MsvcToolChain(name + QLatin1String(e.postFix), abi, - vcVarsBat, QLatin1String(e.varsBatArg), - ToolChain::Language::Cxx, - ToolChain::AutoDetection)); + for (auto language: {ToolChain::Language::C, ToolChain::Language::Cxx}) { + list->append(new MsvcToolChain(name + QLatin1String(e.postFix), abi, + vcVarsBat, QLatin1String(e.varsBatArg), + language, ToolChain::AutoDetection)); + } } }