diff --git a/src/plugins/projectexplorer/gccparser.cpp b/src/plugins/projectexplorer/gccparser.cpp index 949e9b042b6680695d404a717410a2a78f5b8d5e..76584bc9dcf686cd38f0594a8c2d266b84313c9b 100644 --- a/src/plugins/projectexplorer/gccparser.cpp +++ b/src/plugins/projectexplorer/gccparser.cpp @@ -33,42 +33,56 @@ using namespace ProjectExplorer; +namespace { + const char * const FILE_PATTERN("^(([a-zA-Z]:)?[^:]*\\.[^:]+):"); +} + GccParser::GccParser() { - m_regExp.setPattern("^([^\\(\\)]+[^\\d]):(\\d+):(\\d+:)*(\\s(warning|error):)?\\s(.+)$"); + // e.g. + // + m_regExp.setPattern(QString::fromLatin1(FILE_PATTERN) + "(\\d+):(\\d+:)*(\\s#?(warning|error):?)?\\s(.+)$"); m_regExp.setMinimal(true); m_regExpIncluded.setPattern("^.*from\\s([^:]+):(\\d+)(,|:)$"); m_regExpIncluded.setMinimal(true); - m_regExpLinker.setPattern("^(\\S*)\\(\\S+\\):\\s(.+)$"); + // e.g.: + // c:\Qt\4.6\lib/QtGuid4.dll: file not recognized: File format not recognized + m_regExpLinker.setPattern(QString::fromLatin1(FILE_PATTERN) + "((\\d+|[^:]*):)?\\s(.+)$"); m_regExpLinker.setMinimal(true); } void GccParser::stdError(const QString &line) { QString lne = line.trimmed(); - if (m_regExpLinker.indexIn(lne) > -1) { - QString description = m_regExpLinker.cap(2); - emit addTask(TaskWindow::Task(TaskWindow::Error, - description, - m_regExpLinker.cap(1) /* filename */, - -1 /* linenumber */, - Constants::TASK_CATEGORY_COMPILE)); - return; - } else if (m_regExp.indexIn(lne) > -1) { + if (m_regExp.indexIn(lne) > -1) { TaskWindow::Task task(TaskWindow::Unknown, - m_regExp.cap(6) /* description */, + m_regExp.cap(7) /* description */, m_regExp.cap(1) /* filename */, - m_regExp.cap(2).toInt() /* line number */, + m_regExp.cap(3).toInt() /* line number */, Constants::TASK_CATEGORY_COMPILE); - if (m_regExp.cap(5) == "warning") + if (m_regExp.cap(5) == QLatin1String("warning")) task.type = TaskWindow::Warning; - else if (m_regExp.cap(5) == "error") + else if (m_regExp.cap(5) == QLatin1String("error")) + task.type = TaskWindow::Error; + else if (task.description.startsWith(QLatin1String("undefined reference to"))) task.type = TaskWindow::Error; emit addTask(task); return; + } else if (m_regExpLinker.indexIn(lne) > -1) { + bool ok; + int lineno = m_regExpLinker.cap(4).toInt(&ok); + if (!ok) + lineno = -1; + QString description = m_regExpLinker.cap(5); + emit addTask(TaskWindow::Task(TaskWindow::Error, + description, + m_regExpLinker.cap(1) /* filename */, + lineno, + Constants::TASK_CATEGORY_COMPILE)); + return; } else if (m_regExpIncluded.indexIn(lne) > -1) { emit addTask(TaskWindow::Task(TaskWindow::Unknown, lne /* description */,