From 9f68456b6513dbb31aad7211c48a85637b1c97cd Mon Sep 17 00:00:00 2001 From: dt <qtc-committer@nokia.com> Date: Wed, 1 Sep 2010 12:33:53 +0200 Subject: [PATCH] Give our Profile parser more information from the qmakestep e.g. DEFINES+=bla on the qmakestep command line now work Task-Nr: QTCREATORBUG-2091 --- src/plugins/qt4projectmanager/qmakestep.cpp | 24 ++++++------- src/plugins/qt4projectmanager/qmakestep.h | 1 + .../qt4buildconfiguration.cpp | 34 +++++++++++-------- .../qt4projectmanager/qt4buildconfiguration.h | 5 ++- src/plugins/qt4projectmanager/qt4nodes.cpp | 14 ++++---- src/shared/proparser/profileevaluator.cpp | 20 +++++------ src/shared/proparser/profileevaluator.h | 2 +- 7 files changed, 55 insertions(+), 45 deletions(-) diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index a27fa68b20d..0d78fb428d7 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 daa25f204e4..4a5936dde0a 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 eb42cd9bc42..5696ccef07b 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 2b2ac67fc37..849e0852eee 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 d6d2f769650..a2f5f951edc 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 a319edb438d..bed1b6a5866 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 a011780e5b9..0442e2e72a5 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, -- GitLab