summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2016-05-12 17:23:03 +0200
committerTobias Hunger <tobias.hunger@qt.io>2016-05-20 11:52:17 +0000
commitfd761cd79056659f55ffe600cac499044a96e74c (patch)
treef696dd67bce0be475cf66921432bdd42d352c4f6
parent510045422205fcff7b70ad2b32044347f402af25 (diff)
downloadqt-creator-fd761cd79056659f55ffe600cac499044a96e74c.tar.gz
CMake: Warn if kit settings are overridden by the project
Change-Id: I8f01b267f27617d6561124d173ac2e5ae5b9f4d6 Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp29
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h4
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp39
-rw-r--r--src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.h3
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp10
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeconfigitem.h3
6 files changed, 79 insertions, 9 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
index 57f8c36303..d6d274d956 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
@@ -300,6 +300,22 @@ static CMakeConfig removeDuplicates(const CMakeConfig &config)
void CMakeBuildConfiguration::setCMakeConfiguration(const CMakeConfig &config)
{
m_configuration = removeDuplicates(config);
+
+ const Kit *k = target()->kit();
+ CMakeConfig kitConfig = CMakeConfigurationKitInformation::configuration(k);
+ bool hasKitOverride = false;
+ foreach (const CMakeConfigItem &i, m_configuration) {
+ const QString b = CMakeConfigItem::expandedValueOf(k, i.key, kitConfig);
+ if (!b.isNull() && i.expandedValue(k) != b) {
+ hasKitOverride = true;
+ break;
+ }
+ }
+
+ if (hasKitOverride)
+ setWarning(tr("CMake Configuration set by the Kit was overridden in the project."));
+ else
+ setWarning(QString());
}
CMakeConfig CMakeBuildConfiguration::cmakeConfiguration() const
@@ -316,11 +332,24 @@ void CMakeBuildConfiguration::setError(const QString &message)
emit errorOccured(m_error);
}
+void CMakeBuildConfiguration::setWarning(const QString &message)
+{
+ if (m_warning == message)
+ return;
+ m_warning = message;
+ emit warningOccured(m_warning);
+}
+
QString CMakeBuildConfiguration::error() const
{
return m_error;
}
+QString CMakeBuildConfiguration::warning() const
+{
+ return m_warning;
+}
+
ProjectExplorer::NamedWidget *CMakeBuildConfiguration::createConfigWidget()
{
return new CMakeBuildSettingsWidget(this);
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
index 01a6910240..fa59e677a4 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
@@ -68,6 +68,7 @@ public:
CMakeConfig cmakeConfiguration() const;
QString error() const;
+ QString warning() const;
BuildDirManager *buildDirManager() const;
@@ -83,6 +84,7 @@ public:
signals:
void errorOccured(const QString &message);
+ void warningOccured(const QString &message);
void parsingStarted();
void dataAvailable();
@@ -97,9 +99,11 @@ private:
void setCurrentCMakeConfiguration(const QList<ConfigModel::DataItem> &items);
void setError(const QString &message);
+ void setWarning(const QString &message);
CMakeConfig m_configuration;
QString m_error;
+ QString m_warning;
mutable QList<CMakeConfigItem> m_completeConfigurationCache;
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp
index 1fa335b8bd..2e1eae5709 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.cpp
@@ -109,6 +109,17 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
mainLayout->addLayout(boxLayout, row, 0, 1, 3, Qt::AlignHCenter);
++row;
+ m_warningLabel = new QLabel;
+ m_warningLabel->setPixmap(Core::Icons::WARNING.pixmap());
+ m_warningLabel->setVisible(false);
+ m_warningMessageLabel = new QLabel;
+ m_warningMessageLabel->setVisible(false);
+ auto boxLayout2 = new QHBoxLayout;
+ boxLayout2->addWidget(m_warningLabel);
+ boxLayout2->addWidget(m_warningMessageLabel);
+ mainLayout->addLayout(boxLayout2, row, 0, 1, 3, Qt::AlignHCenter);
+
+ ++row;
mainLayout->addItem(new QSpacerItem(20, 10), row, 0);
++row;
@@ -161,6 +172,7 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
updateAdvancedCheckBox();
setError(bc->error());
+ setWarning(bc->warning());
connect(project, &CMakeProject::parsingStarted, this, [this]() {
updateButtonState();
@@ -203,22 +215,33 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
});
connect(bc, &CMakeBuildConfiguration::errorOccured, this, &CMakeBuildSettingsWidget::setError);
+ connect(bc, &CMakeBuildConfiguration::warningOccured, this, &CMakeBuildSettingsWidget::setWarning);
}
void CMakeBuildSettingsWidget::setError(const QString &message)
{
- bool showWarning = !message.isEmpty();
- m_errorLabel->setVisible(showWarning);
+ bool showError = !message.isEmpty();
+ m_errorLabel->setVisible(showError);
m_errorLabel->setToolTip(message);
- m_errorMessageLabel->setVisible(showWarning);
+ m_errorMessageLabel->setVisible(showError);
m_errorMessageLabel->setText(message);
m_errorMessageLabel->setToolTip(message);
- m_configView->setVisible(!showWarning);
- m_editButton->setVisible(!showWarning);
- m_resetButton->setVisible(!showWarning);
- m_showAdvancedCheckBox->setVisible(!showWarning);
- m_reconfigureButton->setVisible(!showWarning);
+ m_configView->setVisible(!showError);
+ m_editButton->setVisible(!showError);
+ m_resetButton->setVisible(!showError);
+ m_showAdvancedCheckBox->setVisible(!showError);
+ m_reconfigureButton->setVisible(!showError);
+}
+
+void CMakeBuildSettingsWidget::setWarning(const QString &message)
+{
+ bool showWarning = !message.isEmpty();
+ m_warningLabel->setVisible(showWarning);
+ m_warningLabel->setToolTip(message);
+ m_warningMessageLabel->setVisible(showWarning);
+ m_warningMessageLabel->setText(message);
+ m_warningMessageLabel->setToolTip(message);
}
void CMakeBuildSettingsWidget::updateButtonState()
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.h b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.h
index af09ac323e..3ea2b984f5 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.h
+++ b/src/plugins/cmakeprojectmanager/cmakebuildsettingswidget.h
@@ -54,6 +54,7 @@ public:
CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc);
void setError(const QString &message);
+ void setWarning(const QString &message);
private:
void updateButtonState();
@@ -70,7 +71,9 @@ private:
QPushButton *m_reconfigureButton;
QTimer m_showProgressTimer;
QLabel *m_errorLabel;
+ QLabel *m_warningLabel;
QLabel *m_errorMessageLabel;
+ QLabel *m_warningMessageLabel;
};
} // namespace Internal
diff --git a/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp b/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
index 65d55bc217..85b442fc64 100644
--- a/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
@@ -63,6 +63,16 @@ QByteArray CMakeConfigItem::valueOf(const QByteArray &key, const QList<CMakeConf
return QByteArray();
}
+QString CMakeConfigItem::expandedValueOf(const ProjectExplorer::Kit *k, const QByteArray &key,
+ const QList<CMakeConfigItem> &input)
+{
+ for (auto it = input.constBegin(); it != input.constEnd(); ++it) {
+ if (it->key == key)
+ return it->expandedValue(k);
+ }
+ return QString();
+}
+
QString CMakeConfigItem::expandedValue(const ProjectExplorer::Kit *k) const
{
return k->macroExpander()->expand(QString::fromUtf8(value));
diff --git a/src/plugins/cmakeprojectmanager/cmakeconfigitem.h b/src/plugins/cmakeprojectmanager/cmakeconfigitem.h
index 86cfc17971..616bbb4fc2 100644
--- a/src/plugins/cmakeprojectmanager/cmakeconfigitem.h
+++ b/src/plugins/cmakeprojectmanager/cmakeconfigitem.h
@@ -43,7 +43,8 @@ public:
CMakeConfigItem(const QByteArray &k, const QByteArray &v);
static QByteArray valueOf(const QByteArray &key, const QList<CMakeConfigItem> &input);
-
+ static QString expandedValueOf(const ProjectExplorer::Kit *k, const QByteArray &key,
+ const QList<CMakeConfigItem> &input);
bool isNull() const { return key.isEmpty(); }
QString expandedValue(const ProjectExplorer::Kit *k) const;