ToolChainManager: Allow for filtering of toolchains

Allow to provide a Predicate to ToolChainManager::toolChains and
add a ToolChainManager::toolChain method.

Change-Id: I0849f6fa67ffd8d5c6cfe4253cb0a326e1b023fa
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2017-01-11 16:12:32 +01:00
parent 6553c3c99e
commit a89100fe47
11 changed files with 60 additions and 69 deletions

View File

@@ -33,6 +33,8 @@
#include <qtsupport/qtkitinformation.h>
#include <utils/algorithm.h>
using namespace ProjectExplorer;
using namespace Utils;
@@ -83,15 +85,14 @@ void QmakeKitInformation::setup(Kit *k)
ToolChain *tc = ToolChainKitInformation::toolChain(k, ToolChain::Language::Cxx);
if (!tc || (!tc->suggestedMkspecList().empty() && !tc->suggestedMkspecList().contains(spec))) {
ToolChain *possibleTc = nullptr;
foreach (ToolChain *current, ToolChainManager::toolChains()) {
if (current->language() == ToolChain::Language::Cxx
&& version->qtAbis().contains(current->targetAbi())) {
possibleTc = current;
if (current->suggestedMkspecList().contains(spec))
break;
}
}
const QList<ToolChain *> possibleTcs = ToolChainManager::toolChains([version, &spec](const ToolChain *t) {
return t->isValid()
&& t->language() == ToolChain::Language::Cxx
&& version->qtAbis().contains(t->targetAbi());
});
ToolChain *possibleTc
= Utils::findOr(possibleTcs, possibleTcs.last(),
[&spec](const ToolChain *t) { return t->suggestedMkspecList().contains(spec); });
if (possibleTc)
ToolChainKitInformation::setToolChain(k, possibleTc);
}