diff --git a/src/libs/utils/commandline.cpp b/src/libs/utils/commandline.cpp index 4eeb203cddf..913d318466c 100644 --- a/src/libs/utils/commandline.cpp +++ b/src/libs/utils/commandline.cpp @@ -1588,6 +1588,18 @@ CommandLine CommandLine::toLocal() const return cmd; } +QStringList ProcessArgs::filterSimpleArgs(const QString &args, OsType osType) +{ + QStringList result; + QString args_ = args; + for (ArgIterator ait(&args_, osType); ait.next(); ) { + // This filters out items containing e.g. shell variables like '$FOO' + if (ait.isSimple()) + result << ait.value(); + } + return result; +} + QTCREATOR_UTILS_EXPORT bool operator==(const CommandLine &first, const CommandLine &second) { return first.m_executable == second.m_executable && first.m_arguments == second.m_arguments; diff --git a/src/libs/utils/commandline.h b/src/libs/utils/commandline.h index 82ab2a60b05..0fc6862c78d 100644 --- a/src/libs/utils/commandline.h +++ b/src/libs/utils/commandline.h @@ -53,6 +53,9 @@ public: static QStringList splitArgs(const QString &cmd, OsType osType, bool abortOnMeta = false, SplitError *err = nullptr, const Environment *env = nullptr, const QString &pwd = {}); + //! Split a shell command into separate arguments and drop complex ones + //! as input for the internal .pro parser. + static QStringList filterSimpleArgs(const QString &cmd, OsType osType); using FindMacro = std::function; @@ -89,20 +92,6 @@ public: OsType m_osType; }; - class QTCREATOR_UTILS_EXPORT ConstArgIterator - { - public: - ConstArgIterator(const QString &str, OsType osType = HostOsInfo::hostOs()) - : m_str(str), m_ait(&m_str, osType) - {} - bool next() { return m_ait.next(); } - bool isSimple() const { return m_ait.isSimple(); } - QString value() const { return m_ait.value(); } - - private: - QString m_str; - ArgIterator m_ait; - }; }; class QTCREATOR_UTILS_EXPORT RunResult diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp index a8b5074f8de..42c41500cdf 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.cpp +++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp @@ -375,15 +375,11 @@ QString QMakeStep::effectiveQMakeCall() const QStringList QMakeStep::parserArguments() { - // NOTE: extra parser args placed before the other args intentionally - QStringList result = m_extraParserArgs; QtVersion *qt = QtKitAspect::qtVersion(kit()); QTC_ASSERT(qt, return {}); - for (ProcessArgs::ConstArgIterator ait(allArguments(qt, ArgumentFlag::Expand)); ait.next(); ) { - if (ait.isSimple()) - result << ait.value(); - } - return result; + const QString allArgs = allArguments(qt, ArgumentFlag::Expand); + // NOTE: extra parser args placed before the other args intentionally + return m_extraParserArgs + ProcessArgs::filterSimpleArgs(allArgs, qt->qmakeFilePath().osType()); } QString QMakeStep::mkspec() const