diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index d67e3bd5e7f0c9bab18a14856cb8d2399a0b600b..dfc101c658e4cf7674560ff4d20c4185feba05cf 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 <proparser/profileevaluator.h> #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 e4371a1a395bf3d08b17c50c89549f815a7dbb53..3b22a0a0344c242c13e5d46e6ede7e51c3ec411a 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 0442e2e72a5b8ef24b4493b1ca5126b1b294536e..d02928d94f95e0d3dabffd6c4522cb42ed44605b 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<ProString, ProStringList> base_valuemap; // Cached results of qmake.conf, .qmake.cache & default_pre.prf