diff --git a/src/plugins/qt4projectmanager/qt-s60/sbsv2parser.cpp b/src/plugins/qt4projectmanager/qt-s60/sbsv2parser.cpp index 8d0fa8f94926e759ca50b202040462df5c4341ac..50b4ceb716fe8c71797f0bb4af9fe97668ec8158 100644 --- a/src/plugins/qt4projectmanager/qt-s60/sbsv2parser.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/sbsv2parser.cpp @@ -148,23 +148,50 @@ void SbsV2Parser::readWarning() void SbsV2Parser::readRecipe() { Q_ASSERT(m_log.isStartElement() && m_log.name() == QLatin1String("recipe")); + const QString name = m_log.attributes().value(QLatin1String("name")).toString(); + m_currentSource = QDir(m_log.attributes().value("source").toString()).absolutePath(); + m_currentTarget = QDir(m_log.attributes().value("target").toString()).absolutePath(); + + int returnCode = 0; + QString outputText; + QXmlStreamReader::TokenType tokenType = QXmlStreamReader::Invalid; + while ((tokenType = m_log.readNext()) != QXmlStreamReader::Invalid) { + if (tokenType == QXmlStreamReader::Characters) { + outputText.append(m_log.text()); + } else if (tokenType == QXmlStreamReader::StartElement) { + if (m_log.name() == QLatin1String("status")) { + if (m_log.attributes().value(QLatin1String("exit")) == QLatin1String("failed")) + returnCode = m_log.attributes().value(QLatin1String("code")).toString().toInt(); + } + } else if (tokenType == QXmlStreamReader::EndElement) { + if (m_log.name() == QLatin1String("recipe")) + break; + } + } - if (name == QLatin1String("compile") || - name == QLatin1String("qmake_extra_pre_targetdep")) { - m_currentSource = QDir(m_log.attributes().value("source").toString()).absolutePath(); - m_currentTarget = QDir(m_log.attributes().value("target").toString()).absolutePath(); - qDebug() << "SOURCE:" << m_currentSource.absolutePath(); - qDebug() << "TARGET:" << m_currentTarget.absolutePath(); - - QStringList output = m_log.readElementText().split(QChar('\n')); - foreach (const QString &line, output) { - if (line.isEmpty() || line.startsWith(QChar('+'))) - continue; - IOutputParser::stdError(line); + QStringList output = outputText.split(QChar('\n')); + outputText.clear(); + foreach (const QString &line, output) { + if (line.isEmpty()) + continue; + if (line.startsWith(QChar('+'))) { + outputText.append(tr("Running command: %1\n").arg(line.mid(2))); + continue; } - } else { - m_log.skipCurrentElement(); + outputText.append(line); + outputText.append(QChar('\n')); + if (name == QLatin1String("compile") || name == QLatin1String("qmake_extra_pre_targetdep")) + IOutputParser::stdError(line); + } + + if (returnCode != 0) { + //: %1 is the SBSv2 build recipe name, %2 the return code of the failed command + QString description = tr("Recipe %1 failed with exit code %2.").arg(name).arg(returnCode); + m_hub->addTask(Task(Task::Error, description, QString(), -1, + ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)); + m_hub->addTask(Task(Task::Unknown, outputText, QString(), -1, + ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)); } }