From daaf652fcd3774cdfabc5ddf78d434065a39be9f Mon Sep 17 00:00:00 2001 From: dt <qtc-committer@nokia.com> Date: Mon, 22 Jun 2009 16:11:45 +0200 Subject: [PATCH] Add a way to configure what cleaning does. Task-Nr: 235965 --- src/plugins/cmakeprojectmanager/makestep.cpp | 24 ++++++--- .../projectexplorer/abstractprocessstep.cpp | 14 +++++- .../projectexplorer/abstractprocessstep.h | 49 +++++++++++-------- .../buildsettingspropertiespage.cpp | 7 +++ .../projectexplorer/buildstepspage.cpp | 46 ++++++++++------- src/plugins/projectexplorer/buildstepspage.h | 5 +- src/plugins/projectexplorer/project.cpp | 8 ++- src/plugins/projectexplorer/project.h | 1 + src/plugins/qt4projectmanager/makestep.cpp | 48 ++++++++++-------- 9 files changed, 130 insertions(+), 72 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/makestep.cpp b/src/plugins/cmakeprojectmanager/makestep.cpp index 19b57094eaa..b7d99610831 100644 --- a/src/plugins/cmakeprojectmanager/makestep.cpp +++ b/src/plugins/cmakeprojectmanager/makestep.cpp @@ -63,14 +63,18 @@ bool MakeStep::init(const QString &buildConfiguration) setCommand(buildConfiguration, "make"); // TODO give full path here? #endif // Q_OS_WIN - if (value("clean").isValid() && value("clean").toBool()) { - setArguments(buildConfiguration, QStringList() << "clean"); - } else { - QStringList arguments = value(buildConfiguration, "buildTargets").toStringList(); - arguments << additionalArguments(buildConfiguration); - setArguments(buildConfiguration, arguments); // TODO - setEnvironment(buildConfiguration, m_pro->environment(buildConfiguration)); + if (!value(buildConfiguration, "cleanConfig").isValid() &&value("clean").isValid() && value("clean").toBool()) { + // Import old settings + setValue(buildConfiguration, "cleanConfig", true); + setAdditionalArguments(buildConfiguration, QStringList() << "clean"); } + + QStringList arguments = value(buildConfiguration, "buildTargets").toStringList(); + arguments << additionalArguments(buildConfiguration); + setArguments(buildConfiguration, arguments); // TODO + setEnvironment(buildConfiguration, m_pro->environment(buildConfiguration)); + setIgnoreReturnValue(buildConfiguration, value(buildConfiguration, "cleanConfig").isValid()); + return AbstractMakeStep::init(buildConfiguration); } @@ -190,6 +194,12 @@ QString MakeStepConfigWidget::displayName() const void MakeStepConfigWidget::init(const QString &buildConfiguration) { + if (!m_makeStep->value(buildConfiguration, "cleanConfig").isValid() && m_makeStep->value("clean").isValid() && m_makeStep->value("clean").toBool()) { + // Import old settings + m_makeStep->setValue(buildConfiguration, "cleanConfig", true); + m_makeStep->setAdditionalArguments(buildConfiguration, QStringList() << "clean"); + } + // disconnect to make the changes to the items disconnect(m_targetsList, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*))); m_buildConfiguration = buildConfiguration; diff --git a/src/plugins/projectexplorer/abstractprocessstep.cpp b/src/plugins/projectexplorer/abstractprocessstep.cpp index 4dfd33b5eea..cfa61253359 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.cpp +++ b/src/plugins/projectexplorer/abstractprocessstep.cpp @@ -44,6 +44,7 @@ static const char * const PROCESS_WORKINGDIRECTORY = "abstractProcess.workingDir static const char * const PROCESS_ARGUMENTS = "abstractProcess.arguments"; static const char * const PROCESS_ENABLED = "abstractProcess.enabled"; static const char * const PROCESS_ENVIRONMENT = "abstractProcess.Environment"; +static const char * const PROCESS_IGNORE_RETURN_VALUE = "abstractProcess.IgnoreReturnValue"; AbstractProcessStep::AbstractProcessStep(Project *pro) : BuildStep(pro) @@ -90,6 +91,16 @@ bool AbstractProcessStep::enabled(const QString &buildConfiguration) const return value(buildConfiguration, PROCESS_ENABLED).toBool(); } +void AbstractProcessStep::setIgnoreReturnValue(const QString &buildConfiguration, bool b) +{ + setValue(buildConfiguration, PROCESS_IGNORE_RETURN_VALUE, b); +} + +bool AbstractProcessStep::ignoreReturnValue(const QString &buildConfiguration) const +{ + return value(buildConfiguration, PROCESS_IGNORE_RETURN_VALUE).toBool(); +} + void AbstractProcessStep::setEnvironment(const QString &buildConfiguration, Environment env) { setValue(buildConfiguration, PROCESS_ENVIRONMENT, env.toStringList()); @@ -107,6 +118,7 @@ bool AbstractProcessStep::init(const QString &name) m_enabled = enabled(name); m_workingDirectory = workingDirectory(name); m_environment = environment(name); + m_ignoreReturnValue = ignoreReturnValue(name); return true; } @@ -172,7 +184,7 @@ void AbstractProcessStep::processStarted() bool AbstractProcessStep::processFinished(int exitCode, QProcess::ExitStatus status) { - const bool ok = (status == QProcess::NormalExit && exitCode == 0); + const bool ok = status == QProcess::NormalExit && (exitCode == 0 || m_ignoreReturnValue); if (ok) { emit addToOutputWindow(tr("<font color=\"#0000ff\">Exited with code %1.</font>").arg(m_process->exitCode())); } else { diff --git a/src/plugins/projectexplorer/abstractprocessstep.h b/src/plugins/projectexplorer/abstractprocessstep.h index afd4f3fafd4..5cb0ab4d2be 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.h +++ b/src/plugins/projectexplorer/abstractprocessstep.h @@ -66,11 +66,11 @@ class PROJECTEXPLORER_EXPORT AbstractProcessStep : public BuildStep Q_OBJECT public: AbstractProcessStep(Project *pro); - // reimplemented from BuildStep::init() - // You need to call this from YourBuildStep::init() + /// reimplemented from BuildStep::init() + /// You need to call this from YourBuildStep::init() virtual bool init(const QString & name); - // reimplemented from BuildStep::init() - // You need to call this from YourBuildStep::run() + /// reimplemented from BuildStep::init() + /// You need to call this from YourBuildStep::run() virtual void run(QFutureInterface<bool> &); // pure virtual functions inheritated from BuildStep @@ -79,40 +79,48 @@ public: virtual BuildStepConfigWidget *createConfigWidget() = 0; virtual bool immutable() const = 0; - // setCommand() sets the executable to run in the \p buildConfiguration + /// setCommand() sets the executable to run in the \p buildConfiguration void setCommand(const QString &buildConfiguration, const QString &cmd); - // returns the executable that is run for the \p buildConfiguration + /// returns the executable that is run for the \p buildConfiguration QString command(const QString &buildConfiguration) const; - // sets the workingDirectory for the process for a buildConfiguration - // if no workingDirectory is set, it falls back to the projects workingDirectory TODO remove that magic, thats bad + /// sets the workingDirectory for the process for a buildConfiguration + /// if no workingDirectory is set, it falls back to the projects workingDirectory TODO remove that magic, thats bad void setWorkingDirectory(const QString &buildConfiguration, const QString &workingDirectory); - //returns the workingDirectory for a \p buildConfiguration + /// returns the workingDirectory for a \p buildConfiguration QString workingDirectory(const QString &buildConfiguration) const; - // sets the command line arguments used by the process for a \p buildConfiguration + /// sets the command line arguments used by the process for a \p buildConfiguration void setArguments(const QString &buildConfiguration, const QStringList &arguments); - // returns the arguments used in the \p buildCOnfiguration + /// returns the arguments used in the \p buildCOnfiguration QStringList arguments(const QString &buildConfiguration) const; - // enables or disables a BuildStep - // Disabled BuildSteps immediately return true from their run method + /// enables or disables a BuildStep + /// Disabled BuildSteps immediately return true from their run method void setEnabled(const QString &buildConfiguration, bool b); - // returns wheter the BuildStep is disabled + /// returns wheter the BuildStep is disabled bool enabled(const QString &buildConfiguration) const; + /*! If ignoreReturnValue is set to true, then the abstractprocess step will + return sucess even if the return value indicates otherwise + */ + void setIgnoreReturnValue(const QString &buildConfiguration,bool b); + /*! returns ignoreReturnValue + */ + bool ignoreReturnValue(const QString &buildConfiguration) const; + void setEnvironment(const QString &buildConfiguration, Environment env); Environment environment(const QString &buildConfiguration) const; protected: - // Called after the process is started - // the default implementation adds a process started message to the output message + /// Called after the process is started + /// the default implementation adds a process started message to the output message virtual void processStarted(); - // Called after the process Finished - // the default implementation adds a line to the output window + /// Called after the process Finished + /// the default implementation adds a line to the output window virtual bool processFinished(int exitCode, QProcess::ExitStatus status); - // Called if the process could not be started, - // by default adds a message to the output window + /// Called if the process could not be started, + /// by default adds a message to the output window virtual void processStartupFailed(); virtual void stdOut(const QString &line); virtual void stdError(const QString &line); @@ -129,6 +137,7 @@ private: QString m_command; QStringList m_arguments; bool m_enabled; + bool m_ignoreReturnValue; QProcess *m_process; QEventLoop *m_eventLoop; ProjectExplorer::Environment m_environment; diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp index 5a03947cf6b..cc8311357df 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp @@ -187,11 +187,13 @@ void BuildSettingsWidget::updateBuildSettings() // Add pages QWidget *dummyWidget = new QWidget(this); QWidget *buildStepsWidget = new BuildStepsPage(m_project); + QWidget *cleanStepsWidget = new BuildStepsPage(m_project, true); BuildStepConfigWidget *generalConfigWidget = m_project->createConfigWidget(); QList<BuildStepConfigWidget *> subConfigWidgets = m_project->subConfigWidgets(); m_ui.buildSettingsWidgets->addWidget(dummyWidget); m_ui.buildSettingsWidgets->addWidget(buildStepsWidget); + m_ui.buildSettingsWidgets->addWidget(cleanStepsWidget); m_ui.buildSettingsWidgets->addWidget(generalConfigWidget); foreach (BuildStepConfigWidget *subConfigWidget, subConfigWidgets) m_ui.buildSettingsWidgets->addWidget(subConfigWidget); @@ -232,6 +234,11 @@ void BuildSettingsWidget::updateBuildSettings() m_itemToWidget.insert(buildStepsItem, buildStepsWidget); buildStepsItem->setText(0, tr("Build Steps")); buildConfigItem->addChild(buildStepsItem); + + QTreeWidgetItem *cleanStepsItem = new QTreeWidgetItem(); + m_itemToWidget.insert(cleanStepsItem, cleanStepsWidget); + cleanStepsItem->setText(0, tr("Clean Steps")); + buildConfigItem->addChild(cleanStepsItem); } m_ui.buildSettingsList->expandAll(); diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp index eb21ef0a969..04f29eae7ea 100644 --- a/src/plugins/projectexplorer/buildstepspage.cpp +++ b/src/plugins/projectexplorer/buildstepspage.cpp @@ -39,10 +39,11 @@ using namespace ProjectExplorer; using namespace ProjectExplorer::Internal; -BuildStepsPage::BuildStepsPage(Project *project) : +BuildStepsPage::BuildStepsPage(Project *project, bool clean) : BuildStepConfigWidget(), m_ui(new Ui::BuildStepsPage), - m_pro(project) + m_pro(project), + m_clean(clean) { m_ui->setupUi(this); @@ -74,8 +75,8 @@ BuildStepsPage::BuildStepsPage(Project *project) : } // Add buildsteps - foreach (BuildStep *bs, m_pro->buildSteps()) { - + const QList<BuildStep *> &steps = m_clean ? m_pro->cleanSteps() : m_pro->buildSteps(); + foreach (BuildStep *bs, steps) { connect(bs, SIGNAL(displayNameChanged(BuildStep *, QString)), this, SLOT(displayNameChanged(BuildStep *,QString))); @@ -94,13 +95,13 @@ BuildStepsPage::~BuildStepsPage() void BuildStepsPage::displayNameChanged(BuildStep *bs, const QString & /* displayName */) { - int index = m_pro->buildSteps().indexOf(bs); + int index = m_clean ? m_pro->cleanSteps().indexOf(bs) : m_pro->buildSteps().indexOf(bs); m_ui->buildSettingsList->invisibleRootItem()->child(index)->setText(0, bs->displayName()); } QString BuildStepsPage::displayName() const { - return tr("Build Steps"); + return m_clean ? tr("Clean Steps") : tr("Build Steps"); } void BuildStepsPage::init(const QString &buildConfiguration) @@ -168,19 +169,23 @@ void BuildStepsPage::addBuildStep() if (QAction *action = qobject_cast<QAction *>(sender())) { QPair<QString, IBuildStepFactory *> pair = m_addBuildStepHash.value(action); BuildStep *newStep = pair.second->create(m_pro, pair.first); - m_pro->insertBuildStep(0, newStep); + m_clean ? m_pro->insertCleanStep(0, newStep) : m_pro->insertBuildStep(0, newStep); QTreeWidgetItem *buildStepItem = new QTreeWidgetItem(); buildStepItem->setText(0, newStep->displayName()); m_ui->buildSettingsList->invisibleRootItem()->insertChild(0, buildStepItem); m_ui->buildSettingsWidget->insertWidget(0, newStep->createConfigWidget()); m_ui->buildSettingsList->setCurrentItem(buildStepItem); + + connect(newStep, SIGNAL(displayNameChanged(BuildStep *, QString)), + this, SLOT(displayNameChanged(BuildStep *,QString))); } } void BuildStepsPage::removeBuildStep() { int pos = m_ui->buildSettingsList->currentIndex().row(); - if (m_pro->buildSteps().at(pos)->immutable()) + const QList<BuildStep *> &steps = m_clean ? m_pro->cleanSteps() : m_pro->buildSteps(); + if (steps.at(pos)->immutable()) return; bool blockSignals = m_ui->buildSettingsList->blockSignals(true); delete m_ui->buildSettingsList->invisibleRootItem()->takeChild(pos); @@ -192,7 +197,7 @@ void BuildStepsPage::removeBuildStep() m_ui->buildSettingsList->setCurrentItem(m_ui->buildSettingsList->invisibleRootItem()->child(pos)); else m_ui->buildSettingsList->setCurrentItem(m_ui->buildSettingsList->invisibleRootItem()->child(pos - 1)); - m_pro->removeBuildStep(pos); + m_clean ? m_pro->removeCleanStep(pos) : m_pro->removeBuildStep(pos); updateBuildStepButtonsState(); } @@ -203,12 +208,13 @@ void BuildStepsPage::upBuildStep() return; if (pos > m_ui->buildSettingsList->invisibleRootItem()->childCount()-1) return; - if (m_pro->buildSteps().at(pos)->immutable() && m_pro->buildSteps().at(pos-1)->immutable()) + const QList<BuildStep *> &steps = m_clean ? m_pro->cleanSteps() : m_pro->buildSteps(); + if (steps.at(pos)->immutable() && steps.at(pos-1)->immutable()) return; bool blockSignals = m_ui->buildSettingsList->blockSignals(true); - m_pro->moveBuildStepUp(pos); - buildStepMoveUp(pos); + m_clean ? m_pro->moveCleanStepUp(pos) : m_pro->moveBuildStepUp(pos); + stepMoveUp(pos); QTreeWidgetItem *item = m_ui->buildSettingsList->invisibleRootItem()->child(pos - 1); m_ui->buildSettingsList->blockSignals(blockSignals); m_ui->buildSettingsList->setCurrentItem(item); @@ -222,12 +228,13 @@ void BuildStepsPage::downBuildStep() return; if (pos > m_ui->buildSettingsList->invisibleRootItem()->childCount() - 1) return; - if (m_pro->buildSteps().at(pos)->immutable() && m_pro->buildSteps().at(pos - 1)->immutable()) + const QList<BuildStep *> &steps = m_clean ? m_pro->cleanSteps() : m_pro->buildSteps(); + if (steps.at(pos)->immutable() && steps.at(pos - 1)->immutable()) return; bool blockSignals = m_ui->buildSettingsList->blockSignals(true); - m_pro->moveBuildStepUp(pos); - buildStepMoveUp(pos); + m_clean ? m_pro->moveCleanStepUp(pos) : m_pro->moveBuildStepUp(pos); + stepMoveUp(pos); QTreeWidgetItem *item = m_ui->buildSettingsList->invisibleRootItem()->child(pos); m_ui->buildSettingsList->blockSignals(blockSignals); m_ui->buildSettingsList->setCurrentItem(item); @@ -246,7 +253,7 @@ void BuildStepsPage::changeEvent(QEvent *e) } } -void BuildStepsPage::buildStepMoveUp(int pos) +void BuildStepsPage::stepMoveUp(int pos) { QWidget *widget = m_ui->buildSettingsWidget->widget(pos); m_ui->buildSettingsWidget->removeWidget(widget); @@ -259,10 +266,11 @@ void BuildStepsPage::updateBuildStepButtonsState() { int pos = m_ui->buildSettingsList->currentIndex().row(); - m_ui->buildStepRemoveToolButton->setEnabled(!m_pro->buildSteps().at(pos)->immutable()); - bool enableUp = pos>0 && !(m_pro->buildSteps().at(pos)->immutable() && m_pro->buildSteps().at(pos-1)->immutable()); + const QList<BuildStep *> &steps = m_clean ? m_pro->cleanSteps() : m_pro->buildSteps(); + m_ui->buildStepRemoveToolButton->setEnabled(!steps.at(pos)->immutable()); + bool enableUp = pos>0 && !(steps.at(pos)->immutable() && steps.at(pos-1)->immutable()); m_ui->buildStepUpToolButton->setEnabled(enableUp); bool enableDown = pos < (m_ui->buildSettingsList->invisibleRootItem()->childCount() - 1) && - !(m_pro->buildSteps().at(pos)->immutable() && m_pro->buildSteps().at(pos+1)->immutable()); + !(steps.at(pos)->immutable() && steps.at(pos+1)->immutable()); m_ui->buildStepDownToolButton->setEnabled(enableDown); } diff --git a/src/plugins/projectexplorer/buildstepspage.h b/src/plugins/projectexplorer/buildstepspage.h index 25932f4be69..96fa67006ae 100644 --- a/src/plugins/projectexplorer/buildstepspage.h +++ b/src/plugins/projectexplorer/buildstepspage.h @@ -50,7 +50,7 @@ class BuildStepsPage : public BuildStepConfigWidget { Q_OBJECT Q_DISABLE_COPY(BuildStepsPage) public: - explicit BuildStepsPage(Project *project); + explicit BuildStepsPage(Project *project, bool clean = false); virtual ~BuildStepsPage(); QString displayName() const; @@ -69,13 +69,14 @@ private slots: void downBuildStep(); private: - void buildStepMoveUp(int pos); + void stepMoveUp(int pos); void updateBuildStepButtonsState(); Ui::BuildStepsPage *m_ui; Project *m_pro; QString m_configuration; QHash<QAction *, QPair<QString, ProjectExplorer::IBuildStepFactory *> > m_addBuildStepHash; + bool m_clean; }; } // Internal diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index a259d7203f1..db43b350948 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -94,6 +94,12 @@ void Project::removeCleanStep(int position) m_cleanSteps.removeAt(position); } +void Project::moveCleanStepUp(int position) +{ + BuildStep *bs = m_cleanSteps.takeAt(position); + m_cleanSteps.insert(position - 1, bs); +} + void Project::addBuildConfiguration(const QString &name) { if (buildConfigurations().contains(name) ) @@ -166,8 +172,6 @@ QList<BuildStep *> Project::cleanSteps() const return m_cleanSteps; } - - void Project::saveSettings() { PersistentSettingsWriter writer; diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index 0af783ec4fb..1fa16ac6606 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -91,6 +91,7 @@ public: QList<BuildStep *> cleanSteps() const; void insertCleanStep(int position, BuildStep *step); void removeCleanStep(int position); + void moveCleanStepUp(int position); // Build configuration void addBuildConfiguration(const QString &name); diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp index 018f07a41a4..ae892f6be95 100644 --- a/src/plugins/qt4projectmanager/makestep.cpp +++ b/src/plugins/qt4projectmanager/makestep.cpp @@ -83,17 +83,18 @@ bool MakeStep::init(const QString &name) } setCommand(name, makeCmd); - bool skipMakeClean = false; - QStringList args; - if (value("clean").isValid() && value("clean").toBool()) { - args = QStringList() << "clean"; - if (!QDir(workingDirectory).exists(QLatin1String("Makefile"))) { - skipMakeClean = true; - } - } else { - args = value(name, "makeargs").toStringList(); + if (!value(name, "cleanConfig").isValid() && value("clean").isValid() && value("clean").toBool()) { + // Import old settings + setValue(name, "cleanConfig", true); + setValue(name, "makeargs", QStringList() << "clean"); } + // If we are cleaning, then make can fail with a error code, but that doesn't mean + // we should stop the clean queue + // That is mostly so that rebuild works on a alrady clean project + setIgnoreReturnValue(name, value(name, "cleanConfig").isValid()); + QStringList args = value(name, "makeargs").toStringList(); + // -w option enables "Enter"/"Leaving directory" messages, which we need for detecting the // absolute file path // FIXME doing this without the user having a way to override this is rather bad @@ -105,7 +106,7 @@ bool MakeStep::init(const QString &name) args << "-w"; } - setEnabled(name, !skipMakeClean); + setEnabled(name, true); setArguments(name, args); ProjectExplorer::ToolChain::ToolChainType type = qobject_cast<Qt4Project *>(project())->qtVersion(name)->toolchainType(); @@ -171,21 +172,26 @@ QString MakeStepConfigWidget::displayName() const void MakeStepConfigWidget::init(const QString &buildConfiguration) { m_buildConfiguration = buildConfiguration; - bool showPage0 = buildConfiguration.isNull(); - m_ui.stackedWidget->setCurrentIndex(showPage0 ? 0 : 1); - if (!showPage0) { - Qt4Project *pro = qobject_cast<Qt4Project *>(m_makeStep->project()); - Q_ASSERT(pro); - m_ui.makeLabel->setText(tr("Override %1:").arg(pro->makeCommand(buildConfiguration))); + Qt4Project *pro = qobject_cast<Qt4Project *>(m_makeStep->project()); + Q_ASSERT(pro); + + if (!m_makeStep->value(buildConfiguration, "cleanConfig").isValid() && m_makeStep->value("clean").isValid() && m_makeStep->value("clean").toBool()) { + // Import old settings + m_makeStep->setValue(buildConfiguration, "cleanConfig", true); + m_makeStep->setValue(buildConfiguration, "makeargs", QStringList() << "clean"); + } - const QString &makeCmd = m_makeStep->value(buildConfiguration, "makeCmd").toString(); - m_ui.makeLineEdit->setText(makeCmd); + m_ui.stackedWidget->setCurrentIndex(1); - const QStringList &makeArguments = + m_ui.makeLabel->setText(tr("Override %1:").arg(pro->makeCommand(buildConfiguration))); + + const QString &makeCmd = m_makeStep->value(buildConfiguration, "makeCmd").toString(); + m_ui.makeLineEdit->setText(makeCmd); + + const QStringList &makeArguments = m_makeStep->value(buildConfiguration, "makeargs").toStringList(); - m_ui.makeArgumentsLineEdit->setText(ProjectExplorer::Environment::joinArgumentList(makeArguments)); - } + m_ui.makeArgumentsLineEdit->setText(ProjectExplorer::Environment::joinArgumentList(makeArguments)); } void MakeStepConfigWidget::makeLineEditTextEdited() -- GitLab