From 52b47364de371f2797c597c747c1bc10ad371c1d Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 19 Dec 2011 12:06:44 +0100 Subject: [PATCH] Use QUuids to identify tool chains Save/Restore has been updated to reflect this: We now save manual as well as auto-detected tool chains into the user toolChains.xml file. When loading we load the SDK as well as the user toolChains.xml files. We then do a autodetection run. All the tool chains restored that are marked up as auto-detected are then checked again: * the tool chain was autodetected again: Throw away the newly auto- detected tool chain and reuse the saved one. This makes sure we keep the QUuid that is now part of the tool chains id. * the tool chain was not autodetected again: Throw away the saved tool chain. * the tool chain was newly autodetected: Add the new tool chain We keep the old id around in the legacyId() method. It is used when loading old .user files only. So there is no need to implement this method for new tool chains. Task-number: QTCREATORBUG-6702 Change-Id: Ifc0a216e5351a8a57db03615ba329e355e7d5f59 Reviewed-by: Daniel Teske --- src/plugins/madde/maemotoolchain.cpp | 42 ++++++---- src/plugins/madde/maemotoolchain.h | 9 ++- .../projectexplorer/abstractmsvctoolchain.cpp | 1 - .../projectexplorer/abstractmsvctoolchain.h | 1 - .../projectexplorer/buildconfiguration.cpp | 10 ++- src/plugins/projectexplorer/gcctoolchain.cpp | 13 ++- src/plugins/projectexplorer/gcctoolchain.h | 4 +- src/plugins/projectexplorer/msvctoolchain.cpp | 6 +- src/plugins/projectexplorer/msvctoolchain.h | 2 +- src/plugins/projectexplorer/toolchain.cpp | 44 ++++++----- src/plugins/projectexplorer/toolchain.h | 4 +- .../projectexplorer/toolchainmanager.cpp | 79 ++++++++++++++----- .../projectexplorer/toolchainmanager.h | 2 +- .../projectexplorer/wincetoolchain.cpp | 6 +- src/plugins/projectexplorer/wincetoolchain.h | 3 +- .../qt-s60/rvcttoolchain.cpp | 21 +---- .../qt4projectmanager/qt-s60/rvcttoolchain.h | 3 +- .../qt-s60/winscwtoolchain.cpp | 12 +-- .../qt-s60/winscwtoolchain.h | 3 +- .../qt4buildconfiguration.cpp | 4 +- 20 files changed, 156 insertions(+), 113 deletions(-) diff --git a/src/plugins/madde/maemotoolchain.cpp b/src/plugins/madde/maemotoolchain.cpp index 549a54e0622..52558fd08aa 100644 --- a/src/plugins/madde/maemotoolchain.cpp +++ b/src/plugins/madde/maemotoolchain.cpp @@ -61,9 +61,7 @@ static const char *const MAEMO_QT_VERSION_KEY = "Qt4ProjectManager.Maemo.QtVersi MaemoToolChain::MaemoToolChain(bool autodetected) : ProjectExplorer::GccToolChain(QLatin1String(Constants::MAEMO_TOOLCHAIN_ID), autodetected), m_qtVersionId(-1) -{ - updateId(); -} +{ } MaemoToolChain::MaemoToolChain(const MaemoToolChain &tc) : ProjectExplorer::GccToolChain(tc), @@ -78,11 +76,6 @@ QString MaemoToolChain::typeName() const return MaemoToolChainFactory::tr("Maemo GCC"); } -ProjectExplorer::Abi MaemoToolChain::targetAbi() const -{ - return m_targetAbi; -} - Utils::FileName MaemoToolChain::mkspec() const { return Utils::FileName(); // always use default @@ -90,7 +83,7 @@ Utils::FileName MaemoToolChain::mkspec() const bool MaemoToolChain::isValid() const { - return GccToolChain::isValid() && m_qtVersionId >= 0 && m_targetAbi.isValid(); + return GccToolChain::isValid() && m_qtVersionId >= 0 && targetAbi().isValid(); } bool MaemoToolChain::canClone() const @@ -144,9 +137,9 @@ bool MaemoToolChain::fromMap(const QVariantMap &data) void MaemoToolChain::setQtVersionId(int id) { if (id < 0) { - m_targetAbi = ProjectExplorer::Abi(); + setTargetAbi(ProjectExplorer::Abi()); m_qtVersionId = -1; - updateId(); // Will trigger toolChainUpdated()! + toolChainUpdated(); return; } @@ -157,9 +150,10 @@ void MaemoToolChain::setQtVersionId(int id) Q_ASSERT(version->qtAbis().count() == 1); m_qtVersionId = id; - m_targetAbi = version->qtAbis().at(0); + setTargetAbi(version->qtAbis().at(0)); + + toolChainUpdated(); - updateId(); // Will trigger toolChainUpdated()! setDisplayName(MaemoToolChainFactory::tr("Maemo GCC for %1").arg(version->displayName())); } @@ -168,10 +162,11 @@ int MaemoToolChain::qtVersionId() const return m_qtVersionId; } -void MaemoToolChain::updateId() +QString MaemoToolChain::legacyId() const { - setId(QString::fromLatin1("%1:%2.%3").arg(Constants::MAEMO_TOOLCHAIN_ID) - .arg(m_qtVersionId).arg(debuggerCommand().toString())); + return QString::fromLatin1("%1:%2.%3").arg(Constants::MAEMO_TOOLCHAIN_ID) + .arg(m_qtVersionId) + .arg(debuggerCommand().toString()); } // -------------------------------------------------------------------------- @@ -241,6 +236,21 @@ QList MaemoToolChainFactory::autoDetect() return createToolChainList(versionList); } +bool MaemoToolChainFactory::canRestore(const QVariantMap &data) +{ + return idFromMap(data).startsWith(QLatin1String(Constants::MAEMO_TOOLCHAIN_ID) + QLatin1Char(':')); +} + +ProjectExplorer::ToolChain *MaemoToolChainFactory::restore(const QVariantMap &data) +{ + MaemoToolChain *tc = new MaemoToolChain(false); + if (tc->fromMap(data)) + return tc; + + delete tc; + return 0; +} + void MaemoToolChainFactory::handleQtVersionChanges(const QList &changes) { ProjectExplorer::ToolChainManager *tcm = ProjectExplorer::ToolChainManager::instance(); diff --git a/src/plugins/madde/maemotoolchain.h b/src/plugins/madde/maemotoolchain.h index 86bad1f4a44..2fab199e279 100644 --- a/src/plugins/madde/maemotoolchain.h +++ b/src/plugins/madde/maemotoolchain.h @@ -49,7 +49,6 @@ public: ~MaemoToolChain(); QString typeName() const; - ProjectExplorer::Abi targetAbi() const; Utils::FileName mkspec() const; bool isValid() const; @@ -67,15 +66,14 @@ public: void setQtVersionId(int); int qtVersionId() const; -private: - void updateId(); + QString legacyId() const; +private: explicit MaemoToolChain(bool); MaemoToolChain(const MaemoToolChain &); int m_qtVersionId; mutable QString m_sysroot; - ProjectExplorer::Abi m_targetAbi; friend class MaemoToolChainFactory; }; @@ -112,6 +110,9 @@ public: QList autoDetect(); + bool canRestore(const QVariantMap &data); + ProjectExplorer::ToolChain *restore(const QVariantMap &data); + private slots: void handleQtVersionChanges(const QList &); QList createToolChainList(const QList &); diff --git a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp index ddf7725d930..988c61d97cd 100644 --- a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp +++ b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp @@ -132,7 +132,6 @@ void AbstractMsvcToolChain::setDebuggerCommand(const Utils::FileName &d) if (m_debuggerCommand == d) return; m_debuggerCommand = d; - updateId(); toolChainUpdated(); } diff --git a/src/plugins/projectexplorer/abstractmsvctoolchain.h b/src/plugins/projectexplorer/abstractmsvctoolchain.h index c04db96dfa4..b57b1641ce0 100644 --- a/src/plugins/projectexplorer/abstractmsvctoolchain.h +++ b/src/plugins/projectexplorer/abstractmsvctoolchain.h @@ -68,7 +68,6 @@ public: protected: virtual Utils::Environment readEnvironmentSetting(Utils::Environment& env) const = 0; virtual QByteArray msvcPredefinedMacros(const Utils::Environment& env) const; - virtual void updateId() = 0; bool generateEnvironmentSettings(Utils::Environment &env, const QString& batchFile, diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index ea4b561fce9..197a294bdd4 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -43,6 +43,7 @@ #include +#include #include #include @@ -194,12 +195,13 @@ bool BuildConfiguration::fromMap(const QVariantMap &map) m_stepLists.append(list); } - QString id = map.value(QLatin1String(TOOLCHAIN_KEY)).toString(); - m_toolChain = ToolChainManager::instance()->findToolChain(id); + const QString id = map.value(QLatin1String(TOOLCHAIN_KEY)).toString(); + setToolChain(ToolChainManager::instance()->findToolChain(id)); // Do not validate the tool chain as + // the BC is not completely set up yet! // TODO: We currently assume there to be at least a clean and build list! - Q_ASSERT(knownStepLists().contains(QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_BUILD))); - Q_ASSERT(knownStepLists().contains(QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_CLEAN))); + QTC_CHECK(knownStepLists().contains(QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_BUILD))); + QTC_CHECK(knownStepLists().contains(QLatin1String(ProjectExplorer::Constants::BUILDSTEPS_CLEAN))); return ProjectConfiguration::fromMap(map); } diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index 87cf476ea5d..6b46538495a 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -308,13 +308,13 @@ QString GccToolChain::defaultDisplayName() const ProjectExplorer::Abi::toString(m_targetAbi.wordWidth())); } -void GccToolChain::updateId() +QString GccToolChain::legacyId() const { QString i = id(); i = i.left(i.indexOf(QLatin1Char(':'))); - setId(QString::fromLatin1("%1:%2.%3.%4") - .arg(i).arg(m_compilerPath) - .arg(m_targetAbi.toString()).arg(m_debuggerCommand.toString())); + return QString::fromLatin1("%1:%2.%3.%4") + .arg(i).arg(m_compilerPath) + .arg(m_targetAbi.toString()).arg(m_debuggerCommand.toString()); } QString GccToolChain::typeName() const @@ -341,7 +341,6 @@ void GccToolChain::setTargetAbi(const Abi &abi) updateSupportedAbis(); m_targetAbi = abi; - updateId(); toolChainUpdated(); } @@ -389,7 +388,6 @@ void GccToolChain::setDebuggerCommand(const Utils::FileName &d) if (m_debuggerCommand == d) return; m_debuggerCommand = d; - updateId(); toolChainUpdated(); } @@ -469,7 +467,7 @@ void GccToolChain::setCompilerPath(const QString &path) if (resetDisplayName) setDisplayName(defaultDisplayName()); } - updateId(); // Will trigger toolChainUpdated()! + toolChainUpdated(); } QString GccToolChain::compilerPath() const @@ -511,7 +509,6 @@ bool GccToolChain::fromMap(const QVariantMap &data) m_supportedAbis.append(abi); } m_debuggerCommand = Utils::FileName::fromString(data.value(QLatin1String(debuggerCommandKeyC)).toString()); - updateId(); return true; } diff --git a/src/plugins/projectexplorer/gcctoolchain.h b/src/plugins/projectexplorer/gcctoolchain.h index b39c71f23dc..7e11bed0eaf 100644 --- a/src/plugins/projectexplorer/gcctoolchain.h +++ b/src/plugins/projectexplorer/gcctoolchain.h @@ -54,6 +54,8 @@ class LinuxIccToolChainFactory; class PROJECTEXPLORER_EXPORT GccToolChain : public ToolChain { public: + QString legacyId() const; + QString typeName() const; Abi targetAbi() const; QString version() const; @@ -89,8 +91,6 @@ protected: QString defaultDisplayName() const; - void updateId(); - virtual QList detectSupportedAbis() const; virtual QString detectVersion() const; diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 8abbf8df1d7..543aaec3ef8 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -288,7 +288,6 @@ MsvcToolChain::MsvcToolChain(const QString &name, const Abi &abi, { Q_ASSERT(!name.isEmpty()); - updateId(); setDisplayName(name); } @@ -306,7 +305,7 @@ MsvcToolChain *MsvcToolChain::readFromMap(const QVariantMap &data) return 0; } -void MsvcToolChain::updateId() +QString MsvcToolChain::legacyId() const { const QChar colon = QLatin1Char(':'); QString id = QLatin1String(Constants::MSVC_TOOLCHAIN_ID); @@ -316,7 +315,7 @@ void MsvcToolChain::updateId() id += m_varsBatArg; id += colon; id += m_debuggerCommand.toString(); - setId(id); + return id; } QString MsvcToolChain::typeName() const @@ -356,7 +355,6 @@ bool MsvcToolChain::fromMap(const QVariantMap &data) m_debuggerCommand = Utils::FileName::fromString(data.value(QLatin1String(debuggerCommandKeyC)).toString()); const QString abiString = data.value(QLatin1String(supportedAbiKeyC)).toString(); m_abi = Abi(abiString); - updateId(); return !m_vcvarsBat.isEmpty() && m_abi.isValid(); } diff --git a/src/plugins/projectexplorer/msvctoolchain.h b/src/plugins/projectexplorer/msvctoolchain.h index 5ad742fc13a..bc51c189d4b 100644 --- a/src/plugins/projectexplorer/msvctoolchain.h +++ b/src/plugins/projectexplorer/msvctoolchain.h @@ -56,6 +56,7 @@ public: MsvcToolChain(const QString &name, const Abi &abi, const QString &varsBat, const QString &varsBatArg, bool autodetect = false); + QString legacyId() const; static MsvcToolChain *readFromMap(const QVariantMap &data); @@ -79,7 +80,6 @@ protected: private: MsvcToolChain(); - void updateId(); QString m_varsBatArg; // Argument }; diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp index 517756e2b91..cad5f70b7a0 100644 --- a/src/plugins/projectexplorer/toolchain.cpp +++ b/src/plugins/projectexplorer/toolchain.cpp @@ -38,9 +38,11 @@ #include #include +#include static const char ID_KEY[] = "ProjectExplorer.ToolChain.Id"; static const char DISPLAY_NAME_KEY[] = "ProjectExplorer.ToolChain.DisplayName"; +static const char AUTODETECT_KEY[] = "ProjectExplorer.ToolChain.Autodetect"; namespace ProjectExplorer { namespace Internal { @@ -53,9 +55,22 @@ class ToolChainPrivate { public: ToolChainPrivate(const QString &id, bool autodetect) : - m_id(id), m_autodetect(autodetect) - { Q_ASSERT(!id.isEmpty()); } + { + m_id = createId(id); + } + + static QString createId(const QString &id) + { + QString newId = id; + + QUuid uuid(id.mid(id.indexOf(":") + 1)); + if (uuid.isNull()) { + newId = id.left(id.indexOf(':')); + newId.append(QLatin1Char(':') + QUuid::createUuid().toString()); + } + return newId; + } QString m_id; bool m_autodetect; @@ -141,7 +156,11 @@ bool ToolChain::operator == (const ToolChain &tc) const if (this == &tc) return true; - return id() == tc.id(); + const QString thisId = id().left(id().indexOf(QLatin1Char(':'))); + const QString tcId = tc.id().left(tc.id().indexOf(QLatin1Char(':'))); + + // We ignore displayname + return thisId == tcId && isAutoDetected() == tc.isAutoDetected(); } /*! @@ -153,25 +172,13 @@ bool ToolChain::operator == (const ToolChain &tc) const QVariantMap ToolChain::toMap() const { QVariantMap result; - if (isAutoDetected()) - return result; - result.insert(QLatin1String(ID_KEY), id()); result.insert(QLatin1String(DISPLAY_NAME_KEY), displayName()); + result.insert(QLatin1String(AUTODETECT_KEY), isAutoDetected()); return result; } -void ToolChain::setId(const QString &id) -{ - Q_ASSERT(!id.isEmpty()); - if (d->m_id == id) - return; - - d->m_id = id; - toolChainUpdated(); -} - void ToolChain::toolChainUpdated() { ToolChainManager::instance()->notifyAboutUpdate(this); @@ -193,9 +200,10 @@ void ToolChain::setAutoDetected(bool autodetect) bool ToolChain::fromMap(const QVariantMap &data) { - Q_ASSERT(!isAutoDetected()); - // do not read the id: That is already set anyway. d->m_displayName = data.value(QLatin1String(DISPLAY_NAME_KEY)).toString(); + // make sure we have new style ids: + d->m_id = Internal::ToolChainPrivate::createId(data.value(QLatin1String(ID_KEY)).toString()); + d->m_autodetect = data.value(QLatin1String(AUTODETECT_KEY), false).toBool(); return true; } diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index b63193a583e..61dc2b585c4 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -72,6 +72,8 @@ public: bool isAutoDetected() const; QString id() const; + // No need to implement this for new tool chains: + virtual QString legacyId() const { return QString(); } virtual QString typeName() const = 0; virtual Abi targetAbi() const = 0; @@ -105,8 +107,6 @@ protected: ToolChain(const QString &id, bool autoDetect); explicit ToolChain(const ToolChain &); - void setId(const QString &id); - void toolChainUpdated(); // Make sure to call this method when deriving! diff --git a/src/plugins/projectexplorer/toolchainmanager.cpp b/src/plugins/projectexplorer/toolchainmanager.cpp index 08a37e7c4dd..7e334290bcf 100644 --- a/src/plugins/projectexplorer/toolchainmanager.cpp +++ b/src/plugins/projectexplorer/toolchainmanager.cpp @@ -110,22 +110,61 @@ ToolChainManager::ToolChainManager(QObject *parent) : void ToolChainManager::restoreToolChains() { - // Restore SDK settings first + QList tcsToRegister; + QList tcsToCheck; + + // read all tool chains from SDK QFileInfo systemSettingsFile(Core::ICore::settings(QSettings::SystemScope)->fileName()); - restoreToolChains(systemSettingsFile.absolutePath() + QLatin1String(TOOLCHAIN_FILENAME), true); + QList readTcs = + restoreToolChains(systemSettingsFile.absolutePath() + QLatin1String(TOOLCHAIN_FILENAME)); + // make sure we mark these as autodetected! + foreach (ToolChain *tc, readTcs) + tc->setAutoDetected(true); + + tcsToRegister = readTcs; // SDK TCs are always considered to be up-to-date, so no need to + // recheck them. + + // read all tool chains from user file + readTcs = restoreToolChains(settingsFileName()); + + foreach (ToolChain *tc, readTcs) { + if (tc->isAutoDetected()) + tcsToCheck.append(tc); + else + tcsToRegister.append(tc); + } + readTcs.clear(); // Then auto detect + QList detectedTcs; ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); QList factories = pm->getObjects(); - // Autodetect tool chains: - foreach (ToolChainFactory *f, factories) { - QList tcs = f->autoDetect(); - foreach (ToolChain *tc, tcs) - registerToolChain(tc); + foreach (ToolChainFactory *f, factories) + detectedTcs.append(f->autoDetect()); + + // Find/update autodetected tool chains: + ToolChain *toStore = 0; + foreach (ToolChain *currentDetected, detectedTcs) { + toStore = currentDetected; + + // Check whether we had this TC stored and prefer the old one with the old id: + for (int i = 0; i < tcsToCheck.count(); ++i) { + if (*(tcsToCheck.at(i)) == *currentDetected) { + toStore = tcsToCheck.at(i); + tcsToCheck.removeAt(i); + delete currentDetected; + break; + } + } + registerToolChain(toStore); } - // Then restore user settings - restoreToolChains(settingsFileName(), false); + // Delete all loaded autodetected tool chains that were not rediscovered: + qDeleteAll(tcsToCheck); + + // Store manual tool chains + foreach (ToolChain *tc, tcsToRegister) + registerToolChain(tc); } ToolChainManager::~ToolChainManager() @@ -146,7 +185,7 @@ void ToolChainManager::saveToolChains() int count = 0; foreach (ToolChain *tc, d->m_toolChains) { - if (!tc->isAutoDetected() && tc->isValid()) { + if (tc->isValid()) { QVariantMap tmp = tc->toMap(); if (tmp.isEmpty()) continue; @@ -160,17 +199,19 @@ void ToolChainManager::saveToolChains() // Do not save default debuggers! Those are set by the SDK! } -void ToolChainManager::restoreToolChains(const QString &fileName, bool autoDetected) +QList ToolChainManager::restoreToolChains(const QString &fileName) { + QList result; + PersistentSettingsReader reader; if (!reader.load(fileName)) - return; + return result; QVariantMap data = reader.restoreValues(); // Check version: int version = data.value(QLatin1String(TOOLCHAIN_FILE_VERSION_KEY), 0).toInt(); if (version < 1) - return; + return result; // Read default debugger settings (if any) int count = data.value(QLatin1String(DEFAULT_DEBUGGER_COUNT_KEY)).toInt(); @@ -200,19 +241,18 @@ void ToolChainManager::restoreToolChains(const QString &fileName, bool autoDetec foreach (ToolChainFactory *f, factories) { if (f->canRestore(tcMap)) { if (ToolChain *tc = f->restore(tcMap)) { - tc->setAutoDetected(autoDetected); - - registerToolChain(tc); + result.append(tc); restored = true; break; } } } if (!restored) - qWarning("Warning: Unable to restore manual tool chain '%s' stored in %s.", + qWarning("Warning: Unable to restore tool chain '%s' stored in %s.", qPrintable(ToolChainFactory::idFromMap(tcMap)), qPrintable(QDir::toNativeSeparators(fileName))); } + return result; } QList ToolChainManager::toolChains() const @@ -233,8 +273,11 @@ QList ToolChainManager::findToolChains(const Abi &abi) const ToolChain *ToolChainManager::findToolChain(const QString &id) const { + if (id.isEmpty()) + return 0; + foreach (ToolChain *tc, d->m_toolChains) { - if (tc->id() == id) + if (tc->id() == id || (!tc->legacyId().isEmpty() && tc->legacyId() == id)) return tc; } return 0; diff --git a/src/plugins/projectexplorer/toolchainmanager.h b/src/plugins/projectexplorer/toolchainmanager.h index cff534d9b1a..31ab664e627 100644 --- a/src/plugins/projectexplorer/toolchainmanager.h +++ b/src/plugins/projectexplorer/toolchainmanager.h @@ -90,7 +90,7 @@ private: // Make sure the this is only called after all // Tool chain Factories are registered! void restoreToolChains(); - void restoreToolChains(const QString &fileName, bool autoDetected = false); + QList restoreToolChains(const QString &fileName); void notifyAboutUpdate(ProjectExplorer::ToolChain *); diff --git a/src/plugins/projectexplorer/wincetoolchain.cpp b/src/plugins/projectexplorer/wincetoolchain.cpp index b3a0c05eb9f..a3f86c40190 100644 --- a/src/plugins/projectexplorer/wincetoolchain.cpp +++ b/src/plugins/projectexplorer/wincetoolchain.cpp @@ -261,7 +261,6 @@ WinCEToolChain::WinCEToolChain(const QString &name, Q_ASSERT(!m_includePath.isEmpty()); Q_ASSERT(!m_libPath.isEmpty()); - updateId(); setDisplayName(name); } @@ -279,7 +278,7 @@ WinCEToolChain *WinCEToolChain::readFromMap(const QVariantMap &data) return 0; } -void WinCEToolChain::updateId() +QString WinCEToolChain::legacyId() const { const QChar colon = QLatin1Char(':'); QString id = QLatin1String(Constants::WINCE_TOOLCHAIN_ID); @@ -293,7 +292,7 @@ void WinCEToolChain::updateId() id += m_libPath; id += colon; id += m_debuggerCommand.toString(); - setId(id); + return id; } QString WinCEToolChain::typeName() const @@ -355,7 +354,6 @@ bool WinCEToolChain::fromMap(const QVariantMap &data) m_debuggerCommand = Utils::FileName::fromString(data.value(QLatin1String(debuggerCommandKeyC)).toString()); const QString abiString = data.value(QLatin1String(supportedAbiKeyC)).toString(); m_abi = Abi(abiString); - updateId(); return isValid(); } diff --git a/src/plugins/projectexplorer/wincetoolchain.h b/src/plugins/projectexplorer/wincetoolchain.h index ff37f9bec1e..836c85f79c6 100644 --- a/src/plugins/projectexplorer/wincetoolchain.h +++ b/src/plugins/projectexplorer/wincetoolchain.h @@ -57,6 +57,8 @@ public: const QString &libPath, bool autodetect = false); + QString legacyId() const; + static WinCEToolChain *readFromMap(const QVariantMap &data); QString typeName() const; @@ -79,7 +81,6 @@ protected: private: WinCEToolChain(); - void updateId(); QString m_msvcVer; QString m_ceVer; diff --git a/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp index e3e80dc6e3a..9d04513868d 100644 --- a/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp @@ -91,19 +91,6 @@ static Utils::Environment baseEnvironment(RvctToolChain *tc) return result; } -static QString toString(const RvctToolChain::ArmVersion &v) -{ - switch (v) - { - case RvctToolChain::ARMv5: - return QString::fromAscii("armv5"); - case RvctToolChain::ARMv6: - return QString::fromAscii("armv6"); - default: - return QString::fromAscii("unknown"); - } -} - // ========================================================================== // RvctToolChain // ========================================================================== @@ -284,7 +271,7 @@ void RvctToolChain::setCompilerPath(const QString &path) m_compilerPath = path; m_version.reset(); - updateId(); // Will trigger toolChainUpdated()! + toolChainUpdated(); } QString RvctToolChain::compilerPath() const @@ -365,11 +352,11 @@ bool RvctToolChain::fromMap(const QVariantMap &data) return isValid(); } -void RvctToolChain::updateId() +QString RvctToolChain::legacyId() const { const QChar dot = QLatin1Char('.'); - setId(QLatin1String(Constants::RVCT_TOOLCHAIN_ID) + QLatin1Char(':') - + m_compilerPath + dot + toString(m_armVersion) + dot + m_debuggerCommand.toString()); + return QLatin1String(Constants::RVCT_TOOLCHAIN_ID) + QLatin1Char(':') + m_compilerPath + dot + + armVersionString(m_armVersion) + dot + m_debuggerCommand.toString(); } QString RvctToolChain::varName(const QString &postFix) const diff --git a/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h index 9cf1488631b..3f0468beea0 100644 --- a/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h +++ b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h @@ -84,6 +84,8 @@ public: QString typeName() const; ProjectExplorer::Abi targetAbi() const; + QString legacyId() const; + bool isValid() const; QByteArray predefinedMacros() const; @@ -115,7 +117,6 @@ public: bool fromMap(const QVariantMap &data); private: - void updateId(); void setVersion(const RvctVersion &v) const; explicit RvctToolChain(bool autodetected = false); diff --git a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp index 187ddda521a..f0ff7e7cfc1 100644 --- a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp @@ -147,6 +147,11 @@ ProjectExplorer::Abi WinscwToolChain::targetAbi() const ProjectExplorer::Abi::ElfFormat, 32); } +QString WinscwToolChain::legacyId() const +{ + return QLatin1String(Constants::WINSCW_TOOLCHAIN_ID) + QLatin1Char(':') + m_compilerPath; +} + bool WinscwToolChain::isValid() const { if (m_compilerPath.isEmpty()) @@ -286,7 +291,7 @@ void WinscwToolChain::setCompilerPath(const QString &path) return; m_compilerPath = path; - updateId(); // Will trigger topolChainUpdated()! + toolChainUpdated(); } QString WinscwToolChain::compilerPath() const @@ -294,11 +299,6 @@ QString WinscwToolChain::compilerPath() const return m_compilerPath; } -void WinscwToolChain::updateId() -{ - setId(QLatin1String(Constants::WINSCW_TOOLCHAIN_ID) + QLatin1Char(':') + m_compilerPath); -} - // -------------------------------------------------------------------------- // ToolChainConfigWidget // -------------------------------------------------------------------------- diff --git a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h index 6db4a15a1bd..5dc78d16191 100644 --- a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h +++ b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h @@ -54,6 +54,7 @@ public: QString typeName() const; ProjectExplorer::Abi targetAbi() const; + QString legacyId() const; bool isValid() const; @@ -84,8 +85,6 @@ public: QString compilerPath() const; private: - void updateId(); - explicit WinscwToolChain(bool); QStringList m_systemIncludePathes; diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index 79cddcaa144..f95bab29791 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -133,7 +133,6 @@ bool Qt4BuildConfiguration::fromMap(const QVariantMap &map) m_shadowBuild = map.value(QLatin1String(USE_SHADOW_BUILD_KEY), true).toBool(); m_qtVersionId = map.value(QLatin1String(QT_VERSION_ID_KEY)).toInt(); - ProjectExplorer::ToolChain *tc = toolChain(); m_qmakeBuildConfiguration = QtSupport::BaseQtVersion::QmakeBuildConfigs(map.value(QLatin1String(BUILD_CONFIGURATION_KEY)).toInt()); m_buildDirectory = map.value(QLatin1String(BUILD_DIRECTORY_KEY), defaultShadowBuildDirectory()).toString(); @@ -160,6 +159,7 @@ bool Qt4BuildConfiguration::fromMap(const QVariantMap &map) m_lastEmmitedBuildDirectory = buildDirectory(); + ProjectExplorer::ToolChain *tc = toolChain(); if (version && version->isValid()) { if (tc && !qt4Target()->possibleToolChains(this).contains(tc)) setToolChain(0); @@ -377,7 +377,7 @@ void Qt4BuildConfiguration::setQtVersion(QtSupport::BaseQtVersion *version) void Qt4BuildConfiguration::setToolChain(ProjectExplorer::ToolChain *tc) { - if (tc != 0 && !qt4Target()->possibleToolChains(this).contains(tc)) + if (tc != 0 && m_qtVersionId > 0 && !qt4Target()->possibleToolChains(this).contains(tc)) return; if (toolChain() == tc)