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