From caa8bd454eeffa629d47238087f85d06e0f3b359 Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Fri, 9 Sep 2011 09:54:37 +0000
Subject: [PATCH] qmake: Warn when using a mkspec that might not work with the
 tool chain

Warn when using a mkspec that might or might not work with the selected
tool chain.

Task-number: QTCREATORBUG-5854
Change-Id: Ifead5108ccd109f66707ad7aa371daead8cb57e7
Reviewed-on: http://codereview.qt-project.org/4522
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
---
 src/plugins/projectexplorer/buildstep.h       |  3 ++
 .../projectexplorer/buildstepspage.cpp        | 15 ++++++++
 src/plugins/projectexplorer/buildstepspage.h  |  1 +
 src/plugins/qt4projectmanager/qmakestep.cpp   | 37 ++++++++++++++++---
 src/plugins/qt4projectmanager/qmakestep.h     |  6 +++
 5 files changed, 57 insertions(+), 5 deletions(-)

diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h
index 0da0279603c..a9b98a7ee26 100644
--- a/src/plugins/projectexplorer/buildstep.h
+++ b/src/plugins/projectexplorer/buildstep.h
@@ -136,9 +136,12 @@ public:
         : QWidget()
         {}
     virtual QString summaryText() const = 0;
+    virtual QString additionalSummaryText() const { return QString(); }
     virtual QString displayName() const = 0;
+
 signals:
     void updateSummary();
+    void updateAdditionalSummary();
 };
 
 } // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp
index 52e742fcd64..27f70167613 100644
--- a/src/plugins/projectexplorer/buildstepspage.cpp
+++ b/src/plugins/projectexplorer/buildstepspage.cpp
@@ -140,6 +140,19 @@ void BuildStepListWidget::updateSummary()
     }
 }
 
+void BuildStepListWidget::updateAdditionalSummary()
+{
+    BuildStepConfigWidget *widget = qobject_cast<BuildStepConfigWidget *>(sender());
+    if (widget) {
+        foreach (const BuildStepsWidgetData *s, m_buildStepsData) {
+            if (s->widget == widget) {
+                s->detailsWidget->setAdditionalSummaryText(widget->additionalSummaryText());
+                break;
+            }
+        }
+    }
+}
+
 void BuildStepListWidget::init(BuildStepList *bsl)
 {
     Q_ASSERT(bsl);
@@ -222,6 +235,8 @@ void BuildStepListWidget::addBuildStepWidget(int pos, BuildStep *step)
 
     connect(s->widget, SIGNAL(updateSummary()),
             this, SLOT(updateSummary()));
+    connect(s->widget, SIGNAL(updateAdditionalSummary()),
+            this, SLOT(updateAdditionalSummary()));
 
     connect(s->upButton, SIGNAL(clicked()),
             m_upMapper, SLOT(map()));
diff --git a/src/plugins/projectexplorer/buildstepspage.h b/src/plugins/projectexplorer/buildstepspage.h
index e770fb8c842..56ddb6874be 100644
--- a/src/plugins/projectexplorer/buildstepspage.h
+++ b/src/plugins/projectexplorer/buildstepspage.h
@@ -85,6 +85,7 @@ private slots:
     void triggerAddBuildStep();
     void addBuildStep(int pos);
     void updateSummary();
+    void updateAdditionalSummary();
     void triggerStepMoveUp(int pos);
     void stepMoved(int from, int to);
     void triggerStepMoveDown(int pos);
diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp
index abecb0d5cb8..f1f8ed0fe88 100644
--- a/src/plugins/qt4projectmanager/qmakestep.cpp
+++ b/src/plugins/qt4projectmanager/qmakestep.cpp
@@ -537,6 +537,11 @@ QString QMakeStepConfigWidget::summaryText() const
     return m_summaryText;
 }
 
+QString QMakeStepConfigWidget::additionalSummaryText() const
+{
+    return m_additionalSummaryText;
+}
+
 QString QMakeStepConfigWidget::displayName() const
 {
     return m_step->displayName();
@@ -664,18 +669,24 @@ void QMakeStepConfigWidget::updateSummaryLabel()
     Qt4BuildConfiguration *qt4bc = m_step->qt4BuildConfiguration();
     QtSupport::BaseQtVersion *qtVersion = qt4bc->qtVersion();
     if (!qtVersion) {
-        m_summaryText = tr("<b>qmake:</b> No Qt version set. Cannot run qmake.");
-        emit updateSummary();
+        setSummaryText(tr("<b>qmake:</b> No Qt version set. Cannot run qmake."));
         return;
     }
-
     // We don't want the full path to the .pro file
     QString args = m_step->allArguments(true);
     // And we only use the .pro filename not the full path
     QString program = QFileInfo(qtVersion->qmakeCommand()).fileName();
-    m_summaryText = tr("<b>qmake:</b> %1 %2").arg(program, args);
-    emit updateSummary();
+    setSummaryText(tr("<b>qmake:</b> %1 %2").arg(program, args));
 
+    ToolChain *tc = qt4bc->toolChain();
+    if (!tc)
+        return;
+
+    QString tcSpec = tc->mkspec();
+    if (!tcSpec.isEmpty() && tcSpec != m_step->mkspec())
+        setAdditionalSummaryText(tr("<b>Warning:</b> The tool chain suggested \"%1\" as mkspec.").arg(tcSpec));
+    else
+        setAdditionalSummaryText(QString());
 }
 
 void QMakeStepConfigWidget::updateQmlDebuggingOption()
@@ -723,6 +734,22 @@ void QMakeStepConfigWidget::recompileMessageBoxFinished(int button)
     }
 }
 
+void QMakeStepConfigWidget::setSummaryText(const QString &text)
+{
+    if (text == m_summaryText)
+        return;
+    m_summaryText = text;
+    emit updateSummary();
+}
+
+void QMakeStepConfigWidget::setAdditionalSummaryText(const QString &text)
+{
+    if (text == m_additionalSummaryText)
+        return;
+    m_additionalSummaryText = text;
+    emit updateAdditionalSummary();
+}
+
 ////
 // QMakeStepFactory
 ////
diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h
index 2a23acbb2e7..0a779fb3d09 100644
--- a/src/plugins/qt4projectmanager/qmakestep.h
+++ b/src/plugins/qt4projectmanager/qmakestep.h
@@ -143,6 +143,7 @@ public:
     QMakeStepConfigWidget(QMakeStep *step);
     ~QMakeStepConfigWidget();
     QString summaryText() const;
+    QString additionalSummaryText() const;
     QString displayName() const;
 private slots:
     // slots for handling buildconfiguration/step signals
@@ -167,9 +168,14 @@ private:
     void updateSummaryLabel();
     void updateQmlDebuggingOption();
     void updateEffectiveQMakeCall();
+
+    void setSummaryText(const QString &);
+    void setAdditionalSummaryText(const QString &);
+
     Ui::QMakeStep *m_ui;
     QMakeStep *m_step;
     QString m_summaryText;
+    QString m_additionalSummaryText;
     bool m_ignoreChange;
 };
 
-- 
GitLab