Stop build on fatal make errors

... ignoring a error code of 0 from Make. This is necessary to
detect build failures on symbian

Do not show errors when ignoring the return value of a BuildStep
either.

Task-number: QTCREATORBUG-985
Reviewed-by: dt
This commit is contained in:
Tobias Hunger
2010-04-09 15:04:20 +02:00
parent 8cf30e86df
commit 62e4c92f26
4 changed files with 25 additions and 1 deletions

View File

@@ -43,7 +43,8 @@ namespace {
} }
GnuMakeParser::GnuMakeParser(const QString &dir) : GnuMakeParser::GnuMakeParser(const QString &dir) :
m_suppressIssues(false) m_suppressIssues(false),
m_fatalErrorCount(0)
{ {
m_makeDir.setPattern(QLatin1String(MAKE_PATTERN) + m_makeDir.setPattern(QLatin1String(MAKE_PATTERN) +
QLatin1String("(\\w+) directory .(.+).$")); QLatin1String("(\\w+) directory .(.+).$"));
@@ -55,6 +56,11 @@ GnuMakeParser::GnuMakeParser(const QString &dir) :
addDirectory(dir); addDirectory(dir);
} }
int GnuMakeParser::fatalErrors() const
{
return m_fatalErrorCount;
}
void GnuMakeParser::stdOutput(const QString &line) void GnuMakeParser::stdOutput(const QString &line)
{ {
QString lne = line.trimmed(); QString lne = line.trimmed();
@@ -75,6 +81,7 @@ void GnuMakeParser::stdError(const QString &line)
QString lne = line.trimmed(); QString lne = line.trimmed();
if (m_makefileError.indexIn(lne) > -1) { if (m_makefileError.indexIn(lne) > -1) {
++m_fatalErrorCount;
if (!m_suppressIssues) { if (!m_suppressIssues) {
m_suppressIssues = true; m_suppressIssues = true;
addTask(Task(Task::Error, addTask(Task(Task::Error,
@@ -86,6 +93,7 @@ void GnuMakeParser::stdError(const QString &line)
return; return;
} }
if (m_makeLine.indexIn(lne) > -1) { if (m_makeLine.indexIn(lne) > -1) {
++m_fatalErrorCount;
if (!m_suppressIssues) { if (!m_suppressIssues) {
m_suppressIssues = true; m_suppressIssues = true;
addTask(Task(Task::Error, addTask(Task(Task::Error,

View File

@@ -49,6 +49,8 @@ public:
QStringList searchDirectories() const; QStringList searchDirectories() const;
int fatalErrors() const;
public slots: public slots:
virtual void taskAdded(const ProjectExplorer::Task &task); virtual void taskAdded(const ProjectExplorer::Task &task);
@@ -66,6 +68,8 @@ private:
friend class ProjectExplorerPlugin; friend class ProjectExplorerPlugin;
#endif #endif
bool m_suppressIssues; bool m_suppressIssues;
int m_fatalErrorCount;
}; };
} // namespace ProjectExplorer } // namespace ProjectExplorer

View File

@@ -187,6 +187,16 @@ void MakeStep::run(QFutureInterface<bool> & fi)
AbstractProcessStep::run(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 bool MakeStep::immutable() const
{ {
return false; return false;

View File

@@ -86,6 +86,8 @@ public:
virtual bool init(); virtual bool init();
virtual void run(QFutureInterface<bool> &); virtual void run(QFutureInterface<bool> &);
bool processSucceeded(int exitCode, QProcess::ExitStatus status);
virtual ProjectExplorer::BuildStepConfigWidget *createConfigWidget(); virtual ProjectExplorer::BuildStepConfigWidget *createConfigWidget();
virtual bool immutable() const; virtual bool immutable() const;
QStringList userArguments(); QStringList userArguments();