From 56b69729940aadf04e16276094b1172af547176c Mon Sep 17 00:00:00 2001 From: Vikas Pachdha Date: Mon, 9 Apr 2018 13:55:12 +0200 Subject: [PATCH] Android: create a new toolchain when missing target triple Though it should not happen that a toolchain is missing the triple but in case the detection fails a new toolchain shall be created and the misbehaving toolchain should be deleted Task-number: QTCREATORBUG-20217 Change-Id: Iaa86331730f82b8e5abd37f1184a53d1e1312979 Reviewed-by: J-P Nurmi Reviewed-by: Ivan Donchevskii --- src/plugins/android/androidtoolchain.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp index a2aa988d47a..9d3b8db27bf 100644 --- a/src/plugins/android/androidtoolchain.cpp +++ b/src/plugins/android/androidtoolchain.cpp @@ -150,7 +150,8 @@ QString AndroidToolChain::typeDisplayName() const bool AndroidToolChain::isValid() const { return GccToolChain::isValid() && targetAbi().isValid() && !m_ndkToolChainVersion.isEmpty() - && compilerCommand().isChildOf(AndroidConfigurations::currentConfig().ndkLocation()); + && compilerCommand().isChildOf(AndroidConfigurations::currentConfig().ndkLocation()) + && !originalTargetTriple().isEmpty(); } void AndroidToolChain::addToEnvironment(Environment &env) const @@ -417,6 +418,9 @@ bool AndroidToolChainFactory::versionCompareLess(const QList &a, const QLis bool AndroidToolChainFactory::versionCompareLess(QList atc, QList btc) { + if (atc.isEmpty() || btc.isEmpty()) + return false; + const QList a = versionNumberFromString(atc.at(0)->ndkToolChainVersion()); const QList b = versionNumberFromString(btc.at(0)->ndkToolChainVersion()); @@ -463,7 +467,7 @@ AndroidToolChainFactory::autodetectToolChainsForNdk(const FileName &ndkPath, FileName compilerPath = AndroidConfigurations::currentConfig().gccPath(abi, lang, version); AndroidToolChain *tc = findToolChain(compilerPath, lang, alreadyKnown); - if (!tc) { + if (!tc || tc->originalTargetTriple().isEmpty()) { tc = new AndroidToolChain(abi, version, lang, ToolChain::AutoDetection); tc->resetToolChain(compilerPath); @@ -473,6 +477,8 @@ AndroidToolChainFactory::autodetectToolChainsForNdk(const FileName &ndkPath, toolChainBundle.append(tc); } + QTC_ASSERT(!toolChainBundle.isEmpty(), continue); + auto it = newestToolChainForArch.constFind(abi); if (it == newestToolChainForArch.constEnd()) newestToolChainForArch.insert(abi, toolChainBundle);