Add a way to configure what cleaning does.

Task-Nr: 235965
This commit is contained in:
dt
2009-06-22 16:11:45 +02:00
parent 4b6130fe39
commit daaf652fcd
9 changed files with 131 additions and 73 deletions

View File

@@ -63,14 +63,18 @@ bool MakeStep::init(const QString &buildConfiguration)
setCommand(buildConfiguration, "make"); // TODO give full path here? setCommand(buildConfiguration, "make"); // TODO give full path here?
#endif // Q_OS_WIN #endif // Q_OS_WIN
if (value("clean").isValid() && value("clean").toBool()) { if (!value(buildConfiguration, "cleanConfig").isValid() &&value("clean").isValid() && value("clean").toBool()) {
setArguments(buildConfiguration, QStringList() << "clean"); // Import old settings
} else { setValue(buildConfiguration, "cleanConfig", true);
QStringList arguments = value(buildConfiguration, "buildTargets").toStringList(); setAdditionalArguments(buildConfiguration, QStringList() << "clean");
arguments << additionalArguments(buildConfiguration);
setArguments(buildConfiguration, arguments); // TODO
setEnvironment(buildConfiguration, m_pro->environment(buildConfiguration));
} }
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); return AbstractMakeStep::init(buildConfiguration);
} }
@@ -190,6 +194,12 @@ QString MakeStepConfigWidget::displayName() const
void MakeStepConfigWidget::init(const QString &buildConfiguration) 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 to make the changes to the items
disconnect(m_targetsList, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*))); disconnect(m_targetsList, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(itemChanged(QListWidgetItem*)));
m_buildConfiguration = buildConfiguration; m_buildConfiguration = buildConfiguration;

View File

@@ -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_ARGUMENTS = "abstractProcess.arguments";
static const char * const PROCESS_ENABLED = "abstractProcess.enabled"; static const char * const PROCESS_ENABLED = "abstractProcess.enabled";
static const char * const PROCESS_ENVIRONMENT = "abstractProcess.Environment"; static const char * const PROCESS_ENVIRONMENT = "abstractProcess.Environment";
static const char * const PROCESS_IGNORE_RETURN_VALUE = "abstractProcess.IgnoreReturnValue";
AbstractProcessStep::AbstractProcessStep(Project *pro) AbstractProcessStep::AbstractProcessStep(Project *pro)
: BuildStep(pro) : BuildStep(pro)
@@ -90,6 +91,16 @@ bool AbstractProcessStep::enabled(const QString &buildConfiguration) const
return value(buildConfiguration, PROCESS_ENABLED).toBool(); 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) void AbstractProcessStep::setEnvironment(const QString &buildConfiguration, Environment env)
{ {
setValue(buildConfiguration, PROCESS_ENVIRONMENT, env.toStringList()); setValue(buildConfiguration, PROCESS_ENVIRONMENT, env.toStringList());
@@ -107,6 +118,7 @@ bool AbstractProcessStep::init(const QString &name)
m_enabled = enabled(name); m_enabled = enabled(name);
m_workingDirectory = workingDirectory(name); m_workingDirectory = workingDirectory(name);
m_environment = environment(name); m_environment = environment(name);
m_ignoreReturnValue = ignoreReturnValue(name);
return true; return true;
} }
@@ -172,7 +184,7 @@ void AbstractProcessStep::processStarted()
bool AbstractProcessStep::processFinished(int exitCode, QProcess::ExitStatus status) 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) { if (ok) {
emit addToOutputWindow(tr("<font color=\"#0000ff\">Exited with code %1.</font>").arg(m_process->exitCode())); emit addToOutputWindow(tr("<font color=\"#0000ff\">Exited with code %1.</font>").arg(m_process->exitCode()));
} else { } else {

View File

@@ -66,11 +66,11 @@ class PROJECTEXPLORER_EXPORT AbstractProcessStep : public BuildStep
Q_OBJECT Q_OBJECT
public: public:
AbstractProcessStep(Project *pro); AbstractProcessStep(Project *pro);
// reimplemented from BuildStep::init() /// reimplemented from BuildStep::init()
// You need to call this from YourBuildStep::init() /// You need to call this from YourBuildStep::init()
virtual bool init(const QString & name); virtual bool init(const QString & name);
// reimplemented from BuildStep::init() /// reimplemented from BuildStep::init()
// You need to call this from YourBuildStep::run() /// You need to call this from YourBuildStep::run()
virtual void run(QFutureInterface<bool> &); virtual void run(QFutureInterface<bool> &);
// pure virtual functions inheritated from BuildStep // pure virtual functions inheritated from BuildStep
@@ -79,40 +79,48 @@ public:
virtual BuildStepConfigWidget *createConfigWidget() = 0; virtual BuildStepConfigWidget *createConfigWidget() = 0;
virtual bool immutable() const = 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); 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; QString command(const QString &buildConfiguration) const;
// sets the workingDirectory for the process for a buildConfiguration /// 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 /// 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); 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; 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); 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; QStringList arguments(const QString &buildConfiguration) const;
// enables or disables a BuildStep /// enables or disables a BuildStep
// Disabled BuildSteps immediately return true from their run method /// Disabled BuildSteps immediately return true from their run method
void setEnabled(const QString &buildConfiguration, bool b); 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; 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); void setEnvironment(const QString &buildConfiguration, Environment env);
Environment environment(const QString &buildConfiguration) const; Environment environment(const QString &buildConfiguration) const;
protected: protected:
// Called after the process is started /// Called after the process is started
// the default implementation adds a process started message to the output message /// the default implementation adds a process started message to the output message
virtual void processStarted(); virtual void processStarted();
// Called after the process Finished /// Called after the process Finished
// the default implementation adds a line to the output window /// the default implementation adds a line to the output window
virtual bool processFinished(int exitCode, QProcess::ExitStatus status); virtual bool processFinished(int exitCode, QProcess::ExitStatus status);
// Called if the process could not be started, /// Called if the process could not be started,
// by default adds a message to the output window /// by default adds a message to the output window
virtual void processStartupFailed(); virtual void processStartupFailed();
virtual void stdOut(const QString &line); virtual void stdOut(const QString &line);
virtual void stdError(const QString &line); virtual void stdError(const QString &line);
@@ -129,6 +137,7 @@ private:
QString m_command; QString m_command;
QStringList m_arguments; QStringList m_arguments;
bool m_enabled; bool m_enabled;
bool m_ignoreReturnValue;
QProcess *m_process; QProcess *m_process;
QEventLoop *m_eventLoop; QEventLoop *m_eventLoop;
ProjectExplorer::Environment m_environment; ProjectExplorer::Environment m_environment;

View File

@@ -187,11 +187,13 @@ void BuildSettingsWidget::updateBuildSettings()
// Add pages // Add pages
QWidget *dummyWidget = new QWidget(this); QWidget *dummyWidget = new QWidget(this);
QWidget *buildStepsWidget = new BuildStepsPage(m_project); QWidget *buildStepsWidget = new BuildStepsPage(m_project);
QWidget *cleanStepsWidget = new BuildStepsPage(m_project, true);
BuildStepConfigWidget *generalConfigWidget = m_project->createConfigWidget(); BuildStepConfigWidget *generalConfigWidget = m_project->createConfigWidget();
QList<BuildStepConfigWidget *> subConfigWidgets = m_project->subConfigWidgets(); QList<BuildStepConfigWidget *> subConfigWidgets = m_project->subConfigWidgets();
m_ui.buildSettingsWidgets->addWidget(dummyWidget); m_ui.buildSettingsWidgets->addWidget(dummyWidget);
m_ui.buildSettingsWidgets->addWidget(buildStepsWidget); m_ui.buildSettingsWidgets->addWidget(buildStepsWidget);
m_ui.buildSettingsWidgets->addWidget(cleanStepsWidget);
m_ui.buildSettingsWidgets->addWidget(generalConfigWidget); m_ui.buildSettingsWidgets->addWidget(generalConfigWidget);
foreach (BuildStepConfigWidget *subConfigWidget, subConfigWidgets) foreach (BuildStepConfigWidget *subConfigWidget, subConfigWidgets)
m_ui.buildSettingsWidgets->addWidget(subConfigWidget); m_ui.buildSettingsWidgets->addWidget(subConfigWidget);
@@ -232,6 +234,11 @@ void BuildSettingsWidget::updateBuildSettings()
m_itemToWidget.insert(buildStepsItem, buildStepsWidget); m_itemToWidget.insert(buildStepsItem, buildStepsWidget);
buildStepsItem->setText(0, tr("Build Steps")); buildStepsItem->setText(0, tr("Build Steps"));
buildConfigItem->addChild(buildStepsItem); 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(); m_ui.buildSettingsList->expandAll();

View File

@@ -39,10 +39,11 @@
using namespace ProjectExplorer; using namespace ProjectExplorer;
using namespace ProjectExplorer::Internal; using namespace ProjectExplorer::Internal;
BuildStepsPage::BuildStepsPage(Project *project) : BuildStepsPage::BuildStepsPage(Project *project, bool clean) :
BuildStepConfigWidget(), BuildStepConfigWidget(),
m_ui(new Ui::BuildStepsPage), m_ui(new Ui::BuildStepsPage),
m_pro(project) m_pro(project),
m_clean(clean)
{ {
m_ui->setupUi(this); m_ui->setupUi(this);
@@ -74,8 +75,8 @@ BuildStepsPage::BuildStepsPage(Project *project) :
} }
// Add buildsteps // 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)), connect(bs, SIGNAL(displayNameChanged(BuildStep *, QString)),
this, SLOT(displayNameChanged(BuildStep *,QString))); this, SLOT(displayNameChanged(BuildStep *,QString)));
@@ -94,13 +95,13 @@ BuildStepsPage::~BuildStepsPage()
void BuildStepsPage::displayNameChanged(BuildStep *bs, const QString & /* displayName */) 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()); m_ui->buildSettingsList->invisibleRootItem()->child(index)->setText(0, bs->displayName());
} }
QString BuildStepsPage::displayName() const QString BuildStepsPage::displayName() const
{ {
return tr("Build Steps"); return m_clean ? tr("Clean Steps") : tr("Build Steps");
} }
void BuildStepsPage::init(const QString &buildConfiguration) void BuildStepsPage::init(const QString &buildConfiguration)
@@ -168,19 +169,23 @@ void BuildStepsPage::addBuildStep()
if (QAction *action = qobject_cast<QAction *>(sender())) { if (QAction *action = qobject_cast<QAction *>(sender())) {
QPair<QString, IBuildStepFactory *> pair = m_addBuildStepHash.value(action); QPair<QString, IBuildStepFactory *> pair = m_addBuildStepHash.value(action);
BuildStep *newStep = pair.second->create(m_pro, pair.first); 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(); QTreeWidgetItem *buildStepItem = new QTreeWidgetItem();
buildStepItem->setText(0, newStep->displayName()); buildStepItem->setText(0, newStep->displayName());
m_ui->buildSettingsList->invisibleRootItem()->insertChild(0, buildStepItem); m_ui->buildSettingsList->invisibleRootItem()->insertChild(0, buildStepItem);
m_ui->buildSettingsWidget->insertWidget(0, newStep->createConfigWidget()); m_ui->buildSettingsWidget->insertWidget(0, newStep->createConfigWidget());
m_ui->buildSettingsList->setCurrentItem(buildStepItem); m_ui->buildSettingsList->setCurrentItem(buildStepItem);
connect(newStep, SIGNAL(displayNameChanged(BuildStep *, QString)),
this, SLOT(displayNameChanged(BuildStep *,QString)));
} }
} }
void BuildStepsPage::removeBuildStep() void BuildStepsPage::removeBuildStep()
{ {
int pos = m_ui->buildSettingsList->currentIndex().row(); 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; return;
bool blockSignals = m_ui->buildSettingsList->blockSignals(true); bool blockSignals = m_ui->buildSettingsList->blockSignals(true);
delete m_ui->buildSettingsList->invisibleRootItem()->takeChild(pos); delete m_ui->buildSettingsList->invisibleRootItem()->takeChild(pos);
@@ -192,7 +197,7 @@ void BuildStepsPage::removeBuildStep()
m_ui->buildSettingsList->setCurrentItem(m_ui->buildSettingsList->invisibleRootItem()->child(pos)); m_ui->buildSettingsList->setCurrentItem(m_ui->buildSettingsList->invisibleRootItem()->child(pos));
else else
m_ui->buildSettingsList->setCurrentItem(m_ui->buildSettingsList->invisibleRootItem()->child(pos - 1)); 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(); updateBuildStepButtonsState();
} }
@@ -203,12 +208,13 @@ void BuildStepsPage::upBuildStep()
return; return;
if (pos > m_ui->buildSettingsList->invisibleRootItem()->childCount()-1) if (pos > m_ui->buildSettingsList->invisibleRootItem()->childCount()-1)
return; 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; return;
bool blockSignals = m_ui->buildSettingsList->blockSignals(true); bool blockSignals = m_ui->buildSettingsList->blockSignals(true);
m_pro->moveBuildStepUp(pos); m_clean ? m_pro->moveCleanStepUp(pos) : m_pro->moveBuildStepUp(pos);
buildStepMoveUp(pos); stepMoveUp(pos);
QTreeWidgetItem *item = m_ui->buildSettingsList->invisibleRootItem()->child(pos - 1); QTreeWidgetItem *item = m_ui->buildSettingsList->invisibleRootItem()->child(pos - 1);
m_ui->buildSettingsList->blockSignals(blockSignals); m_ui->buildSettingsList->blockSignals(blockSignals);
m_ui->buildSettingsList->setCurrentItem(item); m_ui->buildSettingsList->setCurrentItem(item);
@@ -222,12 +228,13 @@ void BuildStepsPage::downBuildStep()
return; return;
if (pos > m_ui->buildSettingsList->invisibleRootItem()->childCount() - 1) if (pos > m_ui->buildSettingsList->invisibleRootItem()->childCount() - 1)
return; 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; return;
bool blockSignals = m_ui->buildSettingsList->blockSignals(true); bool blockSignals = m_ui->buildSettingsList->blockSignals(true);
m_pro->moveBuildStepUp(pos); m_clean ? m_pro->moveCleanStepUp(pos) : m_pro->moveBuildStepUp(pos);
buildStepMoveUp(pos); stepMoveUp(pos);
QTreeWidgetItem *item = m_ui->buildSettingsList->invisibleRootItem()->child(pos); QTreeWidgetItem *item = m_ui->buildSettingsList->invisibleRootItem()->child(pos);
m_ui->buildSettingsList->blockSignals(blockSignals); m_ui->buildSettingsList->blockSignals(blockSignals);
m_ui->buildSettingsList->setCurrentItem(item); 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); QWidget *widget = m_ui->buildSettingsWidget->widget(pos);
m_ui->buildSettingsWidget->removeWidget(widget); m_ui->buildSettingsWidget->removeWidget(widget);
@@ -259,10 +266,11 @@ void BuildStepsPage::updateBuildStepButtonsState()
{ {
int pos = m_ui->buildSettingsList->currentIndex().row(); int pos = m_ui->buildSettingsList->currentIndex().row();
m_ui->buildStepRemoveToolButton->setEnabled(!m_pro->buildSteps().at(pos)->immutable()); const QList<BuildStep *> &steps = m_clean ? m_pro->cleanSteps() : m_pro->buildSteps();
bool enableUp = pos>0 && !(m_pro->buildSteps().at(pos)->immutable() && m_pro->buildSteps().at(pos-1)->immutable()); 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); m_ui->buildStepUpToolButton->setEnabled(enableUp);
bool enableDown = pos < (m_ui->buildSettingsList->invisibleRootItem()->childCount() - 1) && 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); m_ui->buildStepDownToolButton->setEnabled(enableDown);
} }

View File

@@ -50,7 +50,7 @@ class BuildStepsPage : public BuildStepConfigWidget {
Q_OBJECT Q_OBJECT
Q_DISABLE_COPY(BuildStepsPage) Q_DISABLE_COPY(BuildStepsPage)
public: public:
explicit BuildStepsPage(Project *project); explicit BuildStepsPage(Project *project, bool clean = false);
virtual ~BuildStepsPage(); virtual ~BuildStepsPage();
QString displayName() const; QString displayName() const;
@@ -69,13 +69,14 @@ private slots:
void downBuildStep(); void downBuildStep();
private: private:
void buildStepMoveUp(int pos); void stepMoveUp(int pos);
void updateBuildStepButtonsState(); void updateBuildStepButtonsState();
Ui::BuildStepsPage *m_ui; Ui::BuildStepsPage *m_ui;
Project *m_pro; Project *m_pro;
QString m_configuration; QString m_configuration;
QHash<QAction *, QPair<QString, ProjectExplorer::IBuildStepFactory *> > m_addBuildStepHash; QHash<QAction *, QPair<QString, ProjectExplorer::IBuildStepFactory *> > m_addBuildStepHash;
bool m_clean;
}; };
} // Internal } // Internal

View File

@@ -94,6 +94,12 @@ void Project::removeCleanStep(int position)
m_cleanSteps.removeAt(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) void Project::addBuildConfiguration(const QString &name)
{ {
if (buildConfigurations().contains(name) ) if (buildConfigurations().contains(name) )
@@ -166,8 +172,6 @@ QList<BuildStep *> Project::cleanSteps() const
return m_cleanSteps; return m_cleanSteps;
} }
void Project::saveSettings() void Project::saveSettings()
{ {
PersistentSettingsWriter writer; PersistentSettingsWriter writer;

View File

@@ -91,6 +91,7 @@ public:
QList<BuildStep *> cleanSteps() const; QList<BuildStep *> cleanSteps() const;
void insertCleanStep(int position, BuildStep *step); void insertCleanStep(int position, BuildStep *step);
void removeCleanStep(int position); void removeCleanStep(int position);
void moveCleanStepUp(int position);
// Build configuration // Build configuration
void addBuildConfiguration(const QString &name); void addBuildConfiguration(const QString &name);

View File

@@ -83,17 +83,18 @@ bool MakeStep::init(const QString &name)
} }
setCommand(name, makeCmd); setCommand(name, makeCmd);
bool skipMakeClean = false; if (!value(name, "cleanConfig").isValid() && value("clean").isValid() && value("clean").toBool()) {
QStringList args; // Import old settings
if (value("clean").isValid() && value("clean").toBool()) { setValue(name, "cleanConfig", true);
args = QStringList() << "clean"; setValue(name, "makeargs", QStringList() << "clean");
if (!QDir(workingDirectory).exists(QLatin1String("Makefile"))) {
skipMakeClean = true;
}
} else {
args = value(name, "makeargs").toStringList();
} }
// 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 // -w option enables "Enter"/"Leaving directory" messages, which we need for detecting the
// absolute file path // absolute file path
// FIXME doing this without the user having a way to override this is rather bad // 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"; args << "-w";
} }
setEnabled(name, !skipMakeClean); setEnabled(name, true);
setArguments(name, args); setArguments(name, args);
ProjectExplorer::ToolChain::ToolChainType type = qobject_cast<Qt4Project *>(project())->qtVersion(name)->toolchainType(); 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) void MakeStepConfigWidget::init(const QString &buildConfiguration)
{ {
m_buildConfiguration = 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());
Qt4Project *pro = qobject_cast<Qt4Project *>(m_makeStep->project()); Q_ASSERT(pro);
Q_ASSERT(pro);
m_ui.makeLabel->setText(tr("Override %1:").arg(pro->makeCommand(buildConfiguration)));
const QString &makeCmd = m_makeStep->value(buildConfiguration, "makeCmd").toString(); if (!m_makeStep->value(buildConfiguration, "cleanConfig").isValid() && m_makeStep->value("clean").isValid() && m_makeStep->value("clean").toBool()) {
m_ui.makeLineEdit->setText(makeCmd); // Import old settings
m_makeStep->setValue(buildConfiguration, "cleanConfig", true);
const QStringList &makeArguments = m_makeStep->setValue(buildConfiguration, "makeargs", QStringList() << "clean");
m_makeStep->value(buildConfiguration, "makeargs").toStringList();
m_ui.makeArgumentsLineEdit->setText(ProjectExplorer::Environment::joinArgumentList(makeArguments));
} }
m_ui.stackedWidget->setCurrentIndex(1);
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));
} }
void MakeStepConfigWidget::makeLineEditTextEdited() void MakeStepConfigWidget::makeLineEditTextEdited()