ToolChainKitInformation: Fix abi-based toolchain selection

This broke when multiple toolchain support was added to kits.

Change-Id: Ibdd4942a4fe314a5dee727a41a834676b894525d
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2016-07-15 13:15:27 +02:00
parent f372f4aa5a
commit 157c0a3771

View File

@@ -184,18 +184,29 @@ void ToolChainKitInformation::fix(Kit *k)
void ToolChainKitInformation::setup(Kit *k) void ToolChainKitInformation::setup(Kit *k)
{ {
QTC_ASSERT(ToolChainManager::isLoaded(), return); QTC_ASSERT(ToolChainManager::isLoaded(), return);
const QByteArray id = k->value(ToolChainKitInformation::id()).toByteArray(); const QVariantMap value = readValue(k);
if (id.isEmpty()) const QList<ToolChain *> knownTcs = ToolChainManager::toolChains();
return;
ToolChain *tc = ToolChainManager::findToolChain(id); for (auto i = value.constBegin(); i != value.constEnd(); ++i) {
if (tc) ToolChain::Language l
return; = Utils::findOr(ToolChain::allLanguages(), ToolChain::Language::None,
[i](ToolChain::Language l) {
return ToolChain::languageId(l) == i.key();
});
if (l == ToolChain::Language::None)
continue;
// ID is not found: Might be an ABI string... const QByteArray id = i.value().toByteArray();
foreach (ToolChain *current, ToolChainManager::toolChains()) { ToolChain *tc = ToolChainManager::findToolChain(id);
if (current->targetAbi().toString() == QString::fromUtf8(id)) if (tc)
return setToolChain(k, current); continue;
// ID is not found: Might be an ABI string...
const QString abi = QString::fromUtf8(id);
tc = Utils::findOrDefault(knownTcs, [abi, l](ToolChain *t) {
return t->targetAbi().toString() == abi && t->language() == l;
});
setToolChain(k, l, tc);
} }
} }