diff --git a/src/plugins/qt4projectmanager/projectloadwizard.cpp b/src/plugins/qt4projectmanager/projectloadwizard.cpp index 61f03aeff2b124da93b93165080fc20c9caa5821..5dd202f5f7bda3e32aef0c8c3010ea8099becb5f 100644 --- a/src/plugins/qt4projectmanager/projectloadwizard.cpp +++ b/src/plugins/qt4projectmanager/projectloadwizard.cpp @@ -66,6 +66,18 @@ ProjectLoadWizard::ProjectLoadWizard(Qt4Project *project, QWidget *parent, Qt::W QtVersionManager::scanMakeFile(directory, m_importVersion->defaultBuildConfig()); m_importBuildConfig = result.first; m_additionalArguments = result.second; + + QString versionSpec = m_importVersion->sourcePath() + "/mkspecs/" + m_importVersion->mkspec(); + QString parsedSpec = Qt4Project::extractSpecFromArgumentList(m_additionalArguments); + QString parsedSpecOrginal = parsedSpec; + if (QFileInfo(parsedSpec).isRelative()) + parsedSpec = QDir::cleanPath(directory + "/" + parsedSpec); + m_additionalArguments = Qt4Project::removeSpecFromArgumentList(m_additionalArguments); + if (parsedSpec != versionSpec) { + m_additionalArguments.prepend(parsedSpecOrginal); + m_additionalArguments.prepend("-spec"); + } + } // So now we have the version and the configuration for that version diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 338621b248c3bdfa9dd42a901ac458e73a125e35..acb72a14b7dfd4453f593c95fab2d933edcf03ae 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -1106,7 +1106,7 @@ void Qt4Project::invalidateCachedTargetInformation() // intelligent matching for -cache, but i guess people rarely // do use that. -QStringList removeSpecFromArgumentList(const QStringList &old) +QStringList Qt4Project::removeSpecFromArgumentList(const QStringList &old) { if (!old.contains("-spec") && !old.contains("-platform") && !old.contains("-cache")) return old; @@ -1128,7 +1128,7 @@ QStringList removeSpecFromArgumentList(const QStringList &old) return newList; } -QString extractSpecFromArgumentList(const QStringList &list) +QString Qt4Project::extractSpecFromArgumentList(const QStringList &list) { int index = list.indexOf("-spec"); if (index == -1) @@ -1157,7 +1157,7 @@ bool Qt4Project::compareBuildConfigurationToImportFrom(const QString &buildConfi // and compare that on its own QString actualSpec = extractSpecFromArgumentList(qmakeStep()->value(buildConfiguration, "qmakeArgs").toStringList()); if (actualSpec.isEmpty()) - actualSpec = qtVersion(buildConfiguration)->mkspec(); + actualSpec = version->mkspec(); QString parsedSpec = extractSpecFromArgumentList(result.second); // Now to convert the actualSpec to a absolute path, we go through a few hops @@ -1180,7 +1180,6 @@ bool Qt4Project::compareBuildConfigurationToImportFrom(const QString &buildConfi if (QFileInfo(parsedSpec).isRelative()) parsedSpec = QDir::cleanPath(workingDirectory + "/" + parsedSpec); - qDebug()<<"before:"<<qmakeStep()->value(buildConfiguration, "qmakeArgs").toStringList(); QStringList actualArgs = removeSpecFromArgumentList(qmakeStep()->value(buildConfiguration, "qmakeArgs").toStringList()); qDebug()<<"after:"<<actualArgs; diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h index c6319f6dbb229cf4cd02f77498ac518f42f76295..f34bf81f2a4f4dbf73d632797daeebcf26d5d258 100644 --- a/src/plugins/qt4projectmanager/qt4project.h +++ b/src/plugins/qt4projectmanager/qt4project.h @@ -198,6 +198,8 @@ public: bool compareBuildConfigurationToImportFrom(const QString &buildConfiguration, const QString &workingDirectory); + static QStringList removeSpecFromArgumentList(const QStringList &old); + static QString extractSpecFromArgumentList(const QStringList &list); signals: void targetInformationChanged(); diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index 25658b5a9cddf27cac684f9a7e04f0bf33492b1a..2f4b2273ae97ee8744814eeaed7cb6eb60ebfa04 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -231,48 +231,57 @@ void Qt4ProjectConfigWidget::shadowBuildLineEditTextChanged() void Qt4ProjectConfigWidget::importLabelClicked() { - if (m_ui->shadowBuildCheckBox->isChecked()) { - QString directory = m_ui->shadowBuildDirEdit->path(); - if (!directory.isEmpty()) { - QString qtPath = QtVersionManager::findQtVersionFromMakefile(directory); - if (!qtPath.isEmpty()) { - QtVersionManager *vm = QtVersionManager::instance(); - QtVersion *version = vm->qtVersionForDirectory(qtPath); - if (!version) { - version = new QtVersion(QFileInfo(qtPath).baseName(), qtPath); - vm->addVersion(version); - } - - QPair<QtVersion::QmakeBuildConfig, QStringList> result = - QtVersionManager::scanMakeFile(directory, version->defaultBuildConfig()); - QtVersion::QmakeBuildConfig qmakeBuildConfig = result.first; - QStringList additionalArguments = result.second; - - // So we got all the information now apply it... - m_pro->setQtVersion(m_buildConfiguration, version->uniqueId()); - // Combo box will be updated at the end - - QMakeStep *qmakeStep = m_pro->qmakeStep(); - qmakeStep->setValue(m_buildConfiguration, "qmakeArgs", additionalArguments); - MakeStep *makeStep = m_pro->makeStep(); - - m_pro->setValue(m_buildConfiguration, "buildConfiguration", int(qmakeBuildConfig)); - // Adjust command line arguments, this is ugly as hell - // If we are switching to BuildAll we want "release" in there and no "debug" - // or "debug" in there and no "release" - // If we are switching to not BuildAl we want neither "release" nor "debug" in there - QStringList makeCmdArguments = makeStep->value(m_buildConfiguration, "makeargs").toStringList(); - bool debug = qmakeBuildConfig & QtVersion::DebugBuild; - if (qmakeBuildConfig & QtVersion::BuildAll) { - makeCmdArguments.removeAll(debug ? "release" : "debug"); - if (!makeCmdArguments.contains(debug ? "debug" : "release")) - makeCmdArguments.append(debug ? "debug" : "release"); - } else { - makeCmdArguments.removeAll("debug"); - makeCmdArguments.removeAll("release"); - } - makeStep->setValue(m_buildConfiguration, "makeargs", makeCmdArguments); + QString directory = m_pro->buildDirectory(m_buildConfiguration); + if (!directory.isEmpty()) { + QString qtPath = QtVersionManager::findQtVersionFromMakefile(directory); + if (!qtPath.isEmpty()) { + QtVersionManager *vm = QtVersionManager::instance(); + QtVersion *version = vm->qtVersionForDirectory(qtPath); + if (!version) { + version = new QtVersion(QFileInfo(qtPath).baseName(), qtPath); + vm->addVersion(version); } + + QPair<QtVersion::QmakeBuildConfig, QStringList> result = + QtVersionManager::scanMakeFile(directory, version->defaultBuildConfig()); + QtVersion::QmakeBuildConfig qmakeBuildConfig = result.first; + QStringList additionalArguments = result.second; + + QString versionSpec = version->sourcePath() + "/mkspecs/" + version->mkspec(); + QString parsedSpec = Qt4Project::extractSpecFromArgumentList(additionalArguments); + QString parsedSpecOrginal = parsedSpec; + if (QFileInfo(parsedSpec).isRelative()) + parsedSpec = QDir::cleanPath(directory + "/" + parsedSpec); + additionalArguments = Qt4Project::removeSpecFromArgumentList(additionalArguments); + if (parsedSpec != versionSpec) { + additionalArguments.prepend(parsedSpecOrginal); + additionalArguments.prepend("-spec"); + } + + // So we got all the information now apply it... + m_pro->setQtVersion(m_buildConfiguration, version->uniqueId()); + // Combo box will be updated at the end + + QMakeStep *qmakeStep = m_pro->qmakeStep(); + qmakeStep->setValue(m_buildConfiguration, "qmakeArgs", additionalArguments); + MakeStep *makeStep = m_pro->makeStep(); + + m_pro->setValue(m_buildConfiguration, "buildConfiguration", int(qmakeBuildConfig)); + // Adjust command line arguments, this is ugly as hell + // If we are switching to BuildAll we want "release" in there and no "debug" + // or "debug" in there and no "release" + // If we are switching to not BuildAl we want neither "release" nor "debug" in there + QStringList makeCmdArguments = makeStep->value(m_buildConfiguration, "makeargs").toStringList(); + bool debug = qmakeBuildConfig & QtVersion::DebugBuild; + if (qmakeBuildConfig & QtVersion::BuildAll) { + makeCmdArguments.removeAll(debug ? "release" : "debug"); + if (!makeCmdArguments.contains(debug ? "debug" : "release")) + makeCmdArguments.append(debug ? "debug" : "release"); + } else { + makeCmdArguments.removeAll("debug"); + makeCmdArguments.removeAll("release"); + } + makeStep->setValue(m_buildConfiguration, "makeargs", makeCmdArguments); } } setupQtVersionsComboBox();