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)
{
QTC_ASSERT(ToolChainManager::isLoaded(), return);
const QByteArray id = k->value(ToolChainKitInformation::id()).toByteArray();
if (id.isEmpty())
return;
const QVariantMap value = readValue(k);
const QList<ToolChain *> knownTcs = ToolChainManager::toolChains();
ToolChain *tc = ToolChainManager::findToolChain(id);
if (tc)
return;
for (auto i = value.constBegin(); i != value.constEnd(); ++i) {
ToolChain::Language l
= 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...
foreach (ToolChain *current, ToolChainManager::toolChains()) {
if (current->targetAbi().toString() == QString::fromUtf8(id))
return setToolChain(k, current);
const QByteArray id = i.value().toByteArray();
ToolChain *tc = ToolChainManager::findToolChain(id);
if (tc)
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);
}
}