From f35a0f5429f0813aed3969f9a3cbe549ca392b5e Mon Sep 17 00:00:00 2001
From: dt <qtc-committer@nokia.com>
Date: Mon, 27 Jul 2009 15:02:34 +0200
Subject: [PATCH] Some steps towards making qmakestep and makestep not
 mandotary.

Also fix a small bug with the import label.
---
 src/plugins/qt4projectmanager/qmakestep.cpp   |  2 +-
 src/plugins/qt4projectmanager/qt4project.cpp  | 15 ++++++-----
 .../qt4projectconfigwidget.cpp                | 25 +++++++++++++------
 3 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp
index 41b32669a12..a83a4f7ee71 100644
--- a/src/plugins/qt4projectmanager/qmakestep.cpp
+++ b/src/plugins/qt4projectmanager/qmakestep.cpp
@@ -116,7 +116,7 @@ bool QMakeStep::init(const QString &name)
     if (QDir(workingDirectory).exists(QLatin1String("Makefile"))) {
         QString qtPath = QtVersionManager::findQtVersionFromMakefile(workingDirectory);
         if (qtVersion->path() == qtPath) {
-            needToRunQMake = m_pro->compareBuildConfigurationToImportFrom(name, workingDirectory);
+            needToRunQMake = !m_pro->compareBuildConfigurationToImportFrom(name, workingDirectory);
         }
     }
 
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index aff561c9433..957ef651163 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -724,7 +724,7 @@ void Qt4Project::addDefaultBuild()
         // Migrate settings
         QMakeStep *qs = qmakeStep();
         foreach (const QString &buildConfiguration, buildConfigurations()) {
-            QVariant v = qs->value(buildConfiguration, "buildConfiguration");
+            QVariant v = qs ? qs->value(buildConfiguration, "buildConfiguration") : QVariant();
             if (v.isValid()) {
                 qs->setValue(buildConfiguration, "buildConfiguration", QVariant());
                 setValue(buildConfiguration, "buildConfiguration", v);
@@ -736,6 +736,7 @@ void Qt4Project::addDefaultBuild()
             }
         }
 
+
         // Restoring configuration
         foreach(const QString &bc, buildConfigurations()) {
             setValue(bc, "addQDumper", QVariant());
@@ -1137,9 +1138,11 @@ QString Qt4Project::extractSpecFromArgumentList(const QStringList &list)
         return QString();
 }
 
+// returns true if both are equal
 bool Qt4Project::compareBuildConfigurationToImportFrom(const QString &buildConfiguration, const QString &workingDirectory)
 {
-    if (QDir(workingDirectory).exists(QLatin1String("Makefile"))) {
+    QMakeStep *qs = qmakeStep();
+    if (QDir(workingDirectory).exists(QLatin1String("Makefile")) && qs) {
         QString qtPath = QtVersionManager::findQtVersionFromMakefile(workingDirectory);
         QtVersion *version = qtVersion(buildConfiguration);
         if (version->path() == qtPath) {
@@ -1151,7 +1154,7 @@ bool Qt4Project::compareBuildConfigurationToImportFrom(const QString &buildConfi
                 // now compare arguments lists
                 // we have to compare without the spec/platform cmd argument
                 // and compare that on its own
-                QString actualSpec = extractSpecFromArgumentList(qmakeStep()->value(buildConfiguration, "qmakeArgs").toStringList());
+                QString actualSpec = extractSpecFromArgumentList(qs->value(buildConfiguration, "qmakeArgs").toStringList());
                 if (actualSpec.isEmpty())
                     actualSpec = version->mkspec();
                 QString parsedSpec = extractSpecFromArgumentList(result.second);
@@ -1176,7 +1179,7 @@ bool Qt4Project::compareBuildConfigurationToImportFrom(const QString &buildConfi
                 if (QFileInfo(parsedSpec).isRelative())
                     parsedSpec = QDir::cleanPath(workingDirectory + "/" + parsedSpec);
 
-                QStringList actualArgs = removeSpecFromArgumentList(qmakeStep()->value(buildConfiguration, "qmakeArgs").toStringList());
+                QStringList actualArgs = removeSpecFromArgumentList(qs->value(buildConfiguration, "qmakeArgs").toStringList());
                 QStringList parsedArgs = removeSpecFromArgumentList(result.second);
 
 #ifdef Q_OS_WIN
@@ -1190,11 +1193,11 @@ bool Qt4Project::compareBuildConfigurationToImportFrom(const QString &buildConfi
                 qDebug()<<"Parsed spec:"<<parsedSpec;
 
                 if (actualArgs == parsedArgs && actualSpec == parsedSpec)
-                    return false;
+                    return true;
             }
         }
     }
-    return true;
+    return false;
 }
 
 
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
index e3bb5c6dafa..9b39de9fdb1 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
@@ -201,16 +201,23 @@ void Qt4ProjectConfigWidget::updateImportLabel()
 {
     bool visible = false;
 
-    QString qtPath = QtVersionManager::findQtVersionFromMakefile(m_pro->buildDirectory(m_buildConfiguration));
-    QtVersion *version = m_pro->qtVersion(m_buildConfiguration);
-    if (!qtPath.isEmpty()) {
-        if (qtPath != (version ? version->path() : QString())) {
-            visible = true;
+    // we only show if we actually have a qmake and makestep
+    if (m_pro->qmakeStep() && m_pro->makeStep()) {
+        QString qtPath = QtVersionManager::findQtVersionFromMakefile(m_pro->buildDirectory(m_buildConfiguration));
+        QtVersion *version = m_pro->qtVersion(m_buildConfiguration);
+        // check that there's a makefile
+        if (!qtPath.isEmpty()) {
+            // and that the makefile path is different from the current version
+            if (qtPath != (version ? version->path() : QString())) {
+                // import enable
+                visible = true;
+            } else {
+                // check that the qmake flags, arguments match
+                visible = !m_pro->compareBuildConfigurationToImportFrom(m_buildConfiguration, m_pro->buildDirectory(m_buildConfiguration));
+            }
         } else {
-            visible = !m_pro->compareBuildConfigurationToImportFrom(m_buildConfiguration, m_pro->buildDirectory(m_buildConfiguration));
+            visible = false;
         }
-    } else {
-        visible = false;
     }
 
     m_ui->importLabel->setVisible(visible);
@@ -231,6 +238,8 @@ void Qt4ProjectConfigWidget::shadowBuildLineEditTextChanged()
 
 void Qt4ProjectConfigWidget::importLabelClicked()
 {
+    if (!m_pro->qmakeStep() || !m_pro->makeStep())
+        return;
     QString directory = m_pro->buildDirectory(m_buildConfiguration);
     if (!directory.isEmpty()) {
         QString qtPath = QtVersionManager::findQtVersionFromMakefile(directory);
-- 
GitLab