From 94a952815600d500bda42644491fa18b1ba8afbd Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Tue, 25 Feb 2020 12:31:25 +0200 Subject: [PATCH] Android: deduce the NDK path of saved toolchains from compilerCommand() The change 290840, made AndroidToolchain tied to an NDK location, but when restoring a toolchain the NDK wasn't being assigned. This deduces the NDK location from the toolchain compilerCommand(). Change-Id: I3cd936ac48570fadbec15ac1e13496706718c0ea Reviewed-by: Alessandro Portale --- src/plugins/android/androidtoolchain.cpp | 14 +++++++++++--- src/plugins/android/androidtoolchain.h | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp index 42ea48ee97c..4f879d92491 100644 --- a/src/plugins/android/androidtoolchain.cpp +++ b/src/plugins/android/androidtoolchain.cpp @@ -93,14 +93,22 @@ AndroidToolChain::~AndroidToolChain() = default; bool AndroidToolChain::isValid() const { + if (m_ndkLocation.isEmpty()) { + QStringList ndkParts(compilerCommand().toString().split("toolchains/llvm/prebuilt/")); + if (ndkParts.size() > 1) { + QString ndkLocation(ndkParts.first()); + if (ndkLocation.endsWith('/')) + ndkLocation.chop(1); + m_ndkLocation = FilePath::fromString(ndkLocation); + } + } + const bool isChildofNdk = compilerCommand().isChildOf(m_ndkLocation); - // If we're restoring a toolchain we set NDK path ourselves so it's enough to check against SDK const bool isChildofSdk = compilerCommand().isChildOf( AndroidConfigurations::currentConfig().sdkLocation()); return ClangToolChain::isValid() && typeId() == Constants::ANDROID_TOOLCHAIN_TYPEID - && targetAbi().isValid() - && (isChildofNdk || isChildofSdk) + && targetAbi().isValid() && (isChildofNdk || isChildofSdk) && !originalTargetTriple().isEmpty(); } diff --git a/src/plugins/android/androidtoolchain.h b/src/plugins/android/androidtoolchain.h index 26c55f20a13..14ef9231be1 100644 --- a/src/plugins/android/androidtoolchain.h +++ b/src/plugins/android/androidtoolchain.h @@ -57,7 +57,7 @@ private: friend class AndroidToolChainFactory; - Utils::FilePath m_ndkLocation; + mutable Utils::FilePath m_ndkLocation; }; class AndroidToolChainFactory : public ProjectExplorer::ToolChainFactory