diff --git a/src/plugins/android/androidbuildapkstep.cpp b/src/plugins/android/androidbuildapkstep.cpp index 4507b661d8a..b53b181898e 100644 --- a/src/plugins/android/androidbuildapkstep.cpp +++ b/src/plugins/android/androidbuildapkstep.cpp @@ -613,10 +613,9 @@ QWidget *AndroidBuildApkStep::createConfigWidget() return new AndroidBuildApkWidget(this); } -void AndroidBuildApkStep::processFinished(int exitCode, QProcess::ExitStatus status) +void AndroidBuildApkStep::processFinished(bool success) { - AbstractProcessStep::processFinished(exitCode, status); - if (m_openPackageLocationForRun && status == QProcess::NormalExit && exitCode == 0) + if (m_openPackageLocationForRun && success) QTimer::singleShot(0, this, &AndroidBuildApkStep::showInGraphicalShell); } diff --git a/src/plugins/android/androidbuildapkstep.h b/src/plugins/android/androidbuildapkstep.h index 1df17d42005..1408afb8aae 100644 --- a/src/plugins/android/androidbuildapkstep.h +++ b/src/plugins/android/androidbuildapkstep.h @@ -62,7 +62,7 @@ private: void setupOutputFormatter(Utils::OutputFormatter *formatter) override; QWidget *createConfigWidget() override; void processStarted() override; - void processFinished(int exitCode, QProcess::ExitStatus status) override; + void processFinished(bool success) override; bool verifyKeystorePassword(); bool verifyCertificatePassword(); diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp index 6892aeca37c..1b642778629 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp @@ -716,10 +716,10 @@ QString CMakeBuildStep::baseEnvironmentText() const return Tr::tr("System Environment"); } -void CMakeBuildStep::processFinished(int exitCode, QProcess::ExitStatus status) +void CMakeBuildStep::processFinished(bool success) { - AbstractProcessStep::processFinished(exitCode, status); - emit progress(100, QString()); + Q_UNUSED(success) + emit progress(100, {}); } // CMakeBuildStepFactory diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.h b/src/plugins/cmakeprojectmanager/cmakebuildstep.h index b827b533650..8abedefe94f 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.h @@ -77,7 +77,7 @@ signals: private: Utils::CommandLine cmakeCommand() const; - void processFinished(int exitCode, QProcess::ExitStatus status) override; + void processFinished(bool success) override; bool fromMap(const QVariantMap &map) override; bool init() override; diff --git a/src/plugins/projectexplorer/abstractprocessstep.cpp b/src/plugins/projectexplorer/abstractprocessstep.cpp index 74919217996..4156989a84c 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.cpp +++ b/src/plugins/projectexplorer/abstractprocessstep.cpp @@ -4,13 +4,9 @@ #include "abstractprocessstep.h" #include "buildconfiguration.h" #include "buildstep.h" -#include "ioutputparser.h" #include "processparameters.h" -#include "project.h" #include "projectexplorer.h" #include "projectexplorersettings.h" -#include "target.h" -#include "task.h" #include #include @@ -262,14 +258,25 @@ bool AbstractProcessStep::setupProcessParameters(ProcessParameters *params) cons void AbstractProcessStep::Private::cleanUp(int exitCode, QProcess::ExitStatus status) { - // The process has finished, leftover data was read in handleProcessDone - q->processFinished(exitCode, status); - const bool returnValue = q->processSucceeded(exitCode, status) || m_ignoreReturnValue; + const QString command = m_param.effectiveCommand().toUserOutput(); + if (status == QProcess::NormalExit && exitCode == 0) { + emit q->addOutput(tr("The process \"%1\" exited normally.").arg(command), + BuildStep::OutputFormat::NormalMessage); + } else if (status == QProcess::NormalExit) { + emit q->addOutput(tr("The process \"%1\" exited with code %2.") + .arg(command, QString::number(exitCode)), + BuildStep::OutputFormat::ErrorMessage); + } else { + emit q->addOutput(tr("The process \"%1\" crashed.").arg(command), + BuildStep::OutputFormat::ErrorMessage); + } + const bool success = exitCode == 0 && status == QProcess::NormalExit + && !outputFormatter->hasFatalErrors(); + q->processFinished(success); if (m_process) m_process.release()->deleteLater(); - - q->finish(returnValue); + q->finish(success || m_ignoreReturnValue); } /*! @@ -293,19 +300,9 @@ void AbstractProcessStep::processStarted() The default implementation adds a line to the output window. */ -void AbstractProcessStep::processFinished(int exitCode, QProcess::ExitStatus status) +void AbstractProcessStep::processFinished(bool success) { - const QString command = d->m_param.effectiveCommand().toUserOutput(); - if (status == QProcess::NormalExit && exitCode == 0) { - emit addOutput(tr("The process \"%1\" exited normally.").arg(command), - BuildStep::OutputFormat::NormalMessage); - } else if (status == QProcess::NormalExit) { - emit addOutput(tr("The process \"%1\" exited with code %2.") - .arg(command, QString::number(exitCode)), - BuildStep::OutputFormat::ErrorMessage); - } else { - emit addOutput(tr("The process \"%1\" crashed.").arg(command), BuildStep::OutputFormat::ErrorMessage); - } + Q_UNUSED(success) } /*! @@ -327,18 +324,6 @@ void AbstractProcessStep::processStartupFailed() finish(false); } -/*! - Called to test whether a process succeeded or not. -*/ - -bool AbstractProcessStep::processSucceeded(int exitCode, QProcess::ExitStatus status) -{ - if (d->outputFormatter->hasFatalErrors()) - return false; - - return exitCode == 0 && status == QProcess::NormalExit; -} - void AbstractProcessStep::processReadyReadStdOutput() { QTC_ASSERT(d->m_process.get(), return); diff --git a/src/plugins/projectexplorer/abstractprocessstep.h b/src/plugins/projectexplorer/abstractprocessstep.h index 47c8ccef1a2..d0fe76c1bb1 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.h +++ b/src/plugins/projectexplorer/abstractprocessstep.h @@ -45,13 +45,12 @@ protected: virtual void finish(bool success); virtual void processStarted(); - virtual void processFinished(int exitCode, QProcess::ExitStatus status); virtual void processStartupFailed(); - virtual bool processSucceeded(int exitCode, QProcess::ExitStatus status); virtual void stdOutput(const QString &output); virtual void stdError(const QString &output); private: + virtual void processFinished(bool success); void processReadyReadStdOutput(); void processReadyReadStdError(); void handleProcessDone(); diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp index 5a5ccf602e5..bcb87214a22 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.cpp +++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp @@ -300,13 +300,11 @@ void QMakeStep::processStartupFailed() AbstractProcessStep::processStartupFailed(); } -bool QMakeStep::processSucceeded(int exitCode, QProcess::ExitStatus status) +void QMakeStep::processFinished(bool success) { - bool result = AbstractProcessStep::processSucceeded(exitCode, status); - if (!result) + if (!success) m_needToRunQMake = true; emit buildConfiguration()->buildDirectoryInitialized(); - return result; } void QMakeStep::finish(bool success) diff --git a/src/plugins/qmakeprojectmanager/qmakestep.h b/src/plugins/qmakeprojectmanager/qmakestep.h index 555904f53fb..03e8250ea2d 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.h +++ b/src/plugins/qmakeprojectmanager/qmakestep.h @@ -138,10 +138,10 @@ public: protected: bool fromMap(const QVariantMap &map) override; void processStartupFailed() override; - bool processSucceeded(int exitCode, QProcess::ExitStatus status) override; private: void finish(bool success) override; + void processFinished(bool success) override; void startOneCommand(const Utils::CommandLine &command); void runNextCommand();