From f3bdeb8c9abdf10033eab0667574e5fa0d0dfb5c Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Wed, 2 Dec 2009 17:43:43 +0100
Subject: [PATCH] Share the code for determining used qmake arguments.

Move the code that compares the Qt version's debug|release property
with the build configuration's debug|release property
to the new build configuration class.

Reviewed-by: dt
---
 src/plugins/qt4projectmanager/qmakestep.cpp   | 27 +++++++----------
 .../qt-maemo/maemorunconfiguration.cpp        | 29 ++----------------
 .../qt-s60/s60devicerunconfiguration.cpp      | 19 +++---------
 .../qt-s60/s60emulatorrunconfiguration.cpp    | 18 +++--------
 .../qt4buildconfiguration.cpp                 | 30 ++++++++++++++++---
 .../qt4projectmanager/qt4buildconfiguration.h |  6 +++-
 .../qt4projectmanager/qt4runconfiguration.cpp | 18 +++--------
 src/shared/proparser/profileevaluator.cpp     |  2 +-
 src/shared/proparser/profileevaluator.h       |  2 +-
 9 files changed, 59 insertions(+), 92 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp
index ab5d39075c2..b28ee2e2d3c 100644
--- a/src/plugins/qt4projectmanager/qmakestep.cpp
+++ b/src/plugins/qt4projectmanager/qmakestep.cpp
@@ -87,22 +87,17 @@ QStringList QMakeStep::allArguments()
         arguments << QLatin1String("-unix");
 #endif
 
-    if (bc->value("buildConfiguration").isValid()) {
-        QStringList configarguments;
-        QtVersion::QmakeBuildConfigs defaultBuildConfiguration = bc->qtVersion()->defaultBuildConfig();
-        QtVersion::QmakeBuildConfigs projectBuildConfiguration = QtVersion::QmakeBuildConfig(bc->value("buildConfiguration").toInt());
-        if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll))
-            configarguments << "CONFIG-=debug_and_release";
-        if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (projectBuildConfiguration & QtVersion::BuildAll))
-            configarguments << "CONFIG+=debug_and_release";
-        if ((defaultBuildConfiguration & QtVersion::DebugBuild) && !(projectBuildConfiguration & QtVersion::DebugBuild))
-            configarguments << "CONFIG+=release";
-        if (!(defaultBuildConfiguration & QtVersion::DebugBuild) && (projectBuildConfiguration & QtVersion::DebugBuild))
-            configarguments << "CONFIG+=debug";
-        if (!configarguments.isEmpty())
-            arguments << configarguments;
-    } else {
-        qWarning()<< "The project should always have a qmake build configuration set";
+    // Find out what flags we pass on to qmake
+    QStringList addedUserConfigArguments;
+    QStringList removedUserConfigArguments;
+    bc->getConfigCommandLineArguments(&addedUserConfigArguments, &removedUserConfigArguments);
+    if (!removedUserConfigArguments.isEmpty()) {
+        foreach (const QString &removedConfig, removedUserConfigArguments)
+            arguments.append("CONFIG-=" + removedConfig);
+    }
+    if (!addedUserConfigArguments.isEmpty()) {
+        foreach (const QString &addedConfig, addedUserConfigArguments)
+            arguments.append("CONFIG+=" + addedConfig);
     }
 
     if (!additonalArguments.isEmpty())
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
index 7691d0d1168..6a39e22c16d 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
@@ -565,34 +565,11 @@ void MaemoRunConfiguration::updateTarget()
         reader->setCumulative(false);
         reader->setQtVersion(qtVersion);
 
-        // Find out what flags we pass on to qmake, this code is duplicated in
-        // the qmake step
-        QtVersion::QmakeBuildConfigs defaultBuildConfiguration =
-            qtVersion->defaultBuildConfig();
-        QtVersion::QmakeBuildConfig projectBuildConfiguration =
-            QtVersion::QmakeBuildConfig(qt4Project->activeBuildConfiguration()
-                ->value("buildConfiguration").toInt());
-
+        // Find out what flags we pass on to qmake
         QStringList addedUserConfigArguments;
         QStringList removedUserConfigArguments;
-        if ((defaultBuildConfiguration & QtVersion::BuildAll)
-            && !(projectBuildConfiguration & QtVersion::BuildAll))
-            removedUserConfigArguments << "debug_and_release";
-
-        if (!(defaultBuildConfiguration & QtVersion::BuildAll)
-            && (projectBuildConfiguration & QtVersion::BuildAll))
-            addedUserConfigArguments << "debug_and_release";
-
-        if ((defaultBuildConfiguration & QtVersion::DebugBuild)
-            && !(projectBuildConfiguration & QtVersion::DebugBuild))
-            addedUserConfigArguments << "release";
-
-        if (!(defaultBuildConfiguration & QtVersion::DebugBuild)
-            && (projectBuildConfiguration & QtVersion::DebugBuild))
-            addedUserConfigArguments << "debug";
-
-        reader->setUserConfigCmdArgs(addedUserConfigArguments,
-            removedUserConfigArguments);
+        qt4bc->getConfigCommandLineArguments(&addedUserConfigArguments, &removedUserConfigArguments);
+        reader->setConfigCommandLineArguments(addedUserConfigArguments, removedUserConfigArguments);
 
         if (!reader->readProFile(m_proFilePath)) {
             delete reader;
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
index cefe094fab0..07203248d37 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
@@ -286,22 +286,11 @@ void S60DeviceRunConfiguration::updateTarget()
     reader->setCumulative(false);
     reader->setQtVersion(qtVersion);
 
-    // Find out what flags we pass on to qmake, this code is duplicated in the qmake step
-    QtVersion::QmakeBuildConfigs defaultBuildConfiguration = qtVersion->defaultBuildConfig();
-    QtVersion::QmakeBuildConfigs projectBuildConfiguration =
-            QtVersion::QmakeBuildConfigs(qt4bc->value("buildConfiguration").toInt());
+    // Find out what flags we pass on to qmake
     QStringList addedUserConfigArguments;
     QStringList removedUserConfigArguments;
-    if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll))
-        removedUserConfigArguments << "debug_and_release";
-    if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (projectBuildConfiguration & QtVersion::BuildAll))
-        addedUserConfigArguments << "debug_and_release";
-    if ((defaultBuildConfiguration & QtVersion::DebugBuild) && !(projectBuildConfiguration & QtVersion::DebugBuild))
-        addedUserConfigArguments << "release";
-    if (!(defaultBuildConfiguration & QtVersion::DebugBuild) && (projectBuildConfiguration & QtVersion::DebugBuild))
-        addedUserConfigArguments << "debug";
-
-    reader->setUserConfigCmdArgs(addedUserConfigArguments, removedUserConfigArguments);
+    qt4bc->getConfigCommandLineArguments(&addedUserConfigArguments, &removedUserConfigArguments);
+    reader->setConfigCommandLineArguments(addedUserConfigArguments, removedUserConfigArguments);
 
     if (!reader->readProFile(m_proFilePath)) {
         delete reader;
@@ -346,7 +335,7 @@ void S60DeviceRunConfiguration::updateTarget()
         m_platform = QLatin1String("armv6");
         break;
     }
-    if (projectBuildConfiguration & QtVersion::DebugBuild)
+    if (qt4bc->qmakeBuildConfiguration() & QtVersion::DebugBuild)
         m_target = QLatin1String("udeb");
     else
         m_target = QLatin1String("urel");
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
index eb63185f30b..54922b5e4d3 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
@@ -133,21 +133,11 @@ void S60EmulatorRunConfiguration::updateTarget()
     reader->setCumulative(false);
     reader->setQtVersion(qtVersion);
 
-    // Find out what flags we pass on to qmake, this code is duplicated in the qmake step
-    QtVersion::QmakeBuildConfigs defaultBuildConfiguration = qtVersion->defaultBuildConfig();
-    QtVersion::QmakeBuildConfigs projectBuildConfiguration = QtVersion::QmakeBuildConfig(qt4bc->value("buildConfiguration").toInt());
+    // Find out what flags we pass on to qmake
     QStringList addedUserConfigArguments;
     QStringList removedUserConfigArguments;
-    if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll))
-        removedUserConfigArguments << "debug_and_release";
-    if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (projectBuildConfiguration & QtVersion::BuildAll))
-        addedUserConfigArguments << "debug_and_release";
-    if ((defaultBuildConfiguration & QtVersion::DebugBuild) && !(projectBuildConfiguration & QtVersion::DebugBuild))
-        addedUserConfigArguments << "release";
-    if (!(defaultBuildConfiguration & QtVersion::DebugBuild) && (projectBuildConfiguration & QtVersion::DebugBuild))
-        addedUserConfigArguments << "debug";
-
-    reader->setUserConfigCmdArgs(addedUserConfigArguments, removedUserConfigArguments);
+    qt4bc->getConfigCommandLineArguments(&addedUserConfigArguments, &removedUserConfigArguments);
+    reader->setConfigCommandLineArguments(addedUserConfigArguments, removedUserConfigArguments);
 
     if (!reader->readProFile(m_proFilePath)) {
         delete reader;
@@ -157,7 +147,7 @@ void S60EmulatorRunConfiguration::updateTarget()
 
     QString baseDir = S60Manager::instance()->deviceForQtVersion(qtVersion).epocRoot;
     QString qmakeBuildConfig = "urel";
-    if (projectBuildConfiguration & QtVersion::DebugBuild)
+    if (qt4bc->qmakeBuildConfiguration() & QtVersion::DebugBuild)
         qmakeBuildConfig = "udeb";
     baseDir += "/epoc32/release/winscw/" + qmakeBuildConfig;
 
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
index c12d4056a2f..0a6c779c4e3 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
@@ -133,7 +133,7 @@ QString Qt4BuildConfiguration::makeCommand() const
 }
 
 #ifdef QTCREATOR_WITH_S60
-static inline QString symbianMakeTarget(QtVersion::QmakeBuildConfig buildConfig,
+static inline QString symbianMakeTarget(QtVersion::QmakeBuildConfigs buildConfig,
                                         const QString &type)
 {
     QString rc = (buildConfig & QtVersion::DebugBuild) ?
@@ -149,8 +149,7 @@ QString Qt4BuildConfiguration::defaultMakeTarget() const
     ToolChain *tc = toolChain();
     if (!tc)
         return QString::null;
-    const QtVersion::QmakeBuildConfig buildConfig
-            = QtVersion::QmakeBuildConfig(value("buildConfiguration").toInt());
+    const QtVersion::QmakeBuildConfigs buildConfig = qmakeBuildConfiguration();
 
     switch (tc->type()) {
     case ToolChain::GCCE:
@@ -279,7 +278,7 @@ bool Qt4BuildConfiguration::compareToImportFrom(const QString &workingDirectory)
             // same qtversion
             QPair<QtVersion::QmakeBuildConfigs, QStringList> result =
                     QtVersionManager::scanMakeFile(workingDirectory, version->defaultBuildConfig());
-            if (QtVersion::QmakeBuildConfig(value("buildConfiguration").toInt()) == result.first) {
+            if (qmakeBuildConfiguration() == result.first) {
                 // The QMake Build Configuration are the same,
                 // now compare arguments lists
                 // we have to compare without the spec/platform cmd argument
@@ -402,3 +401,26 @@ QString Qt4BuildConfiguration::extractSpecFromArgumentList(const QStringList &li
     return parsedSpec;
 
 }
+
+QtVersion::QmakeBuildConfigs Qt4BuildConfiguration::qmakeBuildConfiguration() const
+{
+    return QtVersion::QmakeBuildConfigs(value("buildConfiguration").toInt());
+}
+
+void Qt4BuildConfiguration::getConfigCommandLineArguments(QStringList *addedUserConfigs, QStringList *removedUserConfigs) const
+{
+    QtVersion::QmakeBuildConfigs defaultBuildConfiguration = qtVersion()->defaultBuildConfig();
+    QtVersion::QmakeBuildConfigs userBuildConfiguration = qmakeBuildConfiguration();
+    if (removedUserConfigs) {
+        if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(userBuildConfiguration & QtVersion::BuildAll))
+            (*removedUserConfigs) << "debug_and_release";
+    }
+    if (addedUserConfigs) {
+        if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (userBuildConfiguration & QtVersion::BuildAll))
+            (*addedUserConfigs) << "debug_and_release";
+        if ((defaultBuildConfiguration & QtVersion::DebugBuild) && !(userBuildConfiguration & QtVersion::DebugBuild))
+            (*addedUserConfigs) << "release";
+        if (!(defaultBuildConfiguration & QtVersion::DebugBuild) && (userBuildConfiguration & QtVersion::DebugBuild))
+            (*addedUserConfigs) << "debug";
+    }
+}
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
index 378876ed930..efa57bd37ab 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
@@ -30,13 +30,14 @@
 #ifndef QT4BUILDCONFIGURATION_H
 #define QT4BUILDCONFIGURATION_H
 
+#include "qtversionmanager.h"
+
 #include <projectexplorer/buildconfiguration.h>
 #include <projectexplorer/toolchain.h>
 
 namespace Qt4ProjectManager {
 
 class Qt4Project;
-class QtVersion;
 class QMakeStep;
 class MakeStep;
 
@@ -98,6 +99,9 @@ public:
     static QStringList removeSpecFromArgumentList(const QStringList &old);
     static QString extractSpecFromArgumentList(const QStringList &list, QString directory, QtVersion *version);
 
+    QtVersion::QmakeBuildConfigs qmakeBuildConfiguration() const;
+    void getConfigCommandLineArguments(QStringList *addedUserConfigs, QStringList *removedUserConfigs) const;
+
 signals:
     void qtVersionChanged();
 };
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
index c6ef301676f..07ce7ceafdd 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
@@ -574,21 +574,11 @@ void Qt4RunConfiguration::updateTarget()
     reader->setCumulative(false);
     reader->setQtVersion(qt4bc->qtVersion());
 
-    // Find out what flags we pass on to qmake, this code is duplicated in the qmake step
-    QtVersion::QmakeBuildConfigs defaultBuildConfiguration = qt4bc->qtVersion()->defaultBuildConfig();
-    QtVersion::QmakeBuildConfigs projectBuildConfiguration = QtVersion::QmakeBuildConfig(qt4bc->value("buildConfiguration").toInt());
+    // Find out what flags we pass on to qmake
     QStringList addedUserConfigArguments;
     QStringList removedUserConfigArguments;
-    if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll))
-        removedUserConfigArguments << "debug_and_release";
-    if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (projectBuildConfiguration & QtVersion::BuildAll))
-        addedUserConfigArguments << "debug_and_release";
-    if ((defaultBuildConfiguration & QtVersion::DebugBuild) && !(projectBuildConfiguration & QtVersion::DebugBuild))
-        addedUserConfigArguments << "release";
-    if (!(defaultBuildConfiguration & QtVersion::DebugBuild) && (projectBuildConfiguration & QtVersion::DebugBuild))
-        addedUserConfigArguments << "debug";
-
-    reader->setUserConfigCmdArgs(addedUserConfigArguments, removedUserConfigArguments);
+    qt4bc->getConfigCommandLineArguments(&addedUserConfigArguments, &removedUserConfigArguments);
+    reader->setConfigCommandLineArguments(addedUserConfigArguments, removedUserConfigArguments);
 
     if (!reader->readProFile(m_proFilePath)) {
         delete reader;
@@ -618,7 +608,7 @@ void Qt4RunConfiguration::updateTarget()
         if (reader->values("CONFIG").contains("debug_and_release_target")) {
             //qDebug()<<"reader has debug_and_release_target";
             QString qmakeBuildConfig = "release";
-            if (projectBuildConfiguration & QtVersion::DebugBuild)
+            if (qt4bc->qmakeBuildConfiguration() & QtVersion::DebugBuild)
                 qmakeBuildConfig = "debug";
             if (!reader->contains("DESTDIR"))
                 m_workingDir += QLatin1Char('/') + qmakeBuildConfig;
diff --git a/src/shared/proparser/profileevaluator.cpp b/src/shared/proparser/profileevaluator.cpp
index 6834cb2a074..0b48e57693b 100644
--- a/src/shared/proparser/profileevaluator.cpp
+++ b/src/shared/proparser/profileevaluator.cpp
@@ -3068,7 +3068,7 @@ void ProFileEvaluator::setOutputDir(const QString &dir)
     d->m_outputDir = dir;
 }
 
-void ProFileEvaluator::setUserConfigCmdArgs(const QStringList &addUserConfigCmdArgs, const QStringList &removeUserConfigCmdArgs)
+void ProFileEvaluator::setConfigCommandLineArguments(const QStringList &addUserConfigCmdArgs, const QStringList &removeUserConfigCmdArgs)
 {
     d->m_addUserConfigCmdArgs = addUserConfigCmdArgs;
     d->m_removeUserConfigCmdArgs = removeUserConfigCmdArgs;
diff --git a/src/shared/proparser/profileevaluator.h b/src/shared/proparser/profileevaluator.h
index 691dd78e02b..eae3ce197ab 100644
--- a/src/shared/proparser/profileevaluator.h
+++ b/src/shared/proparser/profileevaluator.h
@@ -112,7 +112,7 @@ public:
 
     // -nocache, -cache, -spec, QMAKESPEC
     // -set persistent value
-    void setUserConfigCmdArgs(const QStringList &addUserConfigCmdArgs, const QStringList &removeUserConfigCmdArgs);
+    void setConfigCommandLineArguments(const QStringList &addUserConfigCmdArgs, const QStringList &removeUserConfigCmdArgs);
     void setParsePreAndPostFiles(bool on); // Default is true
 
     bool queryProFile(ProFile *pro);
-- 
GitLab