From 3cb34cf8ec6b6759f5933cfe4c78023c74623f0b Mon Sep 17 00:00:00 2001
From: Christian Kandeler <christian.kandeler@nokia.com>
Date: Tue, 4 Jan 2011 14:14:12 +0100
Subject: [PATCH] Maemo: Move MADDE environment information out of
 MaemoToolChain class.

The toolchain is not available in all places where we need the
respective information, which resulted in duplicated code.
---
 .../qt-maemo/maemodeployablelistmodel.cpp     | 27 +++----
 .../qt-maemo/maemodeployablelistmodel.h       |  4 +-
 .../qt-maemo/maemodeploystep.cpp              | 19 +++--
 .../qt-maemo/maemoglobal.cpp                  | 55 +++++++++++--
 .../qt4projectmanager/qt-maemo/maemoglobal.h  | 26 +++++-
 .../qt-maemo/maemomanager.cpp                 | 20 ++---
 .../qt-maemo/maemopackagecreationstep.cpp     | 57 +++++--------
 .../qt-maemo/maemopackagecreationstep.h       | 10 +--
 .../qt-maemo/maemopackagecreationwidget.cpp   |  9 ++-
 .../qt-maemo/maemopublisherfremantlefree.cpp  | 11 +--
 ...blishingbuildsettingspagefremantlefree.cpp |  8 +-
 .../maemopublishingwizardfactories.cpp        |  8 +-
 .../qt-maemo/maemoqemumanager.cpp             |  1 -
 .../qt-maemo/maemoqemuruntimeparser.cpp       | 13 +--
 .../qt-maemo/maemoremotemounter.cpp           |  9 ++-
 .../qt-maemo/maemoremotemounter.h             |  4 +-
 .../qt-maemo/maemorunconfiguration.cpp        | 21 ++---
 .../qt-maemo/maemorunconfiguration.h          |  1 -
 .../qt-maemo/maemorunconfigurationwidget.cpp  | 14 ++--
 .../qt-maemo/maemorunfactories.cpp            |  9 ++-
 .../qt-maemo/maemosshrunner.cpp               |  2 +-
 .../qt-maemo/maemotemplatesmanager.cpp        |  9 +--
 .../qt-maemo/maemotoolchain.cpp               | 80 +++++--------------
 .../qt-maemo/maemotoolchain.h                 | 25 ++----
 24 files changed, 199 insertions(+), 243 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeployablelistmodel.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeployablelistmodel.cpp
index 0ee1c8f4ed..08abf96191 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeployablelistmodel.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeployablelistmodel.cpp
@@ -33,7 +33,7 @@
 
 #include "maemodeployablelistmodel.h"
 
-#include "maemotoolchain.h"
+#include "maemoglobal.h"
 
 #include <projectexplorer/projectexplorer.h>
 #include <projectexplorer/session.h>
@@ -255,10 +255,10 @@ bool MaemoDeployableListModel::addDesktopFile(QString &error)
             return false;
     }
 
-    const MaemoToolChain *const tc = maemoToolchain();
-    QTC_ASSERT(tc, return false);
+    const QtVersion * const version = qtVersion();
+    QTC_ASSERT(version, return false);
     QString remoteDir = QLatin1String("/usr/share/applications");
-    if (tc->version() == MaemoToolChain::Maemo5)
+    if (MaemoGlobal::version(version) == MaemoGlobal::Maemo5)
         remoteDir += QLatin1String("/hildon");
     const QLatin1String filesLine("desktopfile.files = $${TARGET}.desktop");
     const QString pathLine = QLatin1String("desktopfile.path = ") + remoteDir;
@@ -333,7 +333,7 @@ bool MaemoDeployableListModel::addLinesToProFile(const QStringList &lines)
     return true;
 }
 
-const MaemoToolChain *MaemoDeployableListModel::maemoToolchain() const
+const QtVersion *MaemoDeployableListModel::qtVersion() const
 {
     const ProjectExplorer::Project *const activeProject
         = ProjectExplorer::ProjectExplorerPlugin::instance()->session()->startupProject();
@@ -344,25 +344,22 @@ const MaemoToolChain *MaemoDeployableListModel::maemoToolchain() const
     const Qt4BuildConfiguration *const bc
         = activeTarget->activeBuildConfiguration();
     QTC_ASSERT(bc, return 0);
-    const MaemoToolChain *const tc
-        = dynamic_cast<MaemoToolChain *>(bc->toolChain());
-    QTC_ASSERT(tc, return 0);
-    return tc;
+    return bc->qtVersion();
 }
 
 QString MaemoDeployableListModel::proFileScope() const
 {
-    const MaemoToolChain *const tc = maemoToolchain();
-    QTC_ASSERT(tc, return QString());
-    return QLatin1String(tc->version() == MaemoToolChain::Maemo5
+    const QtVersion *const qv = qtVersion();
+    QTC_ASSERT(qv, return QString());
+    return QLatin1String(MaemoGlobal::version(qv) == MaemoGlobal::Maemo5
         ? "maemo5" : "unix:!symbian:!maemo5");
 }
 
 QString MaemoDeployableListModel::installPrefix() const
 {
-    const MaemoToolChain *const tc = maemoToolchain();
-    QTC_ASSERT(tc, return QString());
-    return QLatin1String(tc->version() == MaemoToolChain::Maemo5
+    const QtVersion *const qv = qtVersion();
+    QTC_ASSERT(qv, return QString());
+    return QLatin1String(MaemoGlobal::version(qv) == MaemoGlobal::Maemo5
         ? "/opt/usr" : "/usr");
 }
 
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeployablelistmodel.h b/src/plugins/qt4projectmanager/qt-maemo/maemodeployablelistmodel.h
index dc7a5e6c34..14e494fc3f 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeployablelistmodel.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeployablelistmodel.h
@@ -45,8 +45,8 @@
 #include <QtCore/QString>
 
 namespace Qt4ProjectManager {
+class QtVersion;
 namespace Internal {
-class MaemoToolChain;
 
 class MaemoDeployableListModel : public QAbstractTableModel
 {
@@ -98,7 +98,7 @@ private:
     bool isEditable(const QModelIndex &index) const;
     bool buildModel();
     bool addLinesToProFile(const QStringList &lines);
-    const MaemoToolChain *maemoToolchain() const;
+    const QtVersion *qtVersion() const;
     QString proFileScope() const;
     QString installPrefix() const;
 
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp
index 208491fa43..ba13086a27 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp
@@ -455,12 +455,15 @@ void MaemoDeployStep::handleUnmounted()
         m_mounter->resetMountSpecifications();
         setState(Inactive);
         break;
-    case UnmountingOldDirs:
-        if (toolChain()->allowsRemoteMounts())
+    case UnmountingOldDirs: {
+        const Qt4BuildConfiguration * const bc
+            = static_cast<Qt4BuildConfiguration *>(buildConfiguration());
+        if (MaemoGlobal::allowsRemoteMounts(bc->qtVersion()))
             setupMount();
         else
             prepareSftpConnection();
         break;
+    }
     case UnmountingCurrentDirs:
         setState(GatheringPorts);
         m_portsGatherer->start(m_connection, deviceConfig().freePorts());
@@ -519,7 +522,7 @@ void MaemoDeployStep::setupMount()
 
     Q_ASSERT(m_needsInstall || !m_filesToCopy.isEmpty());
     m_mounter->resetMountSpecifications();
-    m_mounter->setToolchain(toolChain());
+    m_mounter->setBuildConfiguration(static_cast<Qt4BuildConfiguration *>(buildConfiguration()));
     if (m_needsInstall) {
         const QString localDir
             = QFileInfo(packagingStep()->packageFilePath()).absolutePath();
@@ -579,11 +582,13 @@ void MaemoDeployStep::installToSysroot()
 
     if (m_needsInstall) {
         writeOutput(tr("Installing package to sysroot ..."));
-        const MaemoToolChain * const tc = toolChain();
+        const Qt4BuildConfiguration * const bc
+            = static_cast<Qt4BuildConfiguration *>(buildConfiguration());
+        const QtVersion * const qtVersion = bc->qtVersion();
         const QStringList args = QStringList() << QLatin1String("-t")
-            << tc->targetName() << QLatin1String("xdpkg") << QLatin1String("-i")
-            << packagingStep()->packageFilePath();
-        m_sysrootInstaller->start(tc->madAdminCommand(), args);
+            << MaemoGlobal::targetName(qtVersion) << QLatin1String("xdpkg")
+            << QLatin1String("-i") << packagingStep()->packageFilePath();
+        MaemoGlobal::callMadAdmin(*m_sysrootInstaller, args, qtVersion);
         if (!m_sysrootInstaller->waitForStarted()) {
             writeOutput(tr("Installation to sysroot failed, continuing anyway."),
                 ErrorMessageOutput);
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.cpp
index bc677cff89..5a16e2e2ee 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.cpp
@@ -37,6 +37,7 @@
 #include "maemodeviceconfigurations.h"
 
 #include <coreplugin/ssh/sshconnection.h>
+#include <qt4projectmanager/qtversionmanager.h>
 #include <utils/environment.h>
 
 #include <QtCore/QCoreApplication>
@@ -107,17 +108,42 @@ QString MaemoGlobal::failedToConnectToServerMessage(const Core::SshConnection::P
     return errorMsg;
 }
 
-QString MaemoGlobal::maddeRoot(const QString &qmakePath)
+QString MaemoGlobal::maddeRoot(const QtVersion *qtVersion)
 {
-    QDir dir(QDir::cleanPath(qmakePath).remove(binQmake));
+    QDir dir(targetRoot(qtVersion));
     dir.cdUp(); dir.cdUp();
     return dir.absolutePath();
 }
 
-QString MaemoGlobal::targetName(const QString &qmakePath)
+QString MaemoGlobal::targetRoot(const QtVersion *qtVersion)
 {
-    const QString target = QDir::cleanPath(qmakePath).remove(binQmake);
-    return target.mid(target.lastIndexOf(QLatin1Char('/')) + 1);
+    return QDir::cleanPath(qtVersion->qmakeCommand()).remove(binQmake);
+}
+
+QString MaemoGlobal::targetName(const QtVersion *qtVersion)
+{
+    return QDir(targetRoot(qtVersion)).dirName();
+}
+
+QString MaemoGlobal::madAdminCommand(const QtVersion *qtVersion)
+{
+    return maddeRoot(qtVersion) + QLatin1String("/bin/mad-admin");
+}
+
+QString MaemoGlobal::madCommand(const QtVersion *qtVersion)
+{
+    return maddeRoot(qtVersion) + QLatin1String("/bin/mad");
+}
+
+MaemoGlobal::MaemoVersion MaemoGlobal::version(const QtVersion *qtVersion)
+{
+    const QString &name = targetName(qtVersion);
+    if (name.startsWith(QLatin1String("fremantle")))
+        return Maemo5;
+    if (name.startsWith(QLatin1String("harmattan")))
+        return Maemo6;
+    qWarning("Unknown Maemo version!");
+    return static_cast<MaemoVersion>(-1);
 }
 
 bool MaemoGlobal::removeRecursively(const QString &filePath, QString &error)
@@ -150,9 +176,25 @@ bool MaemoGlobal::removeRecursively(const QString &filePath, QString &error)
     return true;
 }
 
-void MaemoGlobal::callMaddeShellScript(QProcess &proc, const QString &maddeRoot,
+bool MaemoGlobal::callMad(QProcess &proc, const QStringList &args,
+    const QtVersion *qtVersion)
+{
+    return callMaddeShellScript(proc, maddeRoot(qtVersion),
+        madCommand(qtVersion), args);
+}
+
+bool MaemoGlobal::callMadAdmin(QProcess &proc, const QStringList &args,
+    const QtVersion *qtVersion)
+{
+    return callMaddeShellScript(proc, maddeRoot(qtVersion),
+        madAdminCommand(qtVersion), args);
+}
+
+bool MaemoGlobal::callMaddeShellScript(QProcess &proc, const QString &maddeRoot,
     const QString &command, const QStringList &args)
 {
+    if (!QFileInfo(command).exists())
+        return false;
     QString actualCommand = command;
     QStringList actualArgs = args;
 #ifdef Q_OS_WIN
@@ -167,6 +209,7 @@ void MaemoGlobal::callMaddeShellScript(QProcess &proc, const QString &maddeRoot,
     Q_UNUSED(maddeRoot);
 #endif
     proc.start(actualCommand, actualArgs);
+    return true;
 }
 
 } // namespace Internal
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.h b/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.h
index efa49d9585..c9484ed4ea 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoglobal.h
@@ -54,12 +54,15 @@ QT_END_NAMESPACE
 namespace Core { class SshConnection; }
 
 namespace Qt4ProjectManager {
+class QtVersion;
 namespace Internal {
 class MaemoDeviceConfig;
 
 class MaemoGlobal
 {
 public:
+    enum MaemoVersion { Maemo5, Maemo6 };
+
     static QString homeDirOnDevice(const QString &uname);
     static QString remoteSudo();
     static QString remoteCommandPrefix(const QString &commandFilePath);
@@ -67,12 +70,22 @@ public:
     static QString remoteSourceProfilesCommand();
     static QString failedToConnectToServerMessage(const QSharedPointer<Core::SshConnection> &connection,
         const MaemoDeviceConfig &deviceConfig);
-    static QString maddeRoot(const QString &qmakePath);
-    static QString targetName(const QString &qmakePath);
+
+    static QString maddeRoot(const QtVersion *qtVersion);
+    static QString targetRoot(const QtVersion *qtVersion);
+    static QString targetName(const QtVersion *qtVersion);
+    static QString madCommand(const QtVersion *qtVersion);
+    static MaemoVersion version(const QtVersion *qtVersion);
+    static bool allowsRemoteMounts(const QtVersion *qtVersion) { return version(qtVersion) == Maemo5; }
+    static bool allowsPackagingDisabling(const QtVersion *qtVersion) { return version(qtVersion) == Maemo5; }
+    static bool allowsQmlDebugging(const QtVersion *qtVersion) { return version(qtVersion) == Maemo6; }
+
+    static bool callMad(QProcess &proc, const QStringList &args,
+        const QtVersion *qtVersion);
+    static bool callMadAdmin(QProcess &proc, const QStringList &args,
+        const QtVersion *qtVersion);
 
     static bool removeRecursively(const QString &filePath, QString &error);
-    static void callMaddeShellScript(QProcess &proc, const QString &maddeRoot,
-        const QString &command, const QStringList &args);
 
     template<class T> static T *buildStep(const ProjectExplorer::DeployConfiguration *dc)
     {
@@ -101,6 +114,11 @@ public:
                 actual, func);
         }
     }
+
+private:
+    static QString madAdminCommand(const QtVersion *qtVersion);
+    static bool callMaddeShellScript(QProcess &proc, const QString &maddeRoot,
+        const QString &command, const QStringList &args);
 };
 
 } // namespace Internal
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp
index ace6c27f0f..da681ad62e 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp
@@ -110,26 +110,18 @@ MaemoManager &MaemoManager::instance()
 
 bool MaemoManager::isValidMaemoQtVersion(const QtVersion *version) const
 {
-    QString path = QDir::cleanPath(version->qmakeCommand());
-    path.remove(QLatin1String("/bin/qmake" EXEC_SUFFIX));
-    QDir dir(path);
-    const QByteArray target = dir.dirName().toAscii();
-    dir.cdUp(); dir.cdUp();
-    const QString madAdminCommand(dir.absolutePath() + QLatin1String("/bin/mad-admin"));
-    if (!QFileInfo(madAdminCommand).exists())
-        return false;
-
     QProcess madAdminProc;
     const QStringList arguments(QLatin1String("list"));
-    MaemoGlobal::callMaddeShellScript(madAdminProc, dir.absolutePath(),
-        madAdminCommand, arguments);
+    if (!MaemoGlobal::callMadAdmin(madAdminProc, arguments, version))
+        return false;
     if (!madAdminProc.waitForStarted() || !madAdminProc.waitForFinished())
         return false;
 
     madAdminProc.setReadChannel(QProcess::StandardOutput);
+    const QByteArray targetName = MaemoGlobal::targetName(version).toAscii();
     while (madAdminProc.canReadLine()) {
         const QByteArray &line = madAdminProc.readLine();
-        if (line.contains(target)
+        if (line.contains(targetName)
             && (line.contains("(installed)") || line.contains("(default)")))
             return true;
     }
@@ -138,9 +130,7 @@ bool MaemoManager::isValidMaemoQtVersion(const QtVersion *version) const
 
 ToolChain* MaemoManager::maemoToolChain(const QtVersion *version) const
 {
-    QString targetRoot = QDir::cleanPath(version->qmakeCommand());
-    targetRoot.remove(QLatin1String("/bin/qmake" EXEC_SUFFIX));
-    return new MaemoToolChain(targetRoot);
+    return new MaemoToolChain(version);
 }
 
     } // namespace Internal
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp
index c2a67b0090..91327c97b9 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp
@@ -47,7 +47,6 @@
 #include "maemoglobal.h"
 #include "maemopackagecreationwidget.h"
 #include "maemotemplatesmanager.h"
-#include "maemotoolchain.h"
 
 #include <projectexplorer/buildsteplist.h>
 #include <projectexplorer/projectexplorerconstants.h>
@@ -172,16 +171,17 @@ bool MaemoPackageCreationStep::createPackage(QProcess *buildProc)
     if (!copyDebianFiles(inSourceBuild))
         return false;
 
-    const QString maddeRoot = maemoToolChain()->maddeRoot();
-    const QString madCommand = maddeRoot + QLatin1String("/bin/mad");
+    const QtVersion * const qtVersion = qt4BuildConfiguration()->qtVersion();
+    const QString madCommand = MaemoGlobal::madCommand(qtVersion);
     const QStringList args = QStringList() << QLatin1String("-t")
-        << maemoToolChain()->targetName() << QLatin1String("dpkg-buildpackage")
-        << QLatin1String("-nc") << QLatin1String("-uc") << QLatin1String("-us");
+        << MaemoGlobal::targetName(qtVersion)
+        << QLatin1String("dpkg-buildpackage") << QLatin1String("-nc")
+        << QLatin1String("-uc") << QLatin1String("-us");
     const QString cmdLine = madCommand + QLatin1Char(' ')
         + args.join(QLatin1String(" "));
     emit addOutput(tr("Package Creation: Running command '%1'.").arg(cmdLine),
         BuildStep::MessageOutput);
-    MaemoGlobal::callMaddeShellScript(*buildProc, maddeRoot, madCommand, args);
+    MaemoGlobal::callMad(*buildProc, args, qtVersion);
     if (!buildProc->waitForStarted()) {
         raiseError(tr("Packaging failed."),
             tr("Packaging error: Could not start command '%1'. Reason: %2")
@@ -233,7 +233,7 @@ bool MaemoPackageCreationStep::createPackage(QProcess *buildProc)
     emit addOutput(tr("Package created."), BuildStep::MessageOutput);
     deployStep()->deployables()->setUnmodified();
     if (inSourceBuild) {
-        buildProc->start(packagingCommand(maemoToolChain(),
+        buildProc->start(packagingCommand(qt4BuildConfiguration(),
             QLatin1String("dh_clean")));
         buildProc->waitForFinished();
         buildProc->terminate();
@@ -341,11 +341,6 @@ QString MaemoPackageCreationStep::projectName() const
         ->rootProjectNode()->displayName().toLower();
 }
 
-const MaemoToolChain *MaemoPackageCreationStep::maemoToolChain() const
-{
-    return static_cast<MaemoToolChain *>(qt4BuildConfiguration()->toolChain());
-}
-
 MaemoDeployStep *MaemoPackageCreationStep::deployStep() const
 {
     MaemoDeployStep * const deployStep
@@ -355,16 +350,6 @@ MaemoDeployStep *MaemoPackageCreationStep::deployStep() const
     return deployStep;
 }
 
-QString MaemoPackageCreationStep::maddeRoot() const
-{
-    return maemoToolChain()->maddeRoot();
-}
-
-QString MaemoPackageCreationStep::targetRoot() const
-{
-    return maemoToolChain()->targetRoot();
-}
-
 bool MaemoPackageCreationStep::packagingNeeded() const
 {
     const QSharedPointer<MaemoDeployables> &deployables
@@ -427,7 +412,8 @@ QString MaemoPackageCreationStep::packageFilePath() const
 
 bool MaemoPackageCreationStep::isPackagingEnabled() const
 {
-    return m_packagingEnabled || !maemoToolChain()->allowsPackagingDisabling();
+    return m_packagingEnabled
+        || !MaemoGlobal::allowsPackagingDisabling(qt4BuildConfiguration()->qtVersion());
 }
 
 QString MaemoPackageCreationStep::versionString(QString *error) const
@@ -463,13 +449,8 @@ void MaemoPackageCreationStep::raiseError(const QString &shortMsg,
 bool MaemoPackageCreationStep::preparePackagingProcess(QProcess *proc,
     const Qt4BuildConfiguration *bc, const QString &workingDir, QString *error)
 {
-    const MaemoToolChain * const tc
-        = dynamic_cast<const MaemoToolChain *>(bc->toolChain());
-    if (!tc) {
-        *error = tr("Build configuration has no Maemo toolchain.");
-        return false;
-    }
-    QFile configFile(tc->targetRoot() % QLatin1String("/config.sh"));
+    const QString targetRoot = MaemoGlobal::targetRoot(bc->qtVersion());
+    QFile configFile(targetRoot % QLatin1String("/config.sh"));
     if (!configFile.open(QIODevice::ReadOnly)) {
         *error = tr("Cannot open MADDE config file '%1'.")
             .arg(nativePath(configFile));
@@ -478,11 +459,12 @@ bool MaemoPackageCreationStep::preparePackagingProcess(QProcess *proc,
 
     Utils::Environment env = bc->environment();
     const QString &path
-        = QDir::toNativeSeparators(tc->maddeRoot() + QLatin1Char('/'));
+        = QDir::toNativeSeparators(MaemoGlobal::maddeRoot(bc->qtVersion())
+              + QLatin1Char('/'));
 #ifdef Q_OS_WIN
     env.prependOrSetPath(path % QLatin1String("bin"));
 #endif
-    env.prependOrSetPath(tc->targetRoot() % QLatin1String("/bin"));
+    env.prependOrSetPath(targetRoot % QLatin1String("/bin"));
     env.prependOrSetPath(path % QLatin1String("madbin"));
 
     if (bc->qmakeBuildConfiguration() & QtVersion::DebugBuild) {
@@ -512,14 +494,15 @@ bool MaemoPackageCreationStep::preparePackagingProcess(QProcess *proc,
     return true;
 }
 
-QString MaemoPackageCreationStep::packagingCommand(const MaemoToolChain *tc,
+QString MaemoPackageCreationStep::packagingCommand(const Qt4BuildConfiguration *bc,
     const QString &commandName)
 {
     QString perl;
 #ifdef Q_OS_WIN
     perl = tc->maddeRoot() + QLatin1String("/bin/perl.exe ");
 #endif
-    return perl + tc->maddeRoot() % QLatin1String("/madbin/") % commandName;
+    return perl + MaemoGlobal::maddeRoot(bc->qtVersion())
+        % QLatin1String("/madbin/") % commandName;
 }
 
 void MaemoPackageCreationStep::checkProjectName()
@@ -571,7 +554,9 @@ void MaemoPackageCreationStep::updateDesktopFiles(const QString &rulesFilePath)
     QString desktopFileDir = QFileInfo(rulesFile).dir().path()
         + QLatin1Char('/') + projectName()
         + QLatin1String("/usr/share/applications/");
-    if (maemoToolChain()->version() == MaemoToolChain::Maemo5)
+    const MaemoGlobal::MaemoVersion version
+        = MaemoGlobal::version(qt4BuildConfiguration()->qtVersion());
+    if (version == MaemoGlobal::Maemo5)
         desktopFileDir += QLatin1String("hildon/");
 #ifdef Q_OS_WIN
     desktopFileDir.remove(QLatin1Char(':'));
@@ -583,7 +568,7 @@ void MaemoPackageCreationStep::updateDesktopFiles(const QString &rulesFilePath)
             = deployStep()->deployables()->modelAt(i);
         if (!model->hasDesktopFile())
             continue;
-        if (maemoToolChain()->version() == MaemoToolChain::Maemo6) {
+        if (version == MaemoGlobal::Maemo6) {
             addWorkaroundForHarmattanBug(content, insertPos,
                 model, desktopFileDir);
         }
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.h b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.h
index 79c9529000..941a996805 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.h
@@ -56,8 +56,6 @@ class Qt4BuildConfiguration;
 namespace Internal {
 class MaemoDeployStep;
 class MaemoDeployableListModel;
-class MaemoToolChain;
-class MaemoProFileWrapper;
 
 class MaemoPackageCreationStep : public ProjectExplorer::BuildStep
 {
@@ -74,18 +72,17 @@ public:
     QString versionString(QString *error) const;
     bool setVersionString(const QString &version, QString *error);
 
-    const MaemoToolChain *maemoToolChain() const;
-
     static bool preparePackagingProcess(QProcess *proc,
         const Qt4BuildConfiguration *bc, const QString &workingDir,
         QString *error);
-    static QString packagingCommand(const MaemoToolChain *tc,
+    static QString packagingCommand(const Qt4BuildConfiguration *bc,
         const QString &commandName);
     static QString packageName(const ProjectExplorer::Project *project);
     static QString packageFileName(const ProjectExplorer::Project *project,
         const QString &version);
 
     QString projectName() const;
+    const Qt4BuildConfiguration *qt4BuildConfiguration() const;
 
     static const QLatin1String DefaultVersionNumber;
 
@@ -111,8 +108,6 @@ private:
 
     bool createPackage(QProcess *buildProc);
     bool copyDebianFiles(bool inSourceBuild);
-    QString maddeRoot() const;
-    QString targetRoot() const;
     static QString nativePath(const QFile &file);
     bool packagingNeeded() const;
     bool isFileNewerThan(const QString &filePath,
@@ -120,7 +115,6 @@ private:
     void raiseError(const QString &shortMsg,
                     const QString &detailedMsg = QString());
     QString buildDirectory() const;
-    const Qt4BuildConfiguration *qt4BuildConfiguration() const;
     MaemoDeployStep * deployStep() const;
     void checkProjectName();
     void updateDesktopFiles(const QString &rulesFilePath);
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationwidget.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationwidget.cpp
index 43e630da7a..5ce4ee2234 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationwidget.cpp
@@ -42,9 +42,9 @@
 #include "maemopackagecreationwidget.h"
 #include "ui_maemopackagecreationwidget.h"
 
+#include "maemoglobal.h"
 #include "maemopackagecreationstep.h"
 #include "maemotemplatesmanager.h"
-#include "maemotoolchain.h"
 
 #include <coreplugin/editormanager/editormanager.h>
 #include <projectexplorer/project.h>
@@ -209,10 +209,11 @@ void MaemoPackageCreationWidget::setShortDescription()
 
 void MaemoPackageCreationWidget::handleToolchainChanged()
 {
-    if (!m_step->maemoToolChain())
+    const Qt4BuildConfiguration * const bc = m_step->qt4BuildConfiguration();
+    if (!bc)
         return;
-    m_ui->skipCheckBox
-        ->setVisible(m_step->maemoToolChain()->allowsPackagingDisabling());
+    m_ui->skipCheckBox->setVisible(MaemoGlobal::allowsPackagingDisabling(
+        bc->qtVersion()));
     m_ui->skipCheckBox->setChecked(!m_step->isPackagingEnabled());
     emit updateSummary();
 }
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopublisherfremantlefree.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemopublisherfremantlefree.cpp
index 2f40b73ee6..3ea8f2d49a 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemopublisherfremantlefree.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemopublisherfremantlefree.cpp
@@ -38,7 +38,6 @@
 #include "maemopackagecreationstep.h"
 #include "maemopublishingfileselectiondialog.h"
 #include "maemotemplatesmanager.h"
-#include "maemotoolchain.h"
 
 #include <coreplugin/ifile.h>
 #include <projectexplorer/project.h>
@@ -364,13 +363,11 @@ void MaemoPublisherFremantleFree::runDpkgBuildPackage()
         return;
     setState(BuildingPackage);
     emit progressReport(tr("Building source package..."));
-    const MaemoToolChain * const tc
-        = dynamic_cast<MaemoToolChain *>(m_buildConfig->toolChain());
     const QStringList args = QStringList() << QLatin1String("-t")
-        << tc->targetName() << QLatin1String("dpkg-buildpackage")
-        << QLatin1String("-S") << QLatin1String("-us") << QLatin1String("-uc");
-    const QString madCommand = tc->maddeRoot() + QLatin1String("/bin/mad");
-    MaemoGlobal::callMaddeShellScript(*m_process, tc->maddeRoot(), madCommand, args);
+        << MaemoGlobal::targetName(m_buildConfig->qtVersion())
+        << QLatin1String("dpkg-buildpackage") << QLatin1String("-S")
+        << QLatin1String("-us") << QLatin1String("-uc");
+    MaemoGlobal::callMad(*m_process, args, m_buildConfig->qtVersion());
 }
 
 // We have to implement the SCP protocol, because the maemo.org
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopublishingbuildsettingspagefremantlefree.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemopublishingbuildsettingspagefremantlefree.cpp
index 64d605ba26..ded215cba2 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemopublishingbuildsettingspagefremantlefree.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemopublishingbuildsettingspagefremantlefree.cpp
@@ -33,8 +33,8 @@
 #include "maemopublishingbuildsettingspagefremantlefree.h"
 #include "ui_maemopublishingbuildsettingspagefremantlefree.h"
 
+#include "maemoglobal.h"
 #include "maemopublisherfremantlefree.h"
-#include "maemotoolchain.h"
 
 #include <projectexplorer/project.h>
 #include <projectexplorer/target.h>
@@ -80,11 +80,7 @@ void MaemoPublishingBuildSettingsPageFremantleFree::collectBuildConfigurations(c
                 = qobject_cast<Qt4BuildConfiguration *>(bc);
             if (!qt4Bc)
                 continue;
-            const MaemoToolChain * const tc
-                = dynamic_cast<MaemoToolChain *>(qt4Bc->toolChain());
-            if (!tc)
-                continue;
-            if (tc->version() == MaemoToolChain::Maemo5)
+            if (MaemoGlobal::version(qt4Bc->qtVersion()) == MaemoGlobal::Maemo5)
                 m_buildConfigs << qt4Bc;
         }
         break;
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopublishingwizardfactories.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemopublishingwizardfactories.cpp
index b111714f04..4ce00c180b 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemopublishingwizardfactories.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemopublishingwizardfactories.cpp
@@ -32,8 +32,8 @@
 **************************************************************************/
 #include "maemopublishingwizardfactories.h"
 
+#include "maemoglobal.h"
 #include "maemopublishingwizardfremantlefree.h"
-#include "maemotoolchain.h"
 
 #include <projectexplorer/target.h>
 #include <qt4projectmanager/qmakestep.h>
@@ -77,11 +77,7 @@ bool MaemoPublishingWizardFactoryFremantleFree::canCreateWizard(const Project *p
                 = qobject_cast<const Qt4BuildConfiguration *>(bc);
             if (!qt4Bc)
                 continue;
-            const MaemoToolChain * const tc
-                = dynamic_cast<MaemoToolChain *>(qt4Bc->toolChain());
-            if (!tc)
-                continue;
-            if (tc->version() == MaemoToolChain::Maemo5)
+            if (MaemoGlobal::version(qt4Bc->qtVersion()) == MaemoGlobal::Maemo5)
                 return true;
         }
         break;
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp
index e2f93e1549..3afa3a5baa 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp
@@ -38,7 +38,6 @@
 #include "maemoqemuruntimeparser.h"
 #include "maemosettingspages.h"
 #include "maemorunconfiguration.h"
-#include "maemotoolchain.h"
 #include "qtversionmanager.h"
 #include "qt4project.h"
 #include "qt4projectmanagerconstants.h"
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntimeparser.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntimeparser.cpp
index cc3a35e288..8b9e732f39 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntimeparser.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoqemuruntimeparser.cpp
@@ -92,19 +92,14 @@ MaemoQemuRuntimeParser::MaemoQemuRuntimeParser(const QString &madInfoOutput,
 MaemoQemuRuntime MaemoQemuRuntimeParser::parseRuntime(const QtVersion *qtVersion)
 {
     MaemoQemuRuntime runtime;
-    const QString maddeRootPath
-        = MaemoGlobal::maddeRoot(qtVersion->qmakeCommand());
-    const QString madCommand = maddeRootPath + QLatin1String("/bin/mad");
-    if (!QFileInfo(madCommand).exists())
-        return runtime;
+    const QString maddeRootPath = MaemoGlobal::maddeRoot(qtVersion);
     QProcess madProc;
-    MaemoGlobal::callMaddeShellScript(madProc, maddeRootPath, madCommand,
-        QStringList() << QLatin1String("info"));
+    if (!MaemoGlobal::callMad(madProc, QStringList() << QLatin1String("info"), qtVersion))
+        return runtime;
     if (!madProc.waitForStarted() || !madProc.waitForFinished())
         return runtime;
     const QByteArray &madInfoOutput = madProc.readAllStandardOutput();
-    const QString &targetName
-        = MaemoGlobal::targetName(qtVersion->qmakeCommand());
+    const QString &targetName = MaemoGlobal::targetName(qtVersion);
     runtime = MaemoQemuRuntimeParserV2(madInfoOutput, targetName, maddeRootPath)
         .parseRuntime();
     if (!runtime.m_name.isEmpty()) {
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.cpp
index e2bb2b03e4..f1d3502ae0 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.cpp
@@ -34,12 +34,12 @@
 #include "maemoremotemounter.h"
 
 #include "maemoglobal.h"
-#include "maemotoolchain.h"
 #include "maemousedportsgatherer.h"
 
 #include <coreplugin/ssh/sftpchannel.h>
 #include <coreplugin/ssh/sshconnection.h>
 #include <coreplugin/ssh/sshremoteprocess.h>
+#include <qt4projectmanager/qt4buildconfiguration.h>
 #include <utils/qtcassert.h>
 
 #include <QtCore/QTimer>
@@ -70,11 +70,12 @@ void MaemoRemoteMounter::setConnection(const SshConnection::Ptr &connection)
     m_connection = connection;
 }
 
-void MaemoRemoteMounter::setToolchain(const MaemoToolChain *toolChain)
+void MaemoRemoteMounter::setBuildConfiguration(const Qt4BuildConfiguration *bc)
 {
     ASSERT_STATE(Inactive);
-    m_remoteMountsAllowed = toolChain->allowsRemoteMounts();
-    m_maddeRoot = toolChain->maddeRoot();
+    const QtVersion * const qtVersion = bc->qtVersion();
+    m_remoteMountsAllowed = MaemoGlobal::allowsRemoteMounts(qtVersion);
+    m_maddeRoot = MaemoGlobal::maddeRoot(qtVersion);
 }
 
 void MaemoRemoteMounter::addMountSpecification(const MaemoMountSpecification &mountSpec,
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.h b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.h
index b62dff9c87..e3ac5e3649 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoremotemounter.h
@@ -54,8 +54,8 @@ class SshRemoteProcess;
 }
 
 namespace Qt4ProjectManager {
+class Qt4BuildConfiguration;
 namespace Internal {
-class MaemoToolChain;
 class MaemoUsedPortsGatherer;
 
 class MaemoRemoteMounter : public QObject
@@ -68,7 +68,7 @@ public:
     // Must already be connected.
     void setConnection(const QSharedPointer<Core::SshConnection> &connection);
 
-    void setToolchain(const MaemoToolChain *toolChain);
+    void setBuildConfiguration(const Qt4BuildConfiguration *bc);
     void addMountSpecification(const MaemoMountSpecification &mountSpec,
         bool mountAsRoot);
     bool hasValidMountSpecifications() const;
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
index e8b8043b12..48963be250 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
@@ -227,9 +227,7 @@ const MaemoToolChain *MaemoRunConfiguration::toolchain() const
 
 const QString MaemoRunConfiguration::gdbCmd() const
 {
-    if (const MaemoToolChain *tc = toolchain())
-        return QDir::toNativeSeparators(tc->targetRoot() + QLatin1String("/bin/gdb"));
-    return QString();
+    return QDir::toNativeSeparators(targetRoot() + QLatin1String("/bin/gdb"));
 }
 
 MaemoDeployStep *MaemoRunConfiguration::deployStep() const
@@ -241,13 +239,6 @@ MaemoDeployStep *MaemoRunConfiguration::deployStep() const
     return step;
 }
 
-QString MaemoRunConfiguration::maddeRoot() const
-{
-    if (const MaemoToolChain *tc = toolchain())
-        return tc->maddeRoot();
-    return QString();
-}
-
 const QString MaemoRunConfiguration::sysRoot() const
 {
     if (const MaemoToolChain *tc = toolchain())
@@ -257,9 +248,8 @@ const QString MaemoRunConfiguration::sysRoot() const
 
 const QString MaemoRunConfiguration::targetRoot() const
 {
-    if (const MaemoToolChain *tc = toolchain())
-        return tc->targetRoot();
-    return QString();
+    QTC_ASSERT(activeQt4BuildConfiguration(), return QString());
+    return MaemoGlobal::targetRoot(activeQt4BuildConfiguration()->qtVersion());
 }
 
 const QString MaemoRunConfiguration::arguments() const
@@ -331,7 +321,8 @@ MaemoPortList MaemoRunConfiguration::freePorts() const
 
 bool MaemoRunConfiguration::useRemoteGdb() const
 {
-    return m_useRemoteGdb && toolchain()->allowsRemoteMounts();
+    return m_useRemoteGdb
+        && MaemoGlobal::allowsRemoteMounts(activeQt4BuildConfiguration()->qtVersion());
 }
 
 void MaemoRunConfiguration::setArguments(const QString &args)
@@ -341,7 +332,7 @@ void MaemoRunConfiguration::setArguments(const QString &args)
 
 MaemoRunConfiguration::DebuggingType MaemoRunConfiguration::debuggingType() const
 {
-    if (!toolchain() || !toolchain()->allowsQmlDebugging())
+    if (!MaemoGlobal::allowsQmlDebugging(activeQt4BuildConfiguration()->qtVersion()))
         return DebugCppOnly;
     if (useCppDebugger()) {
         if (useQmlDebugger())
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
index 491f6c180a..d3391ef2af 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
@@ -91,7 +91,6 @@ public:
     MaemoRemoteMountsModel *remoteMounts() const { return m_remoteMounts; }
 
     const MaemoToolChain *toolchain() const;
-    QString maddeRoot() const;
     QString localExecutableFilePath() const;
     QString remoteExecutableFilePath() const;
     const QString sysRoot() const;
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
index da20acae0b..641ac6a652 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
@@ -39,10 +39,10 @@
 #include "maemodeviceconfiglistmodel.h"
 #include "maemodeviceenvreader.h"
 #include "maemomanager.h"
+#include "maemoglobal.h"
 #include "maemoremotemountsmodel.h"
 #include "maemorunconfiguration.h"
 #include "maemosettingspages.h"
-#include "maemotoolchain.h"
 
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/icore.h>
@@ -322,12 +322,16 @@ void MaemoRunConfigurationWidget::handleBuildConfigChanged()
 
 void MaemoRunConfigurationWidget::handleToolchainChanged()
 {
-    const MaemoToolChain * const toolChain = m_runConfiguration->toolchain();
-    if (toolChain) {
-        const bool remoteMountsAvailable = toolChain->allowsRemoteMounts();
+    const Qt4BuildConfiguration * const bc
+        = m_runConfiguration->activeQt4BuildConfiguration();
+    if (bc) {
+        const QtVersion * const qtVersion = bc->qtVersion();
+        const bool remoteMountsAvailable
+            = MaemoGlobal::allowsRemoteMounts(qtVersion);
         m_debugDetailsContainer->setVisible(remoteMountsAvailable);
         m_mountDetailsContainer->setVisible(remoteMountsAvailable);
-        const bool qmlDebuggingAvailable = toolChain->allowsQmlDebugging();
+        const bool qmlDebuggingAvailable
+            = MaemoGlobal::allowsQmlDebugging(qtVersion);
         m_debuggingLanguagesLabel->setVisible(qmlDebuggingAvailable);
         m_debugCppOnlyButton->setVisible(qmlDebuggingAvailable);
         m_debugQmlOnlyButton->setVisible(qmlDebuggingAvailable);
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp
index e5f67c5eaf..c61dc72a4d 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp
@@ -36,10 +36,10 @@
 
 #include "maemoconstants.h"
 #include "maemodebugsupport.h"
+#include "maemoglobal.h"
 #include "maemoremotemountsmodel.h"
 #include "maemorunconfiguration.h"
 #include "maemoruncontrol.h"
-#include "maemotoolchain.h"
 
 #include <projectexplorer/projectexplorerconstants.h>
 #include <debugger/debuggerconstants.h>
@@ -169,10 +169,13 @@ bool MaemoRunControlFactory::canRun(RunConfiguration *runConfiguration,
         return false;
     const int freePortCount = maemoRunConfig->freePorts().count();
 
-    if (maemoRunConfig->toolchain()->allowsRemoteMounts() && freePortCount == 0)
+    const QtVersion * const qtVersion
+        = maemoRunConfig->activeQt4BuildConfiguration()->qtVersion();
+    const bool remoteMountsAllowed = MaemoGlobal::allowsRemoteMounts(qtVersion);
+    if (remoteMountsAllowed && freePortCount == 0)
         return false;
     const int mountDirCount
-        = maemoRunConfig->toolchain()->allowsRemoteMounts()
+        = remoteMountsAllowed
             ? maemoRunConfig->remoteMounts()->validMountSpecificationCount()
             : 0;
     if (mode == Debugger::Constants::DEBUGMODE)
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp
index 8e4e0fca97..7eb9f14393 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp
@@ -70,7 +70,7 @@ MaemoSshRunner::MaemoSshRunner(QObject *parent,
       m_state(Inactive)
 {
     m_connection = runConfig->deployStep()->sshConnection();
-    m_mounter->setToolchain(runConfig->toolchain());
+    m_mounter->setBuildConfiguration(runConfig->activeQt4BuildConfiguration());
     if (debugging && runConfig->useRemoteGdb()) {
         m_mountSpecs << MaemoMountSpecification(runConfig->localDirToMountForRemoteGdb(),
             runConfig->remoteProjectSourcesMountPoint());
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemotemplatesmanager.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemotemplatesmanager.cpp
index ea0893c26f..a18fa7cdc2 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemotemplatesmanager.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemotemplatesmanager.cpp
@@ -38,7 +38,6 @@
 #include "maemodeploystep.h"
 #include "maemoglobal.h"
 #include "maemopackagecreationstep.h"
-#include "maemotoolchain.h"
 
 #include <projectexplorer/project.h>
 #include <projectexplorer/projectexplorer.h>
@@ -163,12 +162,6 @@ bool MaemoTemplatesManager::createDebianTemplatesIfNecessary(const ProjectExplor
     Q_ASSERT_X(qt4Target, Q_FUNC_INFO, "Target ID does not match actual type.");
     const Qt4BuildConfiguration * const bc
         = qt4Target->activeBuildConfiguration();
-    const MaemoToolChain * const tc
-        = dynamic_cast<MaemoToolChain *>(bc->toolChain());
-    if (!tc) {
-        qDebug("Maemo target has no Maemo toolchain.");
-        return false;
-    }
     if (!MaemoPackageCreationStep::preparePackagingProcess(&dh_makeProc, bc,
         projectDir.path() + QLatin1Char('/') + PackagingDirName, &error)) {
         raiseError(error);
@@ -182,7 +175,7 @@ bool MaemoTemplatesManager::createDebianTemplatesIfNecessary(const ProjectExplor
     const QString command = QLatin1String("dh_make -s -n -p ")
         + MaemoPackageCreationStep::packageName(project) + QLatin1Char('_')
         + MaemoPackageCreationStep::DefaultVersionNumber;
-    dh_makeProc.start(MaemoPackageCreationStep::packagingCommand(tc, command));
+    dh_makeProc.start(MaemoPackageCreationStep::packagingCommand(bc, command));
     if (!dh_makeProc.waitForStarted()) {
         raiseError(tr("Unable to create Debian templates: dh_make failed (%1)")
             .arg(dh_makeProc.errorString()));
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.cpp
index 2e700e9b33..8950db2107 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.cpp
@@ -32,20 +32,23 @@
 **************************************************************************/
 
 #include "maemotoolchain.h"
+
 #include "maemoconstants.h"
+#include "maemoglobal.h"
 
 #include <QtCore/QDir>
 #include <QtCore/QStringBuilder>
 #include <QtCore/QTextStream>
 
 using namespace ProjectExplorer;
-using namespace Qt4ProjectManager::Internal;
 
-MaemoToolChain::MaemoToolChain(const QString &targetRoot)
-    : GccToolChain(targetRoot % QLatin1String("/bin/gcc"))
-    , m_maddeInitialized(false)
+namespace Qt4ProjectManager {
+namespace Internal {
+
+MaemoToolChain::MaemoToolChain(const QtVersion *qtVersion)
+    : GccToolChain(MaemoGlobal::targetRoot(qtVersion) % QLatin1String("/bin/gcc"))
     , m_sysrootInitialized(false)
-    , m_targetRoot(targetRoot)
+    , m_qtVersion(qtVersion)
 {
 }
 
@@ -60,19 +63,20 @@ ProjectExplorer::ToolChainType MaemoToolChain::type() const
 
 void MaemoToolChain::addToEnvironment(Utils::Environment &env)
 {
+    const QString maddeRoot = MaemoGlobal::maddeRoot(m_qtVersion);
     env.prependOrSetPath(QDir::toNativeSeparators(QString("%1/bin")
-        .arg(maddeRoot())));
+        .arg(maddeRoot)));
     env.prependOrSetPath(QDir::toNativeSeparators(QString("%1/bin")
-        .arg(targetRoot())));
+        .arg(MaemoGlobal::targetRoot(m_qtVersion))));
 
     // put this into environment to make pkg-config stuff work
     env.prependOrSet(QLatin1String("SYSROOT_DIR"), sysrootRoot());
     env.prependOrSetPath(QDir::toNativeSeparators(QString("%1/madbin")
-        .arg(maddeRoot())));
+        .arg(maddeRoot)));
     env.prependOrSetPath(QDir::toNativeSeparators(QString("%1/madlib")
-        .arg(maddeRoot())));
+        .arg(maddeRoot)));
     env.prependOrSet(QLatin1String("PERL5LIB"),
-        QDir::toNativeSeparators(QString("%1/madlib/perl5").arg(maddeRoot())));
+        QDir::toNativeSeparators(QString("%1/madlib/perl5").arg(maddeRoot)));
 }
 
 QString MaemoToolChain::makeCommand() const
@@ -83,31 +87,7 @@ QString MaemoToolChain::makeCommand() const
 bool MaemoToolChain::equals(const ToolChain *other) const
 {
     const MaemoToolChain *toolChain = static_cast<const MaemoToolChain*> (other);
-    return other->type() == type()
-        && toolChain->sysrootRoot() == sysrootRoot()
-        && toolChain->targetRoot() == targetRoot();
-}
-
-QString MaemoToolChain::maddeRoot() const
-{
-    if (!m_maddeInitialized)
-        setMaddeRoot();
-    return m_maddeRoot;
-}
-
-QString MaemoToolChain::madAdminCommand() const
-{
-    return maddeRoot() + QLatin1String("/bin/mad-admin");
-}
-
-QString MaemoToolChain::targetRoot() const
-{
-    return m_targetRoot;
-}
-
-QString MaemoToolChain::targetName() const
-{
-    return QDir(targetRoot()).dirName();
+    return other->type() == type() && toolChain->m_qtVersion == m_qtVersion;
 }
 
 QString MaemoToolChain::sysrootRoot() const
@@ -117,29 +97,10 @@ QString MaemoToolChain::sysrootRoot() const
     return m_sysrootRoot;
 }
 
-MaemoToolChain::MaemoVersion MaemoToolChain::version() const
-{
-    const QString &name = targetName();
-    if (name.startsWith(QLatin1String("fremantle")))
-        return Maemo5;
-    if (name.startsWith(QLatin1String("harmattan")))
-        return Maemo6;
-    qWarning("Unknown Maemo version!");
-    return static_cast<MaemoVersion>(-1);
-}
-
-void MaemoToolChain::setMaddeRoot() const
-{
-    QDir dir(targetRoot());
-    dir.cdUp(); dir.cdUp();
-
-    m_maddeInitialized = true;
-    m_maddeRoot = dir.absolutePath();
-}
-
 void MaemoToolChain::setSysroot() const
 {
-    QFile file(QDir::cleanPath(targetRoot()) + QLatin1String("/information"));
+    QFile file(QDir::cleanPath(MaemoGlobal::targetRoot(m_qtVersion))
+        + QLatin1String("/information"));
     if (file.exists() && file.open(QIODevice::ReadOnly | QIODevice::Text)) {
         QTextStream stream(&file);
         while (!stream.atEnd()) {
@@ -148,11 +109,14 @@ void MaemoToolChain::setSysroot() const
             if (list.count() <= 1)
                 continue;
             if (list.at(0) == QLatin1String("sysroot")) {
-                m_sysrootRoot = maddeRoot() + QLatin1String("/sysroots/")
-                    + list.at(1);
+                m_sysrootRoot = MaemoGlobal::maddeRoot(m_qtVersion)
+                    + QLatin1String("/sysroots/") + list.at(1);
             }
         }
     }
 
     m_sysrootInitialized = true;
 }
+
+} // namespace Internal
+} // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.h b/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.h
index 3627925b05..e8e149a6af 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemotoolchain.h
@@ -37,49 +37,34 @@
 #include <projectexplorer/toolchain.h>
 
 namespace Qt4ProjectManager {
-    class QtVersion;
-    namespace Internal {
+class QtVersion;
+namespace Internal {
 
 class MaemoToolChain : public ProjectExplorer::GccToolChain
 {
 public:
-    MaemoToolChain(const QString &targetRoot);
+    MaemoToolChain(const QtVersion *qtVersion);
     virtual ~MaemoToolChain();
 
     void addToEnvironment(Utils::Environment &env);
     ProjectExplorer::ToolChainType type() const;
     QString makeCommand() const;
 
-    QString maddeRoot() const;
-    QString targetRoot() const;
-    QString targetName() const;
     QString sysrootRoot() const;
-    QString madAdminCommand() const;
-
-    enum MaemoVersion { Maemo5, Maemo6 };
-    MaemoVersion version() const;
-    bool allowsRemoteMounts() const { return version() == Maemo5; }
-    bool allowsPackagingDisabling() const { return version() == Maemo5; }
-    bool allowsQmlDebugging() const { return version() == Maemo6; }
 
 protected:
     bool equals(const ToolChain *other) const;
 
 private:
-    void setMaddeRoot() const;
     void setSysroot() const;
 
 private:
-    mutable QString m_maddeRoot;
-    mutable bool m_maddeInitialized;
-
     mutable QString m_sysrootRoot;
     mutable bool m_sysrootInitialized;
-
-    const QString m_targetRoot;
+    const QtVersion * const m_qtVersion;
 };
 
-    } // namespace Internal
+} // namespace Internal
 } // namespace Qt4ProjectManager
 
 #endif // MAEMOTOOLCHAIN_H
-- 
GitLab