aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2025-03-11 09:52:13 +0100
committerhjk <hjk@qt.io>2025-03-11 13:56:21 +0000
commit12ff6cc929266030a7b7608f2612af3e638f5145 (patch)
tree1e99eb8a0b2b2892f46067a254d20094a31e5935
parent2384da479caa9fe36e64d0f0f3f8f69fff06d6be (diff)
Utils: Dissolve ProcessArgs::ConstIterator
Only used in one place, encapsulate its use into a simpler API. Change-Id: If5542863f77c93979c0a3f7d27fe94d8a07127b6 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r--src/libs/utils/commandline.cpp12
-rw-r--r--src/libs/utils/commandline.h17
-rw-r--r--src/plugins/qmakeprojectmanager/qmakestep.cpp10
3 files changed, 18 insertions, 21 deletions
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<int(const QString &str, int *pos, QString *ret)>;
@@ -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