diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index a27fa68b20d0887f3b985c1ccd2ed6cce10acb39..0d78fb428d750e13ade961248056bacb2e2bb8a4 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -115,18 +115,7 @@ QStringList QMakeStep::allArguments() arguments << "-spec" << bc->qtVersion()->mkspec(); // Find out what flags we pass on to qmake - QStringList addedUserConfigArguments; - QStringList removedUserConfigArguments; - bc->getConfigCommandLineArguments(&addedUserConfigArguments, &removedUserConfigArguments); - if (!removedUserConfigArguments.isEmpty()) { - foreach (const QString &removedConfig, removedUserConfigArguments) - arguments.append("CONFIG-=" + removedConfig); - } - if (!addedUserConfigArguments.isEmpty()) { - foreach (const QString &addedConfig, addedUserConfigArguments) - arguments.append("CONFIG+=" + addedConfig); - } - + arguments << bc->configCommandLineArguments(); arguments << moreArguments(); if (!additonalArguments.isEmpty()) @@ -286,6 +275,17 @@ void QMakeStep::setUserArguments(const QStringList &arguments) emit userArgumentsChanged(); qt4BuildConfiguration()->emitQMakeBuildConfigurationChanged(); + qt4BuildConfiguration()->emitProFileEvaluteNeeded(); +} + +QStringList QMakeStep::parserArguments() +{ + QStringList result; + foreach (const QString &str, allArguments()) { + if (str.contains("=")) + result << str; + } + return result; } QStringList QMakeStep::userArguments() diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h index daa25f204e48a36cc1b87ed1146f11fee9aeb335..4a5936dde0a87e123829d244d8e8cfca44f2ba5e 100644 --- a/src/plugins/qt4projectmanager/qmakestep.h +++ b/src/plugins/qt4projectmanager/qmakestep.h @@ -88,6 +88,7 @@ public: // TODO clean up those functions QStringList allArguments(); QStringList moreArguments(); + QStringList parserArguments(); QStringList userArguments(); void setUserArguments(const QStringList &arguments); diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index eb42cd9bc422ebb66c735e0dc93e675dd2706e4c..5696ccef07bc07f31e53219ac784a49d6fe322ea 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -363,6 +363,11 @@ void Qt4BuildConfiguration::setQMakeBuildConfiguration(QtVersion::QmakeBuildConf emit qmakeBuildConfigurationChanged(); } +void Qt4BuildConfiguration::emitProFileEvaluteNeeded() +{ + emit proFileEvaluateNeeded(this); +} + void Qt4BuildConfiguration::emitQMakeBuildConfigurationChanged() { emit qmakeBuildConfigurationChanged(); @@ -379,26 +384,25 @@ void Qt4BuildConfiguration::emitS60CreatesSmartInstallerChanged() } -void Qt4BuildConfiguration::getConfigCommandLineArguments(QStringList *addedUserConfigs, QStringList *removedUserConfigs) const +QStringList Qt4BuildConfiguration::configCommandLineArguments() const { + QStringList result; QtVersion::QmakeBuildConfigs defaultBuildConfiguration = qtVersion()->defaultBuildConfig(); QtVersion::QmakeBuildConfigs userBuildConfiguration = m_qmakeBuildConfiguration; - if (removedUserConfigs) { - if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(userBuildConfiguration & QtVersion::BuildAll)) - (*removedUserConfigs) << "debug_and_release"; - } - if (addedUserConfigs) { - if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (userBuildConfiguration & QtVersion::BuildAll)) - (*addedUserConfigs) << "debug_and_release"; - if ((defaultBuildConfiguration & QtVersion::DebugBuild) - && !(userBuildConfiguration & QtVersion::DebugBuild) - && !(userBuildConfiguration & QtVersion::BuildAll)) - (*addedUserConfigs) << "release"; - if (!(defaultBuildConfiguration & QtVersion::DebugBuild) + if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(userBuildConfiguration & QtVersion::BuildAll)) + result << "CONFIG-=debug_and_release"; + + if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (userBuildConfiguration & QtVersion::BuildAll)) + result << "CONFIG+=debug_and_release"; + if ((defaultBuildConfiguration & QtVersion::DebugBuild) + && !(userBuildConfiguration & QtVersion::DebugBuild) + && !(userBuildConfiguration & QtVersion::BuildAll)) + result << "CONFIG+=release"; + if (!(defaultBuildConfiguration & QtVersion::DebugBuild) && (userBuildConfiguration & QtVersion::DebugBuild) && !(userBuildConfiguration & QtVersion::BuildAll)) - (*addedUserConfigs) << "debug"; - } + result << "CONFIG+=debug"; + return result; } QMakeStep *Qt4BuildConfiguration::qmakeStep() const diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index 2b2ac67fc37bbeb1e49a21077e01703188ebec34..849e0852eee8790e5be393a347f022670d98bd5a 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -76,6 +76,9 @@ public: QtVersion::QmakeBuildConfigs qmakeBuildConfiguration() const; void setQMakeBuildConfiguration(QtVersion::QmakeBuildConfigs config); + + /// \internal for qmakestep + void emitProFileEvaluteNeeded(); // used by qmake step to notify that the qmake args have changed // not really nice, the build configuration should save the arguments // since they are needed for reevaluation @@ -87,7 +90,7 @@ public: // not really nice void emitS60CreatesSmartInstallerChanged(); - void getConfigCommandLineArguments(QStringList *addedUserConfigs, QStringList *removedUserConfigs) const; + QStringList configCommandLineArguments() const; // Those functions are used in a few places. // The drawback is that we shouldn't actually depend on them being always there diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index d6d2f769650981c9168deea5eb50ec7798a64b30..a2f5f951edcc7f37b5c1ced84ad7bfa0c199dfd9 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -35,6 +35,7 @@ #include "qt4projectmanagerconstants.h" #include "qtuicodemodelsupport.h" #include "qt4buildconfiguration.h" +#include "qmakestep.h" #include <projectexplorer/nodesvisitor.h> @@ -1311,12 +1312,13 @@ void Qt4ProFileNode::setupReader() m_readerCumulative = m_project->createProFileReader(this); // Find out what flags we pass on to qmake - QStringList addedUserConfigArguments; - QStringList removedUserConfigArguments; - m_project->activeTarget()->activeBuildConfiguration()->getConfigCommandLineArguments(&addedUserConfigArguments, &removedUserConfigArguments); - - m_readerExact->setConfigCommandLineArguments(addedUserConfigArguments, removedUserConfigArguments); - m_readerCumulative->setConfigCommandLineArguments(addedUserConfigArguments, removedUserConfigArguments); + QStringList args; + if (QMakeStep *qs = m_project->activeTarget()->activeBuildConfiguration()->qmakeStep()) + args = qs->parserArguments(); + else + args = m_project->activeTarget()->activeBuildConfiguration()->configCommandLineArguments(); + m_readerExact->setCommandLineArguments(args); + m_readerCumulative->setCommandLineArguments(args); } bool Qt4ProFileNode::evaluate() diff --git a/src/shared/proparser/profileevaluator.cpp b/src/shared/proparser/profileevaluator.cpp index a319edb438daf68631768aa32262e70c6e77d04b..bed1b6a5866296fcab3e31199f59c89c4f6bb12a 100644 --- a/src/shared/proparser/profileevaluator.cpp +++ b/src/shared/proparser/profileevaluator.cpp @@ -224,8 +224,7 @@ public: QHash<const ProFile*, QHash<ProString, ProStringList> > m_filevaluemap; // Variables per include file QString m_tmp1, m_tmp2, m_tmp3, m_tmp[2]; // Temporaries for efficient toQString - QStringList m_addUserConfigCmdArgs; - QStringList m_removeUserConfigCmdArgs; + QStringList m_cmdArgs; ProFileOption *m_option; ProFileParser *m_parser; @@ -1274,11 +1273,13 @@ ProFileEvaluator::Private::VisitReturn ProFileEvaluator::Private::visitProFile( if (tgt.isEmpty()) tgt.append(ProString(QFileInfo(pro->fileName()).baseName(), NoHash)); - ProStringList &tmp = m_valuemapStack.top()[ProString("CONFIG")]; - foreach (const QString &add, m_addUserConfigCmdArgs) - tmp.append(ProString(add, NoHash)); - foreach (const QString &remove, m_removeUserConfigCmdArgs) - removeAll(&tmp, ProString(remove, NoHash)); + if (ProFile *pro = m_parser->parsedProFile( + fL1S("(command line)"), false, m_cmdArgs.join(fL1S("\n")))) { + m_locationStack.push(m_current); + visitProBlock(pro, pro->tokPtr()); + m_current = m_locationStack.pop(); + pro->deref(); + } } visitProBlock(pro, pro->tokPtr()); @@ -3217,10 +3218,9 @@ void ProFileEvaluator::setOutputDir(const QString &dir) d->m_outputDir = dir; } -void ProFileEvaluator::setConfigCommandLineArguments(const QStringList &addUserConfigCmdArgs, const QStringList &removeUserConfigCmdArgs) +void ProFileEvaluator::setCommandLineArguments(const QStringList &args) { - d->m_addUserConfigCmdArgs = addUserConfigCmdArgs; - d->m_removeUserConfigCmdArgs = removeUserConfigCmdArgs; + d->m_cmdArgs = args; } QT_END_NAMESPACE diff --git a/src/shared/proparser/profileevaluator.h b/src/shared/proparser/profileevaluator.h index a011780e5b9cceea016a5ad3b349319712659cc1..0442e2e72a5b8ef24b4493b1ca5126b1b294536e 100644 --- a/src/shared/proparser/profileevaluator.h +++ b/src/shared/proparser/profileevaluator.h @@ -112,7 +112,7 @@ public: // -nocache, -cache, -spec, QMAKESPEC // -set persistent value - void setConfigCommandLineArguments(const QStringList &addUserConfigCmdArgs, const QStringList &removeUserConfigCmdArgs); + void setCommandLineArguments(const QStringList &args); enum LoadFlag { LoadProOnly = 0,