From 6c8d6c97e5b40557139c4ad2594e302e0e522fed Mon Sep 17 00:00:00 2001 From: James McDonnell Date: Mon, 5 Dec 2016 14:35:57 -0500 Subject: [PATCH] Prevent QNX tool chain demotion Change-Id: Ia355cf80131e36e806781665c4926769a1b144f8 Reviewed-by: Tobias Hunger --- src/plugins/qnx/qnxconfiguration.cpp | 23 +++++++++++++++++++++++ src/plugins/qnx/qnxconfiguration.h | 12 +++++++++++- src/plugins/qnx/qnxtoolchain.cpp | 13 +++++++++++++ src/plugins/qnx/qnxtoolchain.h | 4 ++++ 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/plugins/qnx/qnxconfiguration.cpp b/src/plugins/qnx/qnxconfiguration.cpp index ebe4c38d4b5..aee33dd7ef0 100644 --- a/src/plugins/qnx/qnxconfiguration.cpp +++ b/src/plugins/qnx/qnxconfiguration.cpp @@ -48,6 +48,7 @@ #include #include +#include #include #include @@ -277,6 +278,16 @@ QnxQtVersion* QnxConfiguration::qnxQtVersion(QnxArchitecture arch) const return 0; } +QList QnxConfiguration::autoDetect(const QList &alreadyKnown) +{ + QList result; + + result += findToolChain(alreadyKnown, ArmLeV7); + result += findToolChain(alreadyKnown, X86); + + return result; +} + QVariant QnxConfiguration::createDebuggerItem(QnxArchitecture arch, const QString &displayName) { FileName command = (arch == X86) ? x86DebuggerPath() : armDebuggerPath(); @@ -304,6 +315,18 @@ QnxToolChain *QnxConfiguration::createToolChain(QnxArchitecture arch, const QStr return toolChain; } +QList QnxConfiguration::findToolChain(const QList &alreadyKnown, + QnxArchitecture arch) +{ + Abi abi((arch == Qnx::ArmLeV7) ? Abi::ArmArchitecture : Abi::X86Architecture, + Abi::LinuxOS, Abi::GenericLinuxFlavor, Abi::ElfFormat, 32); + return Utils::filtered(alreadyKnown, [this, abi](ToolChain *tc) { + return tc->typeId() == Constants::QNX_TOOLCHAIN_ID + && tc->targetAbi() == abi + && tc->compilerCommand() == m_qccCompiler; + }); +} + Kit *QnxConfiguration::createKit(QnxArchitecture arch, QnxToolChain *toolChain, const QVariant &debuggerItemId, diff --git a/src/plugins/qnx/qnxconfiguration.h b/src/plugins/qnx/qnxconfiguration.h index 5212560394b..0001fdc615e 100644 --- a/src/plugins/qnx/qnxconfiguration.h +++ b/src/plugins/qnx/qnxconfiguration.h @@ -38,7 +38,11 @@ #include -namespace ProjectExplorer { class Kit; } +namespace ProjectExplorer +{ + class Kit; + class ToolChain; +} namespace Qnx { namespace Internal { @@ -73,12 +77,18 @@ public: Utils::FileName sdpPath() const; QnxQtVersion* qnxQtVersion(QnxArchitecture arch) const; + QList autoDetect( + const QList &alreadyKnown); + private: QVariant createDebuggerItem(Qnx::QnxArchitecture arch, const QString &displayName); QnxToolChain* createToolChain(Qnx::QnxArchitecture arch, const QString &displayName, const QString &ndkPath); + QList findToolChain( + const QList &alreadyKnown, + Qnx::QnxArchitecture arch); ProjectExplorer::Kit *createKit(QnxArchitecture arch, QnxToolChain *toolChain, diff --git a/src/plugins/qnx/qnxtoolchain.cpp b/src/plugins/qnx/qnxtoolchain.cpp index 4fcf377f71e..541f2d328ec 100644 --- a/src/plugins/qnx/qnxtoolchain.cpp +++ b/src/plugins/qnx/qnxtoolchain.cpp @@ -24,6 +24,8 @@ ****************************************************************************/ #include "qnxtoolchain.h" +#include "qnxconfiguration.h" +#include "qnxconfigurationmanager.h" #include "qnxconstants.h" #include "qnxutils.h" @@ -160,6 +162,17 @@ QnxToolChainFactory::QnxToolChainFactory() setDisplayName(tr("QCC")); } +QList QnxToolChainFactory::autoDetect( + const QList &alreadyKnown) +{ + QList tcs; + QList configurations = + QnxConfigurationManager::instance()->configurations(); + foreach (QnxConfiguration *configuration, configurations) + tcs += configuration->autoDetect(alreadyKnown); + return tcs; +} + QSet QnxToolChainFactory::supportedLanguages() const { return { ProjectExplorer::ToolChain::Language::Cxx }; diff --git a/src/plugins/qnx/qnxtoolchain.h b/src/plugins/qnx/qnxtoolchain.h index dfde82df437..9eabe27a60d 100644 --- a/src/plugins/qnx/qnxtoolchain.h +++ b/src/plugins/qnx/qnxtoolchain.h @@ -69,6 +69,10 @@ class QnxToolChainFactory : public ProjectExplorer::ToolChainFactory public: QnxToolChainFactory(); + + QList autoDetect( + const QList &alreadyKnown) override; + QSet supportedLanguages() const override; bool canRestore(const QVariantMap &data) override;