MSVC: Re-detect compilers if detected ABI changes

Old creator versions detected MSVC 2015 with the 2005 ABIs. Upgrading
from those to a current version of Creator will keep this detected ABI,
effectively breaking MSVC 2015 for users upgrading from settings where
it was mis-detected.

Force re-creation of MSVC toolchains if the saved toolchain ABI and
the currently detected ABI differ. This will break kits (as the MSVC
toolchain's ID will change), but it will make sure a usable MSVC 2015
toolchain is available.

Change-Id: If7d9ab0d414bb33781243bcdf5112b411ecf5c13
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Tobias Hunger
2016-07-06 16:11:16 +02:00
parent 26799926cb
commit ca52ed159e

View File

@@ -622,9 +622,11 @@ static ToolChain *findOrCreateToolChain(const QList<ToolChain *> &alreadyKnown,
ToolChain::Detection d = ToolChain::ManualDetection) ToolChain::Detection d = ToolChain::ManualDetection)
{ {
ToolChain *tc = Utils::findOrDefault(alreadyKnown, ToolChain *tc = Utils::findOrDefault(alreadyKnown,
[&varsBat, &varsBatArg](ToolChain *tc) -> bool { [&varsBat, &varsBatArg, &abi](ToolChain *tc) -> bool {
if (tc->typeId() != Constants::MSVC_TOOLCHAIN_TYPEID) if (tc->typeId() != Constants::MSVC_TOOLCHAIN_TYPEID)
return false; return false;
if (tc->targetAbi() != abi)
return false;
auto mtc = static_cast<MsvcToolChain *>(tc); auto mtc = static_cast<MsvcToolChain *>(tc);
return mtc->varsBat() == varsBat return mtc->varsBat() == varsBat
&& mtc->varsBatArg() == varsBatArg; && mtc->varsBatArg() == varsBatArg;