aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qt4projectmanager
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qt4projectmanager')
-rw-r--r--src/plugins/qt4projectmanager/makestep.cpp38
-rw-r--r--src/plugins/qt4projectmanager/makestep.h6
-rw-r--r--src/plugins/qt4projectmanager/qmakestep.cpp57
-rw-r--r--src/plugins/qt4projectmanager/qmakestep.h8
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp2
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp7
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h6
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp4
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp2
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h4
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp6
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h8
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/s60devicerunconfigurationwidget.cpp10
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp4
-rw-r--r--src/plugins/qt4projectmanager/qt4buildconfiguration.cpp87
-rw-r--r--src/plugins/qt4projectmanager/qt4buildconfiguration.h7
-rw-r--r--src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp40
-rw-r--r--src/plugins/qt4projectmanager/qt4runconfiguration.cpp22
-rw-r--r--src/plugins/qt4projectmanager/qt4runconfiguration.h9
-rw-r--r--src/plugins/qt4projectmanager/qt4target.cpp6
-rw-r--r--src/plugins/qt4projectmanager/qt4target.h6
-rw-r--r--src/plugins/qt4projectmanager/qtversionmanager.cpp88
-rw-r--r--src/plugins/qt4projectmanager/qtversionmanager.h15
-rw-r--r--src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp12
-rw-r--r--src/plugins/qt4projectmanager/wizards/targetsetuppage.h2
25 files changed, 209 insertions, 247 deletions
diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp
index 400b6ee6b75..7a34273cd08 100644
--- a/src/plugins/qt4projectmanager/makestep.cpp
+++ b/src/plugins/qt4projectmanager/makestep.cpp
@@ -43,6 +43,7 @@
#include <projectexplorer/gnumakeparser.h>
#include <projectexplorer/projectexplorer.h>
#include <extensionsystem/pluginmanager.h>
+#include <utils/qtcprocess.h>
#include <QtCore/QDir>
#include <QtCore/QFileInfo>
@@ -113,7 +114,7 @@ QVariantMap MakeStep::toMap() const
bool MakeStep::fromMap(const QVariantMap &map)
{
m_makeCmd = map.value(QLatin1String(MAKE_COMMAND_KEY)).toString();
- m_userArgs = map.value(QLatin1String(MAKE_ARGUMENTS_KEY)).toStringList();
+ m_userArgs = map.value(QLatin1String(MAKE_ARGUMENTS_KEY)).toString();
m_clean = map.value(QLatin1String(CLEAN_KEY)).toBool();
return ProjectExplorer::AbstractProcessStep::fromMap(map);
@@ -150,22 +151,26 @@ bool MakeStep::init()
// we should stop the clean queue
// That is mostly so that rebuild works on a already clean project
setIgnoreReturnValue(m_clean);
- QStringList args;
+
+ QString args;
ProjectExplorer::ToolChain *toolchain = bc->toolChain();
if (bc->subNodeBuild()){
if(!bc->subNodeBuild()->makefile().isEmpty()) {
- args << "-f" << bc->subNodeBuild()->makefile();
+ Utils::QtcProcess::addArg(&args, QLatin1String("-f"));
+ Utils::QtcProcess::addArg(&args, bc->subNodeBuild()->makefile());
}
} else if (!bc->makefile().isEmpty()) {
- args << "-f" << bc->makefile();
+ Utils::QtcProcess::addArg(&args, QLatin1String("-f"));
+ Utils::QtcProcess::addArg(&args, bc->makefile());
}
- args.append(m_userArgs);
+ Utils::QtcProcess::addArgs(&args, m_userArgs);
+
if (!m_clean) {
if (!bc->defaultMakeTarget().isEmpty())
- args << bc->defaultMakeTarget();
+ Utils::QtcProcess::addArg(&args, bc->defaultMakeTarget());
}
// -w option enables "Enter"/"Leaving directory" messages, which we need for detecting the
// absolute file path
@@ -177,7 +182,7 @@ bool MakeStep::init()
if (toolchain->type() != ProjectExplorer::ToolChain_MSVC &&
toolchain->type() != ProjectExplorer::ToolChain_WINCE) {
if (m_makeCmd.isEmpty())
- args << "-w";
+ Utils::QtcProcess::addArg(&args, QLatin1String("-w"));
}
}
@@ -235,12 +240,12 @@ ProjectExplorer::BuildStepConfigWidget *MakeStep::createConfigWidget()
return new MakeStepConfigWidget(this);
}
-QStringList MakeStep::userArguments()
+QString MakeStep::userArguments()
{
return m_userArgs;
}
-void MakeStep::setUserArguments(const QStringList &arguments)
+void MakeStep::setUserArguments(const QString &arguments)
{
m_userArgs = arguments;
emit userArgumentsChanged();
@@ -314,16 +319,16 @@ void MakeStepConfigWidget::updateDetails()
// FIXME doing this without the user having a way to override this is rather bad
// so we only do it for unix and if the user didn't override the make command
// but for now this is the least invasive change
- QStringList args = m_makeStep->userArguments();
+ QString args = m_makeStep->userArguments();
ProjectExplorer::ToolChainType t = ProjectExplorer::ToolChain_UNKNOWN;
ProjectExplorer::ToolChain *toolChain = bc->toolChain();
if (toolChain)
t = toolChain->type();
if (t != ProjectExplorer::ToolChain_MSVC && t != ProjectExplorer::ToolChain_WINCE) {
if (m_makeStep->m_makeCmd.isEmpty())
- args << "-w";
+ Utils::QtcProcess::addArg(&args, QLatin1String("-w"));
}
- m_summaryText = tr("<b>Make:</b> %1 %2 in %3").arg(QFileInfo(makeCmd).fileName(), args.join(" "),
+ m_summaryText = tr("<b>Make:</b> %1 %2 in %3").arg(QFileInfo(makeCmd).fileName(), args,
QDir::toNativeSeparators(workingDirectory));
emit updateSummary();
}
@@ -342,8 +347,7 @@ void MakeStepConfigWidget::userArgumentsChanged()
{
if (m_ignoreChange)
return;
- const QStringList &makeArguments = m_makeStep->userArguments();
- m_ui->makeArgumentsLineEdit->setText(Utils::Environment::joinArgumentList(makeArguments));
+ m_ui->makeArgumentsLineEdit->setText(m_makeStep->userArguments());
updateDetails();
}
@@ -354,8 +358,7 @@ void MakeStepConfigWidget::init()
const QString &makeCmd = m_makeStep->m_makeCmd;
m_ui->makePathChooser->setPath(makeCmd);
- const QStringList &makeArguments = m_makeStep->userArguments();
- m_ui->makeArgumentsLineEdit->setText(Utils::Environment::joinArgumentList(makeArguments));
+ m_ui->makeArgumentsLineEdit->setText(m_makeStep->userArguments());
updateDetails();
}
@@ -368,8 +371,7 @@ void MakeStepConfigWidget::makeEdited()
void MakeStepConfigWidget::makeArgumentsLineEdited()
{
m_ignoreChange = true;
- m_makeStep->setUserArguments(
- Utils::Environment::parseCombinedArgString(m_ui->makeArgumentsLineEdit->text()));
+ m_makeStep->setUserArguments(m_ui->makeArgumentsLineEdit->text());
m_ignoreChange = false;
updateDetails();
}
diff --git a/src/plugins/qt4projectmanager/makestep.h b/src/plugins/qt4projectmanager/makestep.h
index ee650b41365..0858e55fd9a 100644
--- a/src/plugins/qt4projectmanager/makestep.h
+++ b/src/plugins/qt4projectmanager/makestep.h
@@ -91,8 +91,8 @@ public:
virtual ProjectExplorer::BuildStepConfigWidget *createConfigWidget();
virtual bool immutable() const;
- QStringList userArguments();
- void setUserArguments(const QStringList &arguments);
+ QString userArguments();
+ void setUserArguments(const QString &arguments);
void setClean(bool clean);
QVariantMap toMap() const;
@@ -108,7 +108,7 @@ protected:
private:
void ctor();
bool m_clean;
- QStringList m_userArgs;
+ QString m_userArgs;
QString m_makeCmd;
ProjectExplorer::GnuMakeParser * m_gnuMakeParser;
};
diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp
index 63753bb4267..82a0ddc2814 100644
--- a/src/plugins/qt4projectmanager/qmakestep.cpp
+++ b/src/plugins/qt4projectmanager/qmakestep.cpp
@@ -42,6 +42,7 @@
#include <coreplugin/icore.h>
#include <utils/qtcassert.h>
+#include <utils/qtcprocess.h>
#include <QtCore/QDir>
#include <QtCore/QFile>
@@ -100,29 +101,34 @@ Qt4BuildConfiguration *QMakeStep::qt4BuildConfiguration() const
/// config arguemnts
/// moreArguments
/// user arguments
-QStringList QMakeStep::allArguments()
+QString QMakeStep::allArguments(bool shorted)
{
- QStringList additonalArguments = m_userArgs;
+ QString additonalArguments = m_userArgs;
Qt4BuildConfiguration *bc = qt4BuildConfiguration();
QStringList arguments;
if (bc->subNodeBuild())
arguments << QDir::toNativeSeparators(bc->subNodeBuild()->path());
+ else if (shorted)
+ arguments << QDir::toNativeSeparators(QFileInfo(
+ buildConfiguration()->target()->project()->file()->fileName()).fileName());
else
arguments << QDir::toNativeSeparators(buildConfiguration()->target()->project()->file()->fileName());
arguments << "-r";
- if (!additonalArguments.contains("-spec"))
- arguments << "-spec" << bc->qtVersion()->mkspec();
+ for (Utils::QtcProcess::ArgIterator ait(&additonalArguments); ait.next(); )
+ if (ait.value() == QLatin1String("-spec"))
+ goto haveSpec;
+ arguments << "-spec" << bc->qtVersion()->mkspec();
+ haveSpec:
// Find out what flags we pass on to qmake
arguments << bc->configCommandLineArguments();
- if (!additonalArguments.isEmpty())
- arguments << additonalArguments;
-
arguments << moreArguments();
- return arguments;
+ QString args = Utils::QtcProcess::joinArgs(arguments);
+ Utils::QtcProcess::addArgs(&args, additonalArguments);
+ return args;
}
///
@@ -164,7 +170,7 @@ bool QMakeStep::init()
Qt4BuildConfiguration *qt4bc = qt4BuildConfiguration();
const QtVersion *qtVersion = qt4bc->qtVersion();
- QStringList args = allArguments();
+ QString args = allArguments();
QString workingDirectory;
if (qt4bc->subNodeBuild())
@@ -286,7 +292,7 @@ bool QMakeStep::processSucceeded(int exitCode, QProcess::ExitStatus status)
return result;
}
-void QMakeStep::setUserArguments(const QStringList &arguments)
+void QMakeStep::setUserArguments(const QString &arguments)
{
if (m_userArgs == arguments)
return;
@@ -301,14 +307,13 @@ void QMakeStep::setUserArguments(const QStringList &arguments)
QStringList QMakeStep::parserArguments()
{
QStringList result;
- foreach (const QString &str, allArguments()) {
- if (str.contains("="))
- result << str;
- }
+ for (Utils::QtcProcess::ConstArgIterator ait(allArguments()); ait.next(); )
+ if (ait.value().contains(QLatin1Char('=')))
+ result << ait.value();
return result;
}
-QStringList QMakeStep::userArguments()
+QString QMakeStep::userArguments()
{
return m_userArgs;
}
@@ -322,7 +327,7 @@ QVariantMap QMakeStep::toMap() const
bool QMakeStep::fromMap(const QVariantMap &map)
{
- m_userArgs = map.value(QLatin1String(QMAKE_ARGUMENTS_KEY)).toStringList();
+ m_userArgs = map.value(QLatin1String(QMAKE_ARGUMENTS_KEY)).toString();
return BuildStep::fromMap(map);
}
@@ -349,8 +354,7 @@ QMakeStepConfigWidget::QMakeStepConfigWidget(QMakeStep *step)
void QMakeStepConfigWidget::init()
{
- QString qmakeArgs = Utils::Environment::joinArgumentList(m_step->userArguments());
- m_ui.qmakeAdditonalArgumentsLineEdit->setText(qmakeArgs);
+ m_ui.qmakeAdditonalArgumentsLineEdit->setText(m_step->userArguments());
qmakeBuildConfigChanged();
@@ -393,8 +397,7 @@ void QMakeStepConfigWidget::userArgumentsChanged()
{
if (m_ignoreChange)
return;
- QString qmakeArgs = Utils::Environment::joinArgumentList(m_step->userArguments());
- m_ui.qmakeAdditonalArgumentsLineEdit->setText(qmakeArgs);
+ m_ui.qmakeAdditonalArgumentsLineEdit->setText(m_step->userArguments());
updateSummaryLabel();
updateEffectiveQMakeCall();
}
@@ -402,8 +405,7 @@ void QMakeStepConfigWidget::userArgumentsChanged()
void QMakeStepConfigWidget::qmakeArgumentsLineEdited()
{
m_ignoreChange = true;
- m_step->setUserArguments(
- Utils::Environment::parseCombinedArgString(m_ui.qmakeAdditonalArgumentsLineEdit->text()));
+ m_step->setUserArguments(m_ui.qmakeAdditonalArgumentsLineEdit->text());
m_ignoreChange = false;
updateSummaryLabel();
@@ -446,16 +448,11 @@ void QMakeStepConfigWidget::updateSummaryLabel()
return;
}
- QStringList args = m_step->allArguments();
// We don't want the full path to the .pro file
- const QString projectFileName = m_step->buildConfiguration()->target()->project()->file()->fileName();
- int index = args.indexOf(projectFileName);
- if (index != -1)
- args[index] = QFileInfo(projectFileName).fileName();
-
+ QString args = m_step->allArguments(true);
// And we only use the .pro filename not the full path
QString program = QFileInfo(qtVersion->qmakeCommand()).fileName();
- m_summaryText = tr("<b>qmake:</b> %1 %2").arg(program, args.join(QString(QLatin1Char(' '))));
+ m_summaryText = tr("<b>qmake:</b> %1 %2").arg(program, args);
emit updateSummary();
}
@@ -465,7 +462,7 @@ void QMakeStepConfigWidget::updateEffectiveQMakeCall()
Qt4BuildConfiguration *qt4bc = m_step->qt4BuildConfiguration();
const QtVersion *qtVersion = qt4bc->qtVersion();
QString program = QFileInfo(qtVersion->qmakeCommand()).fileName();
- m_ui.qmakeArgumentsEdit->setPlainText(program + QLatin1Char(' ') + Utils::Environment::joinArgumentList(m_step->allArguments()));
+ m_ui.qmakeArgumentsEdit->setPlainText(program + QLatin1Char(' ') + m_step->allArguments());
}
////
diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h
index 0f3c00c3ee9..09befadf738 100644
--- a/src/plugins/qt4projectmanager/qmakestep.h
+++ b/src/plugins/qt4projectmanager/qmakestep.h
@@ -86,11 +86,11 @@ public:
bool forced();
// TODO clean up those functions
- QStringList allArguments();
+ QString allArguments(bool shorted = false);
QStringList moreArguments();
QStringList parserArguments();
- QStringList userArguments();
- void setUserArguments(const QStringList &arguments);
+ QString userArguments();
+ void setUserArguments(const QString &arguments);
QVariantMap toMap() const;
@@ -112,7 +112,7 @@ private:
QStringList m_lastEnv;
bool m_forced;
bool m_needToRunQMake; // set in init(), read in run()
- QStringList m_userArgs;
+ QString m_userArgs;
bool m_scriptTemplate;
QList<ProjectExplorer::Task> m_tasks;
};
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp
index 4b2ac4e5b92..2c2e6156a89 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp
@@ -270,7 +270,7 @@ void MaemoDebugSupport::startDebugging()
const QString cmdPrefix = MaemoGlobal::remoteCommandPrefix(remoteExe);
const QString env
= environment(m_debuggingType, m_runner->userEnvChanges());
- const QString args = m_runner->arguments().join(QLatin1String(" "));
+ const QString args = m_runner->arguments();
const QString remoteCommandLine
= m_debuggingType == MaemoRunConfiguration::DebugQmlOnly
? QString::fromLocal8Bit("%1 %2 %3 %4").arg(cmdPrefix).arg(env)
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
index 39e74db3390..fe118baee0f 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
@@ -49,6 +49,7 @@
#include <qt4projectmanager/qt4project.h>
#include <utils/qtcassert.h>
+#include <utils/qtcprocess.h>
#include <QtCore/QStringBuilder>
@@ -185,7 +186,7 @@ bool MaemoRunConfiguration::fromMap(const QVariantMap &map)
if (!RunConfiguration::fromMap(map))
return false;
- m_arguments = map.value(ArgumentsKey).toStringList();
+ m_arguments = map.value(ArgumentsKey).toString();
const QDir dir = QDir(target()->project()->projectDirectory());
m_proFilePath = dir.filePath(map.value(ProFileKey).toString());
m_useRemoteGdb = map.value(UseRemoteGdbKey, DefaultUseRemoteGdbValue).toBool();
@@ -262,7 +263,7 @@ const QString MaemoRunConfiguration::targetRoot() const
return QString();
}
-const QStringList MaemoRunConfiguration::arguments() const
+const QString MaemoRunConfiguration::arguments() const
{
return m_arguments;
}
@@ -334,7 +335,7 @@ bool MaemoRunConfiguration::useRemoteGdb() const
return m_useRemoteGdb && toolchain()->allowsRemoteMounts();
}
-void MaemoRunConfiguration::setArguments(const QStringList &args)
+void MaemoRunConfiguration::setArguments(const QString &args)
{
m_arguments = args;
}
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
index 0288b08a82b..883fef516a6 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
@@ -92,8 +92,8 @@ public:
QString remoteExecutableFilePath() const;
const QString sysRoot() const;
const QString targetRoot() const;
- const QStringList arguments() const;
- void setArguments(const QStringList &args);
+ const QString arguments() const;
+ void setArguments(const QString &args);
MaemoDeviceConfig deviceConfig() const;
MaemoPortList freePorts() const;
bool useRemoteGdb() const;
@@ -149,7 +149,7 @@ private:
QString m_proFilePath;
mutable QString m_gdbPath;
MaemoRemoteMountsModel *m_remoteMounts;
- QStringList m_arguments;
+ QString m_arguments;
bool m_useRemoteGdb;
BaseEnvironmentBase m_baseEnvironmentBase;
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
index d2a8799e924..1b1f6eea491 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
@@ -137,7 +137,7 @@ void MaemoRunConfigurationWidget::addGenericWidgets(QVBoxLayout *mainLayout)
formLayout->addRow(tr("Executable on host:"), m_localExecutableLabel);
m_remoteExecutableLabel = new QLabel;
formLayout->addRow(tr("Executable on device:"), m_remoteExecutableLabel);
- m_argsLineEdit = new QLineEdit(m_runConfiguration->arguments().join(" "));
+ m_argsLineEdit = new QLineEdit(m_runConfiguration->arguments());
formLayout->addRow(tr("Arguments:"), m_argsLineEdit);
QHBoxLayout * const debugButtonsLayout = new QHBoxLayout;
@@ -293,7 +293,7 @@ void MaemoRunConfigurationWidget::addEnvironmentWidgets(QVBoxLayout *mainLayout)
void MaemoRunConfigurationWidget::argumentsEdited(const QString &text)
{
- m_runConfiguration->setArguments(text.split(' ', QString::SkipEmptyParts));
+ m_runConfiguration->setArguments(text);
}
void MaemoRunConfigurationWidget::updateTargetInformation()
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
index aabc0c2c249..388450e41c7 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
@@ -104,7 +104,7 @@ void MaemoRunControl::startExecution()
.arg(MaemoGlobal::remoteCommandPrefix(m_runner->remoteExecutable()))
.arg(MaemoGlobal::remoteEnvironment(m_runner->userEnvChanges()))
.arg(m_runner->remoteExecutable())
- .arg(m_runner->arguments().join(QLatin1String(" "))).toUtf8());
+ .arg(m_runner->arguments()).toUtf8());
}
void MaemoRunControl::handleRemoteProcessFinished(qint64 exitCode)
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h
index 94828e5385d..dba27d2e18a 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h
@@ -74,7 +74,7 @@ public:
MaemoPortList *freePorts() { return &m_freePorts; }
MaemoDeviceConfig deviceConfig() const { return m_devConfig; }
QString remoteExecutable() const { return m_remoteExecutable; }
- QStringList arguments() const { return m_appArguments; }
+ QString arguments() const { return m_appArguments; }
QList<Utils::EnvironmentItem> userEnvChanges() const { return m_userEnvChanges; }
static const qint64 InvalidExitCode;
@@ -118,7 +118,7 @@ private:
MaemoUsedPortsGatherer * const m_portsGatherer;
const MaemoDeviceConfig m_devConfig;
const QString m_remoteExecutable;
- const QStringList m_appArguments;
+ const QString m_appArguments;
const QList<Utils::EnvironmentItem> m_userEnvChanges;
const MaemoPortList m_initialFreePorts;
QList<MaemoMountSpecification> m_mountSpecs;
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
index 8958d5686e0..128a96347e9 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
@@ -225,7 +225,7 @@ bool S60DeviceRunConfiguration::fromMap(const QVariantMap &map)
const QDir projectDir = QDir(target()->project()->projectDirectory());
m_proFilePath = projectDir.filePath(map.value(QLatin1String(PRO_FILE_KEY)).toString());
- m_commandLineArguments = map.value(QLatin1String(COMMAND_LINE_ARGUMENTS_KEY)).toStringList();
+ m_commandLineArguments = map.value(QLatin1String(COMMAND_LINE_ARGUMENTS_KEY)).toString();
if (m_proFilePath.isEmpty())
return false;
@@ -368,12 +368,12 @@ QString S60DeviceRunConfiguration::projectFilePath() const
return m_proFilePath;
}
-QStringList S60DeviceRunConfiguration::commandLineArguments() const
+QString S60DeviceRunConfiguration::commandLineArguments() const
{
return m_commandLineArguments;
}
-void S60DeviceRunConfiguration::setCommandLineArguments(const QStringList &args)
+void S60DeviceRunConfiguration::setCommandLineArguments(const QString &args)
{
m_commandLineArguments = args;
}
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
index bee69b71ecd..8e0b479febd 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
@@ -77,8 +77,8 @@ public:
ProjectExplorer::OutputFormatter *createOutputFormatter() const;
- QStringList commandLineArguments() const;
- void setCommandLineArguments(const QStringList &args);
+ QString commandLineArguments() const;
+ void setCommandLineArguments(const QString &args);
QString projectFilePath() const;
@@ -112,7 +112,7 @@ private:
void handleParserState(bool sucess);
QString m_proFilePath;
- QStringList m_commandLineArguments;
+ QString m_commandLineArguments;
bool m_validParse;
};
@@ -184,7 +184,7 @@ private:
QString m_serialPortName;
QString m_serialPortFriendlyName;
QString m_targetName;
- QStringList m_commandLineArguments;
+ QString m_commandLineArguments;
QString m_executableFileName;
QString m_qtDir;
QString m_qtBinPath;
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfigurationwidget.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfigurationwidget.cpp
index 339343dfac8..7aa0c2d7050 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfigurationwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfigurationwidget.cpp
@@ -46,7 +46,7 @@ S60DeviceRunConfigurationWidget::S60DeviceRunConfigurationWidget(
: QWidget(parent),
m_runConfiguration(runConfiguration),
m_detailsWidget(new Utils::DetailsWidget),
- m_argumentsLineEdit(new QLineEdit(m_runConfiguration->commandLineArguments().join(QString(QLatin1Char(' ')))))
+ m_argumentsLineEdit(new QLineEdit(m_runConfiguration->commandLineArguments()))
{
m_detailsWidget->setState(Utils::DetailsWidget::NoSummary);
QVBoxLayout *mainBoxLayout = new QVBoxLayout();
@@ -76,13 +76,7 @@ S60DeviceRunConfigurationWidget::S60DeviceRunConfigurationWidget(
void S60DeviceRunConfigurationWidget::argumentsEdited(const QString &text)
{
- const QString trimmed = text.trimmed();
- if (trimmed.isEmpty()) {
- m_runConfiguration->setCommandLineArguments(QStringList());
- } else {
- m_runConfiguration->setCommandLineArguments(trimmed.split(QLatin1Char(' '),
- QString::SkipEmptyParts));
- }
+ m_runConfiguration->setCommandLineArguments(text.trimmed());
}
void S60DeviceRunConfigurationWidget::runConfigurationEnabledChange(bool enabled)
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
index d01a3686537..2fb2d1c6fe1 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
@@ -327,7 +327,7 @@ S60EmulatorRunControl::S60EmulatorRunControl(S60EmulatorRunConfiguration *runCon
// stuff like the EPOCROOT and EPOCDEVICE env variable
Utils::Environment env = Utils::Environment::systemEnvironment();
runConfiguration->qt4Target()->activeBuildConfiguration()->toolChain()->addToEnvironment(env);
- m_applicationLauncher.setEnvironment(env.toStringList());
+ m_applicationLauncher.setEnvironment(env);
m_executable = runConfiguration->executable();
connect(&m_applicationLauncher, SIGNAL(applicationError(QString)),
@@ -342,7 +342,7 @@ S60EmulatorRunControl::S60EmulatorRunControl(S60EmulatorRunConfiguration *runCon
void S60EmulatorRunControl::start()
{
- m_applicationLauncher.start(ApplicationLauncher::Gui, m_executable, QStringList());
+ m_applicationLauncher.start(ApplicationLauncher::Gui, m_executable, QString());
emit started();
emit appendMessage(this, tr("Starting %1...").arg(QDir::toNativeSeparators(m_executable)), false);
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
index d19abc99fa4..54cb7f82946 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
@@ -37,6 +37,7 @@
#include "makestep.h"
#include <utils/qtcassert.h>
+#include <utils/qtcprocess.h>
#include <limits>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/projectexplorerconstants.h>
@@ -494,7 +495,7 @@ bool Qt4BuildConfiguration::compareToImportFrom(const QString &makefile)
QtVersion *version = qtVersion();
if (version->qmakeCommand() == qmakePath) {
// same qtversion
- QPair<QtVersion::QmakeBuildConfigs, QStringList> result =
+ QPair<QtVersion::QmakeBuildConfigs, QString> result =
QtVersionManager::scanMakeFile(makefile, version->defaultBuildConfig());
if (qmakeBuildConfiguration() == result.first) {
// The qmake Build Configuration are the same,
@@ -502,18 +503,18 @@ bool Qt4BuildConfiguration::compareToImportFrom(const QString &makefile)
// we have to compare without the spec/platform cmd argument
// and compare that on its own
QString workingDirectory = QFileInfo(makefile).absolutePath();
- QString actualSpec = extractSpecFromArgumentList(qs->userArguments(), workingDirectory, version);
+ QString userArgs = qs->userArguments();
+ QStringList actualArgs;
+ QString actualSpec = extractSpecFromArguments(&userArgs, workingDirectory, version, &actualArgs);
if (actualSpec.isEmpty()) {
// Easy one: the user has chosen not to override the settings
actualSpec = version->mkspec();
}
+ actualArgs += qs->moreArguments();
-
- QString parsedSpec = extractSpecFromArgumentList(result.second, workingDirectory, version);
- QStringList actualArgs = qs->moreArguments();
- actualArgs << qs->userArguments();
- actualArgs = removeSpecFromArgumentList(actualArgs);
- QStringList parsedArgs = removeSpecFromArgumentList(result.second);
+ QString qmakeArgs = result.second;
+ QStringList parsedArgs;
+ QString parsedSpec = extractSpecFromArguments(&qmakeArgs, workingDirectory, version, &parsedArgs);
if (debug) {
qDebug()<<"Actual args:"<<actualArgs;
@@ -558,59 +559,53 @@ bool Qt4BuildConfiguration::compareToImportFrom(const QString &makefile)
return false;
}
-QStringList Qt4BuildConfiguration::removeQMLInspectorFromArgumentList(const QStringList &old)
+void Qt4BuildConfiguration::removeQMLInspectorFromArguments(QString *args)
{
- QStringList result;
- foreach (const QString &str, old)
- if (!str.startsWith(QLatin1String(Constants::QMAKEVAR_QMLJSDEBUGGER_PATH)))
- result << str;
- return result;
+ for (Utils::QtcProcess::ArgIterator ait(args); ait.next(); )
+ if (ait.value().startsWith(QLatin1String(Constants::QMAKEVAR_QMLJSDEBUGGER_PATH)))
+ ait.deleteArg();
}
-// We match -spec and -platfrom separetly
-// We ignore -cache, because qmake contained a bug that it didn't
-// mention the -cache in the Makefile
-// That means changing the -cache option in the additional arguments
-// does not automatically rerun qmake. Alas, we could try more
-// intelligent matching for -cache, but i guess people rarely
-// do use that.
-
-QStringList Qt4BuildConfiguration::removeSpecFromArgumentList(const QStringList &old)
+QString Qt4BuildConfiguration::extractSpecFromArguments(QString *args,
+ const QString &directory, const QtVersion *version,
+ QStringList *outArgs)
{
- if (!old.contains("-spec") && !old.contains("-platform") && !old.contains("-cache"))
- return old;
- QStringList newList;
+ QString parsedSpec;
+
bool ignoreNext = false;
- foreach(const QString &item, old) {
+ bool nextIsSpec = false;
+ for (Utils::QtcProcess::ArgIterator ait(args); ait.next(); ) {
if (ignoreNext) {
ignoreNext = false;
- } else if (item == "-spec" || item == "-platform" || item == "-cache") {
+ ait.deleteArg();
+ } else if (nextIsSpec) {
+ nextIsSpec = false;
+ parsedSpec = QDir::cleanPath(ait.value());
+ ait.deleteArg();
+ } else if (ait.value() == QLatin1String("-spec") || ait.value() == QLatin1String("-platform")) {
+ nextIsSpec = true;
+ ait.deleteArg();
+ } else if (ait.value() == QLatin1String("-cache")) {
+ // We ignore -cache, because qmake contained a bug that it didn't
+ // mention the -cache in the Makefile.
+ // That means changing the -cache option in the additional arguments
+ // does not automatically rerun qmake. Alas, we could try more
+ // intelligent matching for -cache, but i guess people rarely
+ // do use that.
ignoreNext = true;
- } else {
- newList << item;
+ ait.deleteArg();
+ } else if (outArgs && ait.isSimple()) {
+ outArgs->append(ait.value());
}
}
- return newList;
-}
-
-QString Qt4BuildConfiguration::extractSpecFromArgumentList(const QStringList &list, QString directory, QtVersion *version)
-{
- int index = list.indexOf("-spec");
- if (index == -1)
- index = list.indexOf("-platform");
- if (index == -1)
- return QString();
-
- ++index;
- if (index >= list.length())
+ if (parsedSpec.isEmpty())
return QString();
QString baseMkspecDir = version->versionInfo().value("QMAKE_MKSPECS");
if (baseMkspecDir.isEmpty())
baseMkspecDir = version->versionInfo().value("QT_INSTALL_DATA") + "/mkspecs";
- QString parsedSpec = QDir::cleanPath(list.at(index));
#ifdef Q_OS_WIN
baseMkspecDir = baseMkspecDir.toLower();
parsedSpec = parsedSpec.toLower();
@@ -753,12 +748,12 @@ BuildConfiguration *Qt4BuildConfigurationFactory::create(ProjectExplorer::Target
qt4Target->addQt4BuildConfiguration(tr("%1 Debug").arg(buildConfigurationName),
version,
(version->defaultBuildConfig() | QtVersion::DebugBuild),
- QStringList(), QString());
+ QString(), QString());
BuildConfiguration *bc =
qt4Target->addQt4BuildConfiguration(tr("%1 Release").arg(buildConfigurationName),
version,
(version->defaultBuildConfig() & ~QtVersion::DebugBuild),
- QStringList(), QString());
+ QString(), QString());
return bc;
}
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
index 956c95e73c2..2a1940bbfec 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
@@ -109,9 +109,10 @@ public:
QString makefile() const;
bool compareToImportFrom(const QString &makefile);
- static QStringList removeQMLInspectorFromArgumentList(const QStringList &old);
- static QStringList removeSpecFromArgumentList(const QStringList &old);
- static QString extractSpecFromArgumentList(const QStringList &list, QString directory, QtVersion *version);
+ static void removeQMLInspectorFromArguments(QString *args);
+ static QString extractSpecFromArguments(QString *arguments,
+ const QString &directory, const QtVersion *version,
+ QStringList *outArgs = 0);
QVariantMap toMap() const;
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
index 081a20d2ae2..1056bf935d2 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
@@ -43,6 +43,7 @@
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/buildconfiguration.h>
#include <utils/qtcassert.h>
+#include <utils/qtcprocess.h>
#include <extensionsystem/pluginmanager.h>
#include <QtGui/QFileDialog>
@@ -416,20 +417,22 @@ void Qt4ProjectConfigWidget::importLabelClicked()
vm->addVersion(version);
}
- QPair<QtVersion::QmakeBuildConfigs, QStringList> result =
+ QPair<QtVersion::QmakeBuildConfigs, QString> result =
QtVersionManager::scanMakeFile(directory, version->defaultBuildConfig());
QtVersion::QmakeBuildConfigs qmakeBuildConfig = result.first;
- QStringList additionalArguments = Qt4BuildConfiguration::removeSpecFromArgumentList(result.second);
- QString parsedSpec = Qt4BuildConfiguration::extractSpecFromArgumentList(result.second, directory, version);
+
+ QString aa = result.second;
+ QString parsedSpec = Qt4BuildConfiguration::extractSpecFromArguments(&aa, directory, version);
QString versionSpec = version->mkspec();
+ QString additionalArguments;
if (parsedSpec.isEmpty() || parsedSpec == versionSpec || parsedSpec == "default") {
// using the default spec, don't modify additional arguments
} else {
- additionalArguments.prepend(parsedSpec);
- additionalArguments.prepend("-spec");
+ additionalArguments = "-spec " + Utils::QtcProcess::quoteArg(parsedSpec);
}
+ Utils::QtcProcess::addArgs(&additionalArguments, aa);
- additionalArguments = Qt4BuildConfiguration::removeQMLInspectorFromArgumentList(additionalArguments);
+ Qt4BuildConfiguration::removeQMLInspectorFromArguments(&additionalArguments);
// So we got all the information now apply it...
m_buildConfiguration->setQtVersion(version);
@@ -443,16 +446,25 @@ void Qt4ProjectConfigWidget::importLabelClicked()
// If we are switching to BuildAll we want "release" in there and no "debug"
// or "debug" in there and no "release"
// If we are switching to not BuildAl we want neither "release" nor "debug" in there
- QStringList makeCmdArguments = makeStep->userArguments();
bool debug = qmakeBuildConfig & QtVersion::DebugBuild;
- if (qmakeBuildConfig & QtVersion::BuildAll) {
- makeCmdArguments.removeAll(debug ? "release" : "debug");
- if (!makeCmdArguments.contains(debug ? "debug" : "release"))
- makeCmdArguments.append(debug ? "debug" : "release");
- } else {
- makeCmdArguments.removeAll("debug");
- makeCmdArguments.removeAll("release");
+ bool haveTag = !(qmakeBuildConfig & QtVersion::BuildAll);
+ QString makeCmdArguments = makeStep->userArguments();
+ Utils::QtcProcess::ArgIterator ait(&makeCmdArguments);
+ while (ait.next()) {
+ if (ait.value() == QLatin1String("debug")) {
+ if (!haveTag && debug)
+ haveTag = true;
+ else
+ ait.deleteArg();
+ } else if (ait.value() == QLatin1String("release")) {
+ if (!haveTag && !debug)
+ haveTag = true;
+ else
+ ait.deleteArg();
+ }
}
+ if (!haveTag)
+ ait.appendArg(QLatin1String(debug ? "debug" : "release"));
makeStep->setUserArguments(makeCmdArguments);
}
}
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
index 132d7be6bd4..5866a02e56d 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
@@ -47,6 +47,7 @@
#include <projectexplorer/environmenteditmodel.h>
#include <projectexplorer/persistentsettings.h>
#include <utils/qtcassert.h>
+#include <utils/qtcprocess.h>
#include <utils/pathchooser.h>
#include <utils/detailswidget.h>
#include <utils/debuggerlanguagechooser.h>
@@ -220,7 +221,7 @@ Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4Run
toplayout->addRow(tr("Executable:"), m_executableLineEdit);
QLabel *argumentsLabel = new QLabel(tr("Arguments:"), this);
- m_argumentsLineEdit = new QLineEdit(Utils::Environment::joinArgumentList(qt4RunConfiguration->baseCommandLineArguments()), this);
+ m_argumentsLineEdit = new QLineEdit(qt4RunConfiguration->commandLineArguments(), this);
argumentsLabel->setBuddy(m_argumentsLineEdit);
toplayout->addRow(argumentsLabel, m_argumentsLineEdit);
@@ -326,7 +327,7 @@ Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4Run
connect(qt4RunConfiguration, SIGNAL(baseWorkingDirectoryChanged(QString)),
this, SLOT(workingDirectoryChanged(QString)));
- connect(qt4RunConfiguration, SIGNAL(baseCommandLineArgumentsChanged(QString)),
+ connect(qt4RunConfiguration, SIGNAL(commandLineArgumentsChanged(QString)),
this, SLOT(commandLineArgumentsChanged(QString)));
connect(qt4RunConfiguration, SIGNAL(runModeChanged(ProjectExplorer::LocalApplicationRunConfiguration::RunMode)),
this, SLOT(runModeChanged(ProjectExplorer::LocalApplicationRunConfiguration::RunMode)));
@@ -424,7 +425,7 @@ void Qt4RunConfigurationWidget::workingDirectoryReseted()
void Qt4RunConfigurationWidget::argumentsEdited(const QString &args)
{
m_ignoreChange = true;
- m_qt4RunConfiguration->setBaseCommandLineArguments(args);
+ m_qt4RunConfiguration->setCommandLineArguments(args);
m_ignoreChange = false;
}
@@ -514,7 +515,7 @@ QVariantMap Qt4RunConfiguration::toMap() const
bool Qt4RunConfiguration::fromMap(const QVariantMap &map)
{
const QDir projectDir = QDir(target()->project()->projectDirectory());
- m_commandLineArguments = map.value(QLatin1String(COMMAND_LINE_ARGUMENTS_KEY)).toStringList();
+ m_commandLineArguments = map.value(QLatin1String(COMMAND_LINE_ARGUMENTS_KEY)).toString();
m_proFilePath = projectDir.filePath(map.value(QLatin1String(PRO_FILE_KEY)).toString());
m_runMode = map.value(QLatin1String(USE_TERMINAL_KEY), false).toBool() ? Console : Gui;
m_isUsingDyldImageSuffix = map.value(QLatin1String(USE_DYLD_IMAGE_SUFFIX_KEY), false).toBool();
@@ -573,12 +574,7 @@ QString Qt4RunConfiguration::baseWorkingDirectory() const
return ti.workingDir;
}
-QStringList Qt4RunConfiguration::commandLineArguments() const
-{
- return environment().expandVariables(baseCommandLineArguments());
-}
-
-QStringList Qt4RunConfiguration::baseCommandLineArguments() const
+QString Qt4RunConfiguration::commandLineArguments() const
{
return m_commandLineArguments;
}
@@ -651,10 +647,10 @@ void Qt4RunConfiguration::setBaseWorkingDirectory(const QString &wd)
emit baseWorkingDirectoryChanged(newWorkingDirectory);
}
-void Qt4RunConfiguration::setBaseCommandLineArguments(const QString &argumentsString)
+void Qt4RunConfiguration::setCommandLineArguments(const QString &argumentsString)
{
- m_commandLineArguments = Utils::Environment::parseCombinedArgString(argumentsString);
- emit baseCommandLineArgumentsChanged(argumentsString);
+ m_commandLineArguments = argumentsString;
+ emit commandLineArgumentsChanged(argumentsString);
}
void Qt4RunConfiguration::setRunMode(RunMode runMode)
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.h b/src/plugins/qt4projectmanager/qt4runconfiguration.h
index 413f214253e..3a57cc87f40 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.h
@@ -84,7 +84,7 @@ public:
virtual QString executable() const;
virtual RunMode runMode() const;
virtual QString workingDirectory() const;
- virtual QStringList commandLineArguments() const;
+ virtual QString commandLineArguments() const;
virtual Utils::Environment environment() const;
virtual QString dumperLibrary() const;
virtual QStringList dumperLibraryLocations() const;
@@ -101,7 +101,7 @@ public:
ProjectExplorer::OutputFormatter *createOutputFormatter() const;
signals:
- void baseCommandLineArgumentsChanged(const QString&);
+ void commandLineArgumentsChanged(const QString&);
void baseWorkingDirectoryChanged(const QString&);
void runModeChanged(ProjectExplorer::LocalApplicationRunConfiguration::RunMode runMode);
void usingDyldImageSuffixChanged(bool);
@@ -124,8 +124,7 @@ private:
void setRunMode(RunMode runMode);
void setBaseWorkingDirectory(const QString &workingDirectory);
QString baseWorkingDirectory() const;
- void setBaseCommandLineArguments(const QString &argumentsString);
- QStringList baseCommandLineArguments() const;
+ void setCommandLineArguments(const QString &argumentsString);
enum BaseEnvironmentBase { CleanEnvironmentBase = 0,
SystemEnvironmentBase = 1,
BuildEnvironmentBase = 2 };
@@ -141,7 +140,7 @@ private:
QList<Utils::EnvironmentItem> userEnvironmentChanges() const;
void updateTarget();
- QStringList m_commandLineArguments;
+ QString m_commandLineArguments;
QString m_proFilePath; // Full path to the Application Pro File
// Cached startup sub project information
diff --git a/src/plugins/qt4projectmanager/qt4target.cpp b/src/plugins/qt4projectmanager/qt4target.cpp
index ccdbbc6b228..e154d20ae7a 100644
--- a/src/plugins/qt4projectmanager/qt4target.cpp
+++ b/src/plugins/qt4projectmanager/qt4target.cpp
@@ -274,7 +274,7 @@ Qt4Project *Qt4Target::qt4Project() const
Qt4BuildConfiguration *Qt4Target::addQt4BuildConfiguration(QString displayName, QtVersion *qtversion,
QtVersion::QmakeBuildConfigs qmakeBuildConfiguration,
- QStringList additionalArguments,
+ QString additionalArguments,
QString directory)
{
Q_ASSERT(qtversion);
@@ -297,14 +297,14 @@ Qt4BuildConfiguration *Qt4Target::addQt4BuildConfiguration(QString displayName,
MakeStep* cleanStep = new MakeStep(cleanSteps);
cleanStep->setClean(true);
- cleanStep->setUserArguments(QStringList() << "clean");
+ cleanStep->setUserArguments("clean");
cleanSteps->insertStep(0, cleanStep);
if (!additionalArguments.isEmpty())
qmakeStep->setUserArguments(additionalArguments);
// set some options for qmake and make
if (qmakeBuildConfiguration & QtVersion::BuildAll) // debug_and_release => explicit targets
- makeStep->setUserArguments(QStringList() << (debug ? "debug" : "release"));
+ makeStep->setUserArguments(debug ? "debug" : "release");
bc->setQMakeBuildConfiguration(qmakeBuildConfiguration);
diff --git a/src/plugins/qt4projectmanager/qt4target.h b/src/plugins/qt4projectmanager/qt4target.h
index fa5c1cca857..d6df4457c5a 100644
--- a/src/plugins/qt4projectmanager/qt4target.h
+++ b/src/plugins/qt4projectmanager/qt4target.h
@@ -47,12 +47,12 @@ class Qt4DeployConfigurationFactory;
struct BuildConfigurationInfo {
explicit BuildConfigurationInfo(QtVersion *v = 0, QtVersion::QmakeBuildConfigs bc = QtVersion::QmakeBuildConfig(0),
- const QStringList &aa = QStringList(), const QString &d = QString()) :
+ const QString &aa = QString(), const QString &d = QString()) :
version(v), buildConfig(bc), additionalArguments(aa), directory(d)
{ }
QtVersion *version;
QtVersion::QmakeBuildConfigs buildConfig;
- QStringList additionalArguments;
+ QString additionalArguments;
QString directory;
};
@@ -71,7 +71,7 @@ public:
Internal::Qt4BuildConfiguration *addQt4BuildConfiguration(QString displayName,
QtVersion *qtversion,
QtVersion::QmakeBuildConfigs qmakeBuildConfiguration,
- QStringList additionalArguments,
+ QString additionalArguments,
QString directory);
void addRunConfigurationForPath(const QString &proFilePath);
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp
index ff9fb7ad4d0..16867f72787 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp
+++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp
@@ -49,6 +49,7 @@
#include <coreplugin/helpmanager.h>
#include <extensionsystem/pluginmanager.h>
#include <utils/qtcassert.h>
+#include <utils/qtcprocess.h>
#ifdef Q_OS_WIN
# include <utils/winutils.h>
#endif
@@ -884,25 +885,21 @@ bool QtVersionManager::makefileIsFor(const QString &makefile, const QString &pro
return srcFileInfo == proFileInfo;
}
-QPair<QtVersion::QmakeBuildConfigs, QStringList> QtVersionManager::scanMakeFile(const QString &makefile, QtVersion::QmakeBuildConfigs defaultBuildConfig)
+QPair<QtVersion::QmakeBuildConfigs, QString> QtVersionManager::scanMakeFile(const QString &makefile, QtVersion::QmakeBuildConfigs defaultBuildConfig)
{
if (debug)
qDebug()<<"ScanMakeFile, the gory details:";
QtVersion::QmakeBuildConfigs result = defaultBuildConfig;
- QStringList result2;
+ QString result2;
QString line = findQMakeLine(makefile, QLatin1String("# Command:"));
if (!line.isEmpty()) {
if (debug)
qDebug()<<"Found line"<<line;
line = trimLine(line);
- QStringList parts = splitLine(line);
- if (debug)
- qDebug()<<"Split into"<<parts;
QList<QMakeAssignment> assignments;
QList<QMakeAssignment> afterAssignments;
- QStringList additionalArguments;
- parseParts(parts, &assignments, &afterAssignments, &additionalArguments);
+ parseArgs(line, &assignments, &afterAssignments, &result2);
if (debug) {
dumpQMakeAssignments(assignments);
@@ -918,13 +915,12 @@ QPair<QtVersion::QmakeBuildConfigs, QStringList> QtVersionManager::scanMakeFile(
if (debug)
dumpQMakeAssignments(assignments);
- result2.append(additionalArguments);
foreach(const QMakeAssignment &qa, assignments)
- result2.append(qa.variable + qa.op + qa.value);
+ Utils::QtcProcess::addArg(&result2, qa.variable + qa.op + qa.value);
if (!afterAssignments.isEmpty()) {
- result2.append("-after");
+ Utils::QtcProcess::addArg(&result2, QLatin1String("-after"));
foreach(const QMakeAssignment &qa, afterAssignments)
- result2.append(qa.variable + qa.op + qa.value);
+ Utils::QtcProcess::addArg(&result2, qa.variable + qa.op + qa.value);
}
}
@@ -965,55 +961,23 @@ QString QtVersionManager::trimLine(const QString line)
return line.mid(firstSpace).trimmed();
}
-QStringList QtVersionManager::splitLine(const QString &line)
-{
- // Split on each " ", except on those which are escaped
- // On Unix also remove all escaping
- // On Windows also, but different escaping
- bool escape = false;
- QString currentWord;
- QStringList results;
- int length = line.length();
- for (int i=0; i<length; ++i) {
-#ifdef Q_OS_WIN
- if (line.at(i) == '"') {
- escape = !escape;
- } else if (escape || line.at(i) != ' ') {
- currentWord += line.at(i);
- } else {
- results << currentWord;
- currentWord.clear();;
- }
-#else
- if (escape) {
- currentWord += line.at(i);
- escape = false;
- } else if (line.at(i) == ' ') {
- results << currentWord;
- currentWord.clear();
- } else if (line.at(i) == '\\') {
- escape = true;
- } else {
- currentWord += line.at(i);
- }
-#endif
- }
- return results;
-}
-
-void QtVersionManager::parseParts(const QStringList &parts, QList<QMakeAssignment> *assignments, QList<QMakeAssignment> *afterAssignments, QStringList *additionalArguments)
+void QtVersionManager::parseArgs(const QString &args, QList<QMakeAssignment> *assignments, QList<QMakeAssignment> *afterAssignments, QString *additionalArguments)
{
QRegExp regExp("([^\\s\\+-]*)\\s*(\\+=|=|-=|~=)(.*)");
bool after = false;
bool ignoreNext = false;
- foreach (const QString &part, parts) {
+ *additionalArguments = args;
+ Utils::QtcProcess::ArgIterator ait(additionalArguments);
+ while (ait.next()) {
if (ignoreNext) {
// Ignoring
ignoreNext = false;
- } else if (part == "-after") {
+ ait.deleteArg();
+ } else if (ait.value() == QLatin1String("-after")) {
after = true;
- } else if(part.contains('=')) {
- if (regExp.exactMatch(part)) {
+ ait.deleteArg();
+ } else if (ait.value().contains(QLatin1Char('='))) {
+ if (regExp.exactMatch(ait.value())) {
QMakeAssignment qa;
qa.variable = regExp.cap(1);
qa.op = regExp.cap(2);
@@ -1025,21 +989,23 @@ void QtVersionManager::parseParts(const QStringList &parts, QList<QMakeAssignmen
} else {
qDebug()<<"regexp did not match";
}
- } else if (part == "-o") {
+ ait.deleteArg();
+ } else if (ait.value() == QLatin1String("-o")) {
ignoreNext = true;
- } else {
- additionalArguments->append(part);
- }
- }
+ ait.deleteArg();
#if defined(Q_OS_WIN32)
- additionalArguments->removeAll("-win32");
+ } else if (ait.value() == QLatin1String("-win32")) {
#elif defined(Q_OS_MAC)
- additionalArguments->removeAll("-macx");
+ } else if (ait.value() == QLatin1String("-macx")) {
#elif defined(Q_OS_QNX6)
- additionalArguments->removeAll("-qnx6");
+ } else if (ait.value() == QLatin1String("-qnx6")) {
#else
- additionalArguments->removeAll("-unix");
+ } else if (ait.value() == QLatin1String("-unix")) {
#endif
+ ait.deleteArg();
+ }
+ }
+ ait.deleteArg(); // The .pro file is always the last arg
}
/// This function extracts all the CONFIG+=debug, CONFIG+=release
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h
index 90d52c95ab2..9462a7ffb4d 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.h
+++ b/src/plugins/qt4projectmanager/qtversionmanager.h
@@ -265,9 +265,9 @@ public:
// Static Methods
static bool makefileIsFor(const QString &makefile, const QString &proFile);
- static QPair<QtVersion::QmakeBuildConfigs, QStringList> scanMakeFile(const QString &makefile,
- QtVersion::QmakeBuildConfigs defaultBuildConfig);
- static QString findQMakeBinaryFromMakefile(const QString &makefile);
+ static QPair<QtVersion::QmakeBuildConfigs, QString> scanMakeFile(const QString &makefile,
+ QtVersion::QmakeBuildConfigs defaultBuildConfig);
+ static QString findQMakeBinaryFromMakefile(const QString &directory);
bool isValidId(int id) const;
signals:
@@ -281,11 +281,10 @@ private:
static bool equals(QtVersion *a, QtVersion *b);
static QString findQMakeLine(const QString &directory, const QString &key);
static QString trimLine(const QString line);
- static QStringList splitLine(const QString &line);
- static void parseParts(const QStringList &parts,
- QList<QMakeAssignment> *assignments,
- QList<QMakeAssignment> *afterAssignments,
- QStringList *additionalArguments);
+ static void parseArgs(const QString &args,
+ QList<QMakeAssignment> *assignments,
+ QList<QMakeAssignment> *afterAssignments,
+ QString *additionalArguments);
static QtVersion::QmakeBuildConfigs qmakeBuildConfigFromCmdArgs(QList<QMakeAssignment> *assignments,
QtVersion::QmakeBuildConfigs defaultBuildConfig);
// Used by QtOptionsPage
diff --git a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
index 227b0b5946f..601472054e5 100644
--- a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
+++ b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
@@ -40,6 +40,7 @@
#include <projectexplorer/task.h>
#include <projectexplorer/taskhub.h>
#include <utils/qtcassert.h>
+#include <utils/qtcprocess.h>
#include <QtGui/QAction>
#include <QtGui/QFileDialog>
@@ -415,21 +416,20 @@ TargetSetupPage::recursivelyCheckDirectoryForBuild(const QString &directory, con
info.isTemporary = true;
}
- QPair<QtVersion::QmakeBuildConfigs, QStringList> result =
+ QPair<QtVersion::QmakeBuildConfigs, QString> result =
QtVersionManager::scanMakeFile(directory + "/Makefile", info.version->defaultBuildConfig());
info.buildConfig = result.first;
- info.additionalArguments = Qt4BuildConfiguration::removeSpecFromArgumentList(result.second);
-
- QString parsedSpec = Qt4BuildConfiguration::extractSpecFromArgumentList(result.second, directory, info.version);
+ QString aa = result.second;
+ QString parsedSpec = Qt4BuildConfiguration::extractSpecFromArguments(&aa, directory, info.version);
QString versionSpec = info.version->mkspec();
// Compare mkspecs and add to additional arguments
if (parsedSpec.isEmpty() || parsedSpec == versionSpec || parsedSpec == "default") {
// using the default spec, don't modify additional arguments
} else {
- info.additionalArguments.prepend(parsedSpec);
- info.additionalArguments.prepend("-spec");
+ info.additionalArguments = "-spec " + Utils::QtcProcess::quoteArg(parsedSpec);
}
+ Utils::QtcProcess::addArgs(&info.additionalArguments, aa);
results.append(info);
return results;
diff --git a/src/plugins/qt4projectmanager/wizards/targetsetuppage.h b/src/plugins/qt4projectmanager/wizards/targetsetuppage.h
index e29b9343b71..e354e6a243c 100644
--- a/src/plugins/qt4projectmanager/wizards/targetsetuppage.h
+++ b/src/plugins/qt4projectmanager/wizards/targetsetuppage.h
@@ -87,7 +87,7 @@ public:
QtVersion *version;
bool isTemporary;
QtVersion::QmakeBuildConfigs buildConfig;
- QStringList additionalArguments;
+ QString additionalArguments;
QString directory;
bool isExistingBuild;
bool isShadowBuild;