diff --git a/src/libs/utils/commandline.h b/src/libs/utils/commandline.h index 23585adb8af..c3aa17c7d85 100644 --- a/src/libs/utils/commandline.h +++ b/src/libs/utils/commandline.h @@ -55,7 +55,7 @@ public: //! Append already quoted arguments to a shell command static void addArgs(QString *args, const QString &inArgs); //! Split a shell command into separate arguments. - static QStringList splitArgs(const QString &cmd, OsType osType = HostOsInfo::hostOs(), + static QStringList splitArgs(const QString &cmd, OsType osType, bool abortOnMeta = false, SplitError *err = nullptr, const Environment *env = nullptr, const QString *pwd = nullptr); //! Safely replace the expandos in a shell command diff --git a/src/plugins/autotoolsprojectmanager/makefileparser.cpp b/src/plugins/autotoolsprojectmanager/makefileparser.cpp index 09fbd666479..9bbccdb86ad 100644 --- a/src/plugins/autotoolsprojectmanager/makefileparser.cpp +++ b/src/plugins/autotoolsprojectmanager/makefileparser.cpp @@ -13,6 +13,8 @@ #include #include +using namespace Utils; + namespace AutotoolsProjectManager::Internal { MakefileParser::MakefileParser(const QString &makefile) : m_makefile(makefile) @@ -423,7 +425,7 @@ QStringList MakefileParser::parseTermsAfterAssign(const QString &line) if (assignPos <= 0 || assignPos >= line.size()) return QStringList(); - const QStringList parts = Utils::ProcessArgs::splitArgs(line.mid(assignPos)); + const QStringList parts = ProcessArgs::splitArgs(line.mid(assignPos), HostOsInfo::hostOs()); QStringList result; for (int i = 0; i < parts.count(); ++i) { const QString cur = parts.at(i); diff --git a/src/plugins/baremetal/debugservers/gdb/openocdgdbserverprovider.cpp b/src/plugins/baremetal/debugservers/gdb/openocdgdbserverprovider.cpp index 334f31132cb..03933cff50e 100644 --- a/src/plugins/baremetal/debugservers/gdb/openocdgdbserverprovider.cpp +++ b/src/plugins/baremetal/debugservers/gdb/openocdgdbserverprovider.cpp @@ -64,7 +64,7 @@ QString OpenOcdGdbServerProvider::channelString() const // otherwise running will be stuck. CommandLine cmd = command(); QStringList args = {"|", cmd.executable().toString()}; - for (const QString &a : ProcessArgs::splitArgs(cmd.arguments())) { + for (const QString &a : ProcessArgs::splitArgs(cmd.arguments(), HostOsInfo::hostOs())) { if (a.startsWith('\"') && a.endsWith('\"')) args << a; else diff --git a/src/plugins/clangtools/clangtoolsutils.cpp b/src/plugins/clangtools/clangtoolsutils.cpp index 01dcb614b5a..acfd768797b 100644 --- a/src/plugins/clangtools/clangtoolsutils.cpp +++ b/src/plugins/clangtools/clangtoolsutils.cpp @@ -284,7 +284,7 @@ static QStringList extraOptions(const QString &envVar) if (!qtcEnvironmentVariableIsSet(envVar)) return QStringList(); QString arguments = qtcEnvironmentVariable(envVar); - return Utils::ProcessArgs::splitArgs(arguments); + return ProcessArgs::splitArgs(arguments, HostOsInfo::hostOs()); } QStringList extraClangToolsPrependOptions() diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 7b398fac5be..07780d72e9f 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -643,7 +643,7 @@ void CMakeBuildSettingsWidget::updateInitialCMakeArguments() // As the user would expect to have e.g. "--preset" from "Initial Configuration" // to "Current Configuration" as additional parameters m_buildSystem->setAdditionalCMakeArguments(ProcessArgs::splitArgs( - bc->aspect()->value())); + bc->aspect()->value(), HostOsInfo::hostOs())); } void CMakeBuildSettingsWidget::kitCMakeConfiguration() @@ -823,9 +823,10 @@ void CMakeBuildSettingsWidget::updateFromKit() // Then the additional parameters const QStringList additionalKitCMake = ProcessArgs::splitArgs( - CMakeConfigurationKitAspect::additionalConfiguration(k)); + CMakeConfigurationKitAspect::additionalConfiguration(k), HostOsInfo::hostOs()); const QStringList additionalInitialCMake = ProcessArgs::splitArgs( - m_buildSystem->buildConfiguration()->aspect()->value()); + m_buildSystem->buildConfiguration()->aspect()->value(), + HostOsInfo::hostOs()); QStringList mergedArgumentList; std::set_union(additionalInitialCMake.begin(), @@ -1725,7 +1726,8 @@ void CMakeBuildSystem::setInitialCMakeArguments(const QStringList &args) QStringList CMakeBuildSystem::additionalCMakeArguments() const { - return ProcessArgs::splitArgs(buildConfiguration()->aspect()->value()); + return ProcessArgs::splitArgs(buildConfiguration()->aspect()->value(), + HostOsInfo::hostOs()); } void CMakeBuildSystem::setAdditionalCMakeArguments(const QStringList &args) @@ -1748,7 +1750,8 @@ void CMakeBuildSystem::filterConfigArgumentsFromAdditionalCMakeArguments() // which is already part of the CMake variables and should not be also // in the addtional CMake options const QStringList arguments = ProcessArgs::splitArgs( - buildConfiguration()->aspect()->value()); + buildConfiguration()->aspect()->value(), + HostOsInfo::hostOs()); QStringList unknownOptions; const CMakeConfig config = CMakeConfig::fromArguments(arguments, unknownOptions); @@ -2144,7 +2147,7 @@ const QStringList InitialCMakeArgumentsAspect::allValues() const return ci.toArgument(nullptr); }); - initialCMakeArguments.append(ProcessArgs::splitArgs(value())); + initialCMakeArguments.append(ProcessArgs::splitArgs(value(), HostOsInfo::hostOs())); return initialCMakeArguments; } diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp index 9293831fdcf..29ace13a6bd 100644 --- a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp +++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp @@ -245,7 +245,7 @@ QList generateBuildTargets(const PreprocessedData &input, continue; // CMake sometimes mixes several shell-escaped pieces into one fragment. Disentangle that again: - const QStringList parts = ProcessArgs::splitArgs(f.fragment); + const QStringList parts = ProcessArgs::splitArgs(f.fragment, HostOsInfo::hostOs()); for (QString part : parts) { // Library search paths that are added with target_link_directories are added as // -LIBPATH:... (Windows/MSVC), or @@ -306,7 +306,7 @@ static QStringList splitFragments(const QStringList &fragments) { QStringList result; for (const QString &f : fragments) { - result += ProcessArgs::splitArgs(f); + result += ProcessArgs::splitArgs(f, HostOsInfo::hostOs()); } return result; } diff --git a/src/plugins/coreplugin/fileutils.cpp b/src/plugins/coreplugin/fileutils.cpp index 116fe244f2f..929ebfe61d3 100644 --- a/src/plugins/coreplugin/fileutils.cpp +++ b/src/plugins/coreplugin/fileutils.cpp @@ -76,7 +76,8 @@ void FileUtils::showInGraphicalShell(QWidget *parent, const FilePath &pathIn) const QString folder = fileInfo.isDir() ? fileInfo.absoluteFilePath() : fileInfo.filePath(); const QString app = UnixUtils::fileBrowser(ICore::settings()); QStringList browserArgs = ProcessArgs::splitArgs( - UnixUtils::substituteFileBrowserParameters(app, folder)); + UnixUtils::substituteFileBrowserParameters(app, folder), + HostOsInfo::hostOs()); QString error; if (browserArgs.isEmpty()) { error = Tr::tr("The command for file browser is not set."); diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index e8c3c361383..38fe8c6b01f 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -267,7 +267,8 @@ void LldbEngine::handleLldbStarted() cmd2.arg("nativemixed", isNativeMixedActive()); cmd2.arg("workingdirectory", rp.inferior.workingDirectory.path()); cmd2.arg("environment", rp.inferior.environment.toStringList()); - cmd2.arg("processargs", toHex(ProcessArgs::splitArgs(rp.inferior.command.arguments()).join(QChar(0)))); + cmd2.arg("processargs", toHex(ProcessArgs::splitArgs(rp.inferior.command.arguments(), + HostOsInfo::hostOs()).join(QChar(0)))); cmd2.arg("platform", rp.platform); cmd2.arg("symbolfile", rp.symbolFile.path()); diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index e819235c9b6..c219b88b2eb 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -400,7 +400,7 @@ static QStringList readFlags(const QString &filePath) return QStringList(); QStringList flags; for (const auto &line : lines) - flags.append(ProcessArgs::splitArgs(line)); + flags.append(ProcessArgs::splitArgs(line, HostOsInfo::hostOs())); return flags; } diff --git a/src/plugins/ios/iosbuildstep.cpp b/src/plugins/ios/iosbuildstep.cpp index eb6664c155c..e4771d97e84 100644 --- a/src/plugins/ios/iosbuildstep.cpp +++ b/src/plugins/ios/iosbuildstep.cpp @@ -101,7 +101,8 @@ QWidget *IosBuildStep::createConfigWidget() updateDetails(); connect(buildArgumentsTextEdit, &QPlainTextEdit::textChanged, this, [=] { - setBaseArguments(ProcessArgs::splitArgs(buildArgumentsTextEdit->toPlainText())); + setBaseArguments(ProcessArgs::splitArgs(buildArgumentsTextEdit->toPlainText(), + HostOsInfo::hostOs())); resetDefaultsButton->setEnabled(!m_useDefaultArguments); updateDetails(); }); @@ -113,7 +114,8 @@ QWidget *IosBuildStep::createConfigWidget() }); connect(extraArgumentsLineEdit, &QLineEdit::editingFinished, this, [=] { - setExtraArguments(ProcessArgs::splitArgs(extraArgumentsLineEdit->text())); + setExtraArguments(ProcessArgs::splitArgs(extraArgumentsLineEdit->text(), + HostOsInfo::hostOs())); }); connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged, diff --git a/src/plugins/ios/iosdsymbuildstep.cpp b/src/plugins/ios/iosdsymbuildstep.cpp index 54481ded9b7..33ff0e7e202 100644 --- a/src/plugins/ios/iosdsymbuildstep.cpp +++ b/src/plugins/ios/iosdsymbuildstep.cpp @@ -242,7 +242,8 @@ QWidget *IosDsymBuildStep::createConfigWidget() connect(argumentsTextEdit, &QPlainTextEdit::textChanged, this, [this, argumentsTextEdit, resetDefaultsButton, updateDetails] { - setArguments(Utils::ProcessArgs::splitArgs(argumentsTextEdit->toPlainText())); + setArguments(ProcessArgs::splitArgs(argumentsTextEdit->toPlainText(), + HostOsInfo::hostOs())); resetDefaultsButton->setEnabled(!isDefault()); updateDetails(); }); diff --git a/src/plugins/mesonprojectmanager/mesonbuildconfiguration.cpp b/src/plugins/mesonprojectmanager/mesonbuildconfiguration.cpp index a24a1f52bf5..bd90ee818c6 100644 --- a/src/plugins/mesonprojectmanager/mesonbuildconfiguration.cpp +++ b/src/plugins/mesonprojectmanager/mesonbuildconfiguration.cpp @@ -91,7 +91,8 @@ void MesonBuildConfiguration::build(const QString &target) QStringList MesonBuildConfiguration::mesonConfigArgs() { - return Utils::ProcessArgs::splitArgs(m_parameters) + QStringList{QString("-Dbuildtype=%1").arg(mesonBuildTypeName(m_buildType))}; + return Utils::ProcessArgs::splitArgs(m_parameters, HostOsInfo::hostOs()) + + QStringList{QString("-Dbuildtype=%1").arg(mesonBuildTypeName(m_buildType))}; } const QString &MesonBuildConfiguration::parameters() const diff --git a/src/plugins/nim/project/nimcompilerbuildstep.cpp b/src/plugins/nim/project/nimcompilerbuildstep.cpp index 3ca151def72..87f93e53e2a 100644 --- a/src/plugins/nim/project/nimcompilerbuildstep.cpp +++ b/src/plugins/nim/project/nimcompilerbuildstep.cpp @@ -76,7 +76,7 @@ QWidget *NimCompilerBuildStep::createConfigWidget() auto updateUi = [=] { const CommandLine cmd = commandLine(); - const QStringList parts = ProcessArgs::splitArgs(cmd.toUserOutput()); + const QStringList parts = ProcessArgs::splitArgs(cmd.toUserOutput(), HostOsInfo::hostOs()); commandTextEdit->setText(parts.join(QChar::LineFeed)); diff --git a/src/plugins/perfprofiler/perfsettings.cpp b/src/plugins/perfprofiler/perfsettings.cpp index 8175dece0ea..9bea76b3e29 100644 --- a/src/plugins/perfprofiler/perfsettings.cpp +++ b/src/plugins/perfprofiler/perfsettings.cpp @@ -122,7 +122,7 @@ QStringList PerfSettings::perfRecordArguments() const "--call-graph", callgraphArg, sampleMode.itemValue().toString(), QString::number(period.value())}) - + ProcessArgs::splitArgs(extraArguments.value()); + + ProcessArgs::splitArgs(extraArguments.value(), HostOsInfo::hostOs()); } void PerfSettings::resetToDefault() diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp index a09c8bac76d..566b669c393 100644 --- a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp @@ -78,7 +78,7 @@ static void startTerminalEmulator(const QString &workingDir, const Environment & const TerminalCommand term = TerminalCommand::terminalEmulator(); QProcess process; process.setProgram(term.command.nativePath()); - process.setArguments(ProcessArgs::splitArgs(term.openArgs)); + process.setArguments(ProcessArgs::splitArgs(term.openArgs, HostOsInfo::hostOs())); process.setProcessEnvironment(env.toProcessEnvironment()); process.setWorkingDirectory(workingDir); process.startDetached(); diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index d2449bd69ae..cac1905f111 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -1385,8 +1385,10 @@ void GccToolChainConfigWidget::setFromToolchain() QSignalBlocker blocker(this); auto tc = static_cast(toolChain()); m_compilerCommand->setFilePath(tc->compilerCommand()); - m_platformCodeGenFlagsLineEdit->setText(ProcessArgs::joinArgs(tc->platformCodeGenFlags())); - m_platformLinkerFlagsLineEdit->setText(ProcessArgs::joinArgs(tc->platformLinkerFlags())); + m_platformCodeGenFlagsLineEdit->setText(ProcessArgs::joinArgs(tc->platformCodeGenFlags(), + HostOsInfo::hostOs())); + m_platformLinkerFlagsLineEdit->setText(ProcessArgs::joinArgs(tc->platformLinkerFlags(), + HostOsInfo::hostOs())); if (m_abiWidget) { m_abiWidget->setAbis(tc->supportedAbis(), tc->targetAbi()); if (!m_isReadOnly && !m_compilerCommand->filePath().toString().isEmpty()) diff --git a/src/plugins/qmakeprojectmanager/makefileparse.cpp b/src/plugins/qmakeprojectmanager/makefileparse.cpp index e9d8c2878e7..32193a4dbdc 100644 --- a/src/plugins/qmakeprojectmanager/makefileparse.cpp +++ b/src/plugins/qmakeprojectmanager/makefileparse.cpp @@ -479,8 +479,8 @@ void QmakeProjectManagerPlugin::testMakefileParser() MakeFileParse parser("/tmp/something", MakeFileParse::Mode::FilterKnownConfigValues); parser.parseCommandLine(command, project); - QCOMPARE(ProcessArgs::splitArgs(parser.unparsedArguments()), - ProcessArgs::splitArgs(unparsedArguments)); + QCOMPARE(ProcessArgs::splitArgs(parser.unparsedArguments(), HostOsInfo::hostOs()), + ProcessArgs::splitArgs(unparsedArguments, HostOsInfo::hostOs())); QCOMPARE(parser.effectiveBuildConfig({}), effectiveBuildConfig); const QMakeStepConfig qmsc = parser.config(); diff --git a/src/plugins/qnx/qnxdevice.cpp b/src/plugins/qnx/qnxdevice.cpp index ad205196ed7..f1770a55222 100644 --- a/src/plugins/qnx/qnxdevice.cpp +++ b/src/plugins/qnx/qnxdevice.cpp @@ -48,7 +48,7 @@ QnxProcessImpl::QnxProcessImpl(const LinuxDevice *linuxDevice) QString QnxProcessImpl::fullCommandLine(const CommandLine &commandLine) const { - QStringList args = ProcessArgs::splitArgs(commandLine.arguments()); + QStringList args = ProcessArgs::splitArgs(commandLine.arguments(), HostOsInfo::hostOs()); args.prepend(commandLine.executable().toString()); const QString cmd = ProcessArgs::createUnixArgs(args).toString(); diff --git a/src/plugins/remotelinux/makeinstallstep.cpp b/src/plugins/remotelinux/makeinstallstep.cpp index de7f9a336e6..8f51c0b827c 100644 --- a/src/plugins/remotelinux/makeinstallstep.cpp +++ b/src/plugins/remotelinux/makeinstallstep.cpp @@ -261,7 +261,7 @@ void MakeInstallStep::updateFromCustomCommandLineAspect() const StringAspect * const aspect = customCommandLineAspect(); if (!aspect->isChecked()) return; - const QStringList tokens = ProcessArgs::splitArgs(aspect->value()); + const QStringList tokens = ProcessArgs::splitArgs(aspect->value(), HostOsInfo::hostOs()); setMakeCommand(tokens.isEmpty() ? FilePath() : FilePath::fromString(tokens.first())); setUserArguments(ProcessArgs::joinArgs(tokens.mid(1))); } diff --git a/src/plugins/valgrind/callgrindengine.cpp b/src/plugins/valgrind/callgrindengine.cpp index 00de8b42fd8..51ec76a1305 100644 --- a/src/plugins/valgrind/callgrindengine.cpp +++ b/src/plugins/valgrind/callgrindengine.cpp @@ -86,7 +86,7 @@ QStringList CallgrindToolRunner::toolArguments() const arguments << "--callgrind-out-file=" + m_valgrindOutputFile.path(); - arguments << ProcessArgs::splitArgs(m_settings.callgrindArguments.value()); + arguments << ProcessArgs::splitArgs(m_settings.callgrindArguments.value(), HostOsInfo::hostOs()); return arguments; } diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index 6129a0b4dbd..7042419a7b5 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -214,7 +214,7 @@ QStringList MemcheckToolRunner::toolArguments() const if (m_withGdb) arguments << "--vgdb=yes" << "--vgdb-error=0"; - arguments << Utils::ProcessArgs::splitArgs(m_settings.memcheckArguments.value()); + arguments << ProcessArgs::splitArgs(m_settings.memcheckArguments.value(), HostOsInfo::hostOs()); return arguments; }