diff --git a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp index aa888db7710..e38e96420eb 100644 --- a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp @@ -33,6 +33,7 @@ #include "gccetoolchain.h" #include "qt4projectmanagerconstants.h" +#include "qtversionmanager.h" #include #include @@ -149,6 +150,21 @@ QList GcceToolChainFactory::autoDetect() { QList result; + // Compatibility to pre-2.2: + while (true) { + const QString path = QtVersionManager::instance()->popPendingGcceUpdate(); + if (path.isNull()) + break; + + QFileInfo fi(path + QLatin1String("/bin/arm-none-symbianelf-g++.exe")); + if (fi.exists() && fi.isExecutable()) { + GcceToolChain *tc = new GcceToolChain(false); + tc->setCompilerPath(fi.absoluteFilePath()); + tc->setDisplayName(tr("GCCE from Qt version")); + result.append(tc); + } + } + QString fullPath = Utils::Environment::systemEnvironment().searchInPath(QLatin1String("arm-none-symbianelf-gcc")); if (!fullPath.isEmpty()) { GcceToolChain *tc = new GcceToolChain(true); diff --git a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp index c6893ac7558..42047db5fcf 100644 --- a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp @@ -34,6 +34,7 @@ #include "winscwtoolchain.h" #include "qt4projectmanager/qt4projectmanagerconstants.h" +#include "qtversionmanager.h" #include "ui_winscwtoolchainconfigwidget.h" #include "winscwparser.h" @@ -44,6 +45,7 @@ #include #include +#include namespace Qt4ProjectManager { namespace Internal { @@ -377,6 +379,22 @@ QString WinscwToolChainFactory::id() const QList WinscwToolChainFactory::autoDetect() { QList result; + + // Compatibility to pre-2.2: + while (true) { + const QString path = QtVersionManager::instance()->popPendingMwcUpdate(); + if (path.isNull()) + break; + + QFileInfo fi(path + QLatin1String("/x86Build/Symbian_Tools/Command_Line_Tools/mwwinrc.exe")); + if (fi.exists() && fi.isExecutable()) { + WinscwToolChain *tc = new WinscwToolChain(false); + tc->setCompilerPath(fi.absoluteFilePath()); + tc->setDisplayName(tr("WINSCW from Qt version")); + result.append(tc); + } + } + QString cc = Utils::Environment::systemEnvironment().searchInPath(QLatin1String("mwwinrc")); if (!cc.isEmpty()) { WinscwToolChain *tc = new WinscwToolChain(true); diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp index d2009b3cdfa..16810bb131d 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.cpp +++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp @@ -176,8 +176,8 @@ QtVersionManager::QtVersionManager() version->setSystemRoot(s->value("S60SDKDirectory").toString()); version->setSbsV2Directory(s->value(QLatin1String("SBSv2Directory")).toString()); - // Update from 2.1 or earlier: - QString mingwDir = s->value(QLatin1String("MingwDirectory")).toString(); + // Update from pre-2.2: + const QString mingwDir = s->value(QLatin1String("MingwDirectory")).toString(); if (!mingwDir.isEmpty()) { QFileInfo fi(mingwDir + QLatin1String("/bin/g++.exe")); if (fi.exists() && fi.isExecutable()) { @@ -189,30 +189,12 @@ QtVersionManager::QtVersionManager() } } } - QString mwcDir = s->value(QLatin1String("MwcDirectory")).toString(); - if (!mwcDir.isEmpty()) { - QFileInfo fi(mwcDir + QLatin1String("/x86Build/Symbian_Tools/Command_Line_Tools/mwwinrc.exe")); - if (fi.exists() && fi.isExecutable()) { - WinscwToolChain *tc = createToolChain(Constants::WINSCW_TOOLCHAIN_ID); - if (tc) { - tc->setCompilerPath(fi.absoluteFilePath()); - tc->setDisplayName(tr("WINSCW from %1").arg(version->displayName())); - ProjectExplorer::ToolChainManager::instance()->registerToolChain(tc); - } - } - } - QString gcceDir = s->value(QLatin1String("GcceDirectory")).toString(); - if (!gcceDir.isEmpty()) { - QFileInfo fi(gcceDir + QLatin1String("/bin/arm-none-symbianelf-g++.exe")); - if (fi.exists() && fi.isExecutable()) { - GcceToolChain *tc = createToolChain(Constants::GCCE_TOOLCHAIN_ID); - if (tc) { - tc->setCompilerPath(fi.absoluteFilePath()); - tc->setDisplayName(tr("GCCE from %1").arg(version->displayName())); - ProjectExplorer::ToolChainManager::instance()->registerToolChain(tc); - } - } - } + const QString mwcDir = s->value(QLatin1String("MwcDirectory")).toString(); + if (!mwcDir.isEmpty()) + m_pendingMwcUpdates.append(mwcDir); + const QString gcceDir = s->value(QLatin1String("GcceDirectory")).toString(); + if (!gcceDir.isEmpty()) + m_pendingGcceUpdates.append(gcceDir); m_versions.insert(version->uniqueId(), version); } @@ -413,6 +395,20 @@ bool QtVersionManager::isValidId(int id) const return m_versions.contains(id); } +QString QtVersionManager::popPendingMwcUpdate() +{ + if (m_pendingMwcUpdates.isEmpty()) + return QString(); + return m_pendingMwcUpdates.takeFirst(); +} + +QString QtVersionManager::popPendingGcceUpdate() +{ + if (m_pendingGcceUpdates.isEmpty()) + return QString(); + return m_pendingGcceUpdates.takeFirst(); +} + QtVersion *QtVersionManager::version(int id) const { QMap::const_iterator it = m_versions.find(id); diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h index b5cb9133602..dbc4b003aa6 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.h +++ b/src/plugins/qt4projectmanager/qtversionmanager.h @@ -294,6 +294,10 @@ public: static QString findQMakeBinaryFromMakefile(const QString &directory); bool isValidId(int id) const; + // Compatibility with pre-2.2: + QString popPendingMwcUpdate(); + QString popPendingGcceUpdate(); + signals: void qtVersionsChanged(const QList &uniqueIds); void updateExamples(QString, QString, QString); @@ -328,6 +332,10 @@ private: int m_idcount; // managed by QtProjectManagerPlugin static QtVersionManager *m_self; + + // Compatibility with pre-2.2: + QStringList m_pendingMwcUpdates; + QStringList m_pendingGcceUpdates; }; } // namespace Qt4ProjectManager