From ffa88df344ef9a92631f4e8a5e6a0255874ca298 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Thu, 15 Sep 2011 13:30:54 +0200 Subject: [PATCH] Toolchain: Allow all tool chains Allow all tool chains if either the Qt version is invalid or no Qt modules are not selected. Change-Id: I9842c30aca0a8752915548dc258f257c3fd39e4d Reviewed-on: http://codereview.qt-project.org/4990 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Teske --- .../qt4projectmanager/qt4buildconfiguration.cpp | 10 ++++++++++ .../qt4projectmanager/qt4buildconfiguration.h | 1 + src/plugins/qt4projectmanager/qt4nodes.cpp | 1 + src/plugins/qt4projectmanager/qt4nodes.h | 1 + .../qt4projectmanager/qt4projectconfigwidget.cpp | 3 +++ src/plugins/qt4projectmanager/qt4target.cpp | 15 ++++++++++++++- 6 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index 96dc194795f..f8c3db17a4d 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -188,6 +188,8 @@ void Qt4BuildConfiguration::ctor() this, SLOT(emitBuildDirectoryChanged())); connect(this, SIGNAL(environmentChanged()), this, SLOT(emitProFileEvaluateNeeded())); + connect(qt4Target()->qt4Project(), SIGNAL(proFileUpdated(Qt4ProjectManager::Qt4ProFileNode*,bool,bool)), + this, SLOT(proFileUpdated())); QtSupport::QtVersionManager *vm = QtSupport::QtVersionManager::instance(); connect(vm, SIGNAL(qtVersionsChanged(QList)), @@ -202,6 +204,14 @@ void Qt4BuildConfiguration::emitBuildDirectoryChanged() } } +void Qt4BuildConfiguration::proFileUpdated() +{ + // Changing the included Qt modules from 0 to at least one might have caused the + // tool chain to become invalid. + if (!qt4Target()->possibleToolChains(this).contains(toolChain())) + setToolChain(qt4Target()->preferredToolChain(this)); +} + Qt4BaseTarget *Qt4BuildConfiguration::qt4Target() const { return static_cast(target()); diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index a397831dcd0..d355a43886e 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -146,6 +146,7 @@ signals: private slots: void qtVersionsChanged(const QList &changedVersions); void emitBuildDirectoryChanged(); + void proFileUpdated(); protected: Qt4BuildConfiguration(Qt4BaseTarget *target, Qt4BuildConfiguration *source); diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index a460da524ee..7e63429813e 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -1836,6 +1836,7 @@ void Qt4ProFileNode::applyEvaluate(EvalResult evalResult, bool async) QLatin1String("QML_IMPORT_PATH"), m_projectDir); newVarValues[Makefile] = m_readerExact->values("MAKEFILE"); newVarValues[SymbianCapabilities] = m_readerExact->values("TARGET.CAPABILITY"); + newVarValues[QtVar] = m_readerExact->values(QLatin1String("QT")); m_isDeployable = false; if (m_projectType == ApplicationTemplate) { diff --git a/src/plugins/qt4projectmanager/qt4nodes.h b/src/plugins/qt4projectmanager/qt4nodes.h index 6e528ea1009..ed91b74b0d8 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.h +++ b/src/plugins/qt4projectmanager/qt4nodes.h @@ -87,6 +87,7 @@ enum Qt4Variable { PrecompiledHeaderVar, LibDirectoriesVar, ConfigVar, + QtVar, QmlImportPathVar, Makefile, SymbianCapabilities diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index a7e73a35a74..979b14f6f92 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -122,6 +122,9 @@ Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4BaseTarget *target) connect(target->qt4Project(), SIGNAL(buildDirectoryInitialized()), this, SLOT(updateImportLabel())); + connect(target->qt4Project(), SIGNAL(proFileUpdated(Qt4ProjectManager::Qt4ProFileNode*,bool,bool)), + this, SLOT(updateToolChainCombo())); + connect(ProjectExplorer::ToolChainManager::instance(), SIGNAL(toolChainsChanged()), this, SLOT(updateToolChainCombo())); } diff --git a/src/plugins/qt4projectmanager/qt4target.cpp b/src/plugins/qt4projectmanager/qt4target.cpp index bbeadfa9be8..b5e7922c128 100644 --- a/src/plugins/qt4projectmanager/qt4target.cpp +++ b/src/plugins/qt4projectmanager/qt4target.cpp @@ -37,6 +37,7 @@ #include "qmakestep.h" #include "qt4project.h" #include "qt4basetargetfactory.h" +#include "qt4nodes.h" #include "qt4projectconfigwidget.h" #include "qt4projectmanagerconstants.h" #include "qt4buildconfiguration.h" @@ -263,9 +264,21 @@ QList Qt4BaseTarget::possibleToolChains(ProjectExp QList result; Qt4BuildConfiguration *qt4bc = qobject_cast(bc); - if (!qt4bc || !qt4bc->qtVersion() || !qt4bc->qtVersion()->isValid()) + if (!qt4bc || !qt4bc->qtVersion()) return tmp; + QList profiles = qt4Project()->allProFiles(); + bool qtUsed = false; + foreach (Qt4ProFileNode *pro, profiles) { + if (!pro->variableValue(QtVar).isEmpty()) { + qtUsed = true; + break; + } + } + + if (!qtUsed || !qt4bc->qtVersion()->isValid()) + return ProjectExplorer::ToolChainManager::instance()->toolChains(); + QList abiList = qt4bc->qtVersion()->qtAbis(); foreach (const ProjectExplorer::Abi &abi, abiList) tmp.append(ProjectExplorer::ToolChainManager::instance()->findToolChains(abi));