From 79c95e4603627133690974a870d22bd559ca5500 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 17 Nov 2010 17:22:11 +0100 Subject: [PATCH] Qt project file parsing: Take target options into account. Reviewed-by: Oswald Buddenhagen Reviewed-by: kh1 Reviewed-by: dt --- src/plugins/qt4projectmanager/qmakestep.cpp | 17 ++++++++++--- src/shared/proparser/profileevaluator.cpp | 39 +++++++++++++++++++++++------ src/shared/proparser/profileevaluator.h | 8 ++++++ 3 files changed, 54 insertions(+), 10 deletions(-) diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index d67e3bd5e7..dfc101c658 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -30,6 +30,7 @@ #include "qmakestep.h" #include "projectexplorer/projectexplorerconstants.h" +#include #include "qmakeparser.h" #include "qt4buildconfiguration.h" #include "qt4project.h" @@ -309,9 +310,19 @@ void QMakeStep::setUserArguments(const QString &arguments) QStringList QMakeStep::parserArguments() { QStringList result; - for (Utils::QtcProcess::ConstArgIterator ait(allArguments()); ait.next(); ) - if (ait.value().contains(QLatin1Char('='))) - result << ait.value(); + for (Utils::QtcProcess::ConstArgIterator ait(allArguments()); ait.next(); ) { + const QString &arg = ait.value(); + if (arg.contains(QLatin1Char('='))) { + result << arg; + } else { + for (int i = 0; i < ProFileOption::modeMapSize; ++i) { + if (QLatin1String(ProFileOption::modeMap[i].qmakeOption) == arg) { + result << arg; + break; + } + } + } + } return result; } diff --git a/src/shared/proparser/profileevaluator.cpp b/src/shared/proparser/profileevaluator.cpp index e4371a1a39..3b22a0a034 100644 --- a/src/shared/proparser/profileevaluator.cpp +++ b/src/shared/proparser/profileevaluator.cpp @@ -90,6 +90,18 @@ ProFileOption::ProFileOption() #endif qmakespec = QString::fromLocal8Bit(qgetenv("QMAKESPEC").data()); + setHostTargetMode(); +#ifdef PROEVALUATOR_THREAD_SAFE + base_inProgress = false; +#endif +} + +ProFileOption::~ProFileOption() +{ +} + +void ProFileOption::setHostTargetMode() +{ #if defined(Q_OS_WIN32) target_mode = TARG_WIN_MODE; #elif defined(Q_OS_MAC) @@ -99,15 +111,15 @@ ProFileOption::ProFileOption() #else target_mode = TARG_UNIX_MODE; #endif - -#ifdef PROEVALUATOR_THREAD_SAFE - base_inProgress = false; -#endif } -ProFileOption::~ProFileOption() -{ -} +const struct ProFileOption::TargetModeMapElement ProFileOption::modeMap[] = { + { "-unix", TARG_UNIX_MODE }, + { "-macx", TARG_MACX_MODE }, + { "-win32", TARG_WIN_MODE } +}; +const int ProFileOption::modeMapSize + = sizeof ProFileOption::modeMap / sizeof ProFileOption::modeMap[0]; /////////////////////////////////////////////////////////////////////// // @@ -3224,6 +3236,19 @@ void ProFileEvaluator::setOutputDir(const QString &dir) void ProFileEvaluator::setCommandLineArguments(const QStringList &args) { d->m_cmdArgs = args; + + d->m_option->setHostTargetMode(); + bool targetModeSet = false; + for (int i = args.count() - 1; !targetModeSet && i >= 0; --i) { + for (int j = 0; j < ProFileOption::modeMapSize; ++j) { + const ProFileOption::TargetModeMapElement &mapElem = ProFileOption::modeMap[j]; + if (args.at(i) == QLatin1String(mapElem.qmakeOption)) { + d->m_option->target_mode = mapElem.targetMode; + targetModeSet = true; + break; + } + } + } } QT_END_NAMESPACE diff --git a/src/shared/proparser/profileevaluator.h b/src/shared/proparser/profileevaluator.h index 0442e2e72a..d02928d94f 100644 --- a/src/shared/proparser/profileevaluator.h +++ b/src/shared/proparser/profileevaluator.h @@ -175,7 +175,15 @@ struct ProFileOption //QString pro_ext; //QString res_ext; + static const struct TargetModeMapElement { + const char * const qmakeOption; + const TARG_MODE targetMode; + } modeMap[]; + static const int modeMapSize; + private: + void setHostTargetMode(); + friend class ProFileEvaluator; friend class ProFileEvaluator::Private; QHash base_valuemap; // Cached results of qmake.conf, .qmake.cache & default_pre.prf -- 2.11.0