diff --git a/src/plugins/projectexplorer/gnumakeparser.cpp b/src/plugins/projectexplorer/gnumakeparser.cpp index 972f79fd417977fdc8544a8feeb57a08d5aa934b..92025f3ff3ae7a2a6c1592dbb0fc04ebe10fdaeb 100644 --- a/src/plugins/projectexplorer/gnumakeparser.cpp +++ b/src/plugins/projectexplorer/gnumakeparser.cpp @@ -43,7 +43,8 @@ namespace { } GnuMakeParser::GnuMakeParser(const QString &dir) : - m_suppressIssues(false) + m_suppressIssues(false), + m_fatalErrorCount(0) { m_makeDir.setPattern(QLatin1String(MAKE_PATTERN) + QLatin1String("(\\w+) directory .(.+).$")); @@ -55,6 +56,11 @@ GnuMakeParser::GnuMakeParser(const QString &dir) : addDirectory(dir); } +int GnuMakeParser::fatalErrors() const +{ + return m_fatalErrorCount; +} + void GnuMakeParser::stdOutput(const QString &line) { QString lne = line.trimmed(); @@ -75,6 +81,7 @@ void GnuMakeParser::stdError(const QString &line) QString lne = line.trimmed(); if (m_makefileError.indexIn(lne) > -1) { + ++m_fatalErrorCount; if (!m_suppressIssues) { m_suppressIssues = true; addTask(Task(Task::Error, @@ -86,6 +93,7 @@ void GnuMakeParser::stdError(const QString &line) return; } if (m_makeLine.indexIn(lne) > -1) { + ++m_fatalErrorCount; if (!m_suppressIssues) { m_suppressIssues = true; addTask(Task(Task::Error, diff --git a/src/plugins/projectexplorer/gnumakeparser.h b/src/plugins/projectexplorer/gnumakeparser.h index ca1b041ae04ed1b71441b2d7655e94942ef5c388..f5c693e519f78566816200c72bce257cbbcd8745 100644 --- a/src/plugins/projectexplorer/gnumakeparser.h +++ b/src/plugins/projectexplorer/gnumakeparser.h @@ -49,6 +49,8 @@ public: QStringList searchDirectories() const; + int fatalErrors() const; + public slots: virtual void taskAdded(const ProjectExplorer::Task &task); @@ -66,6 +68,8 @@ private: friend class ProjectExplorerPlugin; #endif bool m_suppressIssues; + + int m_fatalErrorCount; }; } // namespace ProjectExplorer diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp index 04fa070e5046ad5a9ec66325033808eb915be181..fb3184ac82bc8c3a791e882e77b6cf7c8dea9ecb 100644 --- a/src/plugins/qt4projectmanager/makestep.cpp +++ b/src/plugins/qt4projectmanager/makestep.cpp @@ -187,6 +187,16 @@ void MakeStep::run(QFutureInterface<bool> & fi) AbstractProcessStep::run(fi); } +bool MakeStep::processSucceeded(int exitCode, QProcess::ExitStatus status) +{ + // Symbian does retun 0, even on failed makes! So we check for fatal make errors here. + ProjectExplorer::GnuMakeParser *parser = qobject_cast<ProjectExplorer::GnuMakeParser *>(outputParser()); + if (parser && parser->fatalErrors() != 0) + return false; + + return AbstractProcessStep::processSucceeded(exitCode, status); +} + bool MakeStep::immutable() const { return false; diff --git a/src/plugins/qt4projectmanager/makestep.h b/src/plugins/qt4projectmanager/makestep.h index 133cd784ee8cc8ed0fce8abe3058dbbd7ecacd0d..8fe405f078aa4c4b4028868a1c9aaa8dc970132d 100644 --- a/src/plugins/qt4projectmanager/makestep.h +++ b/src/plugins/qt4projectmanager/makestep.h @@ -86,6 +86,8 @@ public: virtual bool init(); virtual void run(QFutureInterface<bool> &); + bool processSucceeded(int exitCode, QProcess::ExitStatus status); + virtual ProjectExplorer::BuildStepConfigWidget *createConfigWidget(); virtual bool immutable() const; QStringList userArguments();