Skip to content
Snippets Groups Projects
Commit db0bf8f3 authored by dt's avatar dt
Browse files

Split GccParser into 2, one for ld parsing

To be reused in the intel linux icpc parser

Reviewed-By: hunger
parent 5fa34879
No related branches found
No related tags found
No related merge requests found
......@@ -28,6 +28,7 @@
**************************************************************************/
#include "gccparser.h"
#include "ldparser.h"
#include "projectexplorerconstants.h"
#include "taskwindow.h"
......@@ -35,9 +36,8 @@ using namespace ProjectExplorer;
namespace {
// opt. drive letter + filename: (2 brackets)
const char * const FILE_PATTERN("^(([A-Za-z]:)?[^:]+\\.[^:]+):");
// line no. or elf segment + offset: (1 bracket)
const char * const POSITION_PATTERN("(\\d+|\\(\\.[a-zA-Z0-9]*.0x[a-fA-F0-9]+\\)):");
const char * const FILE_PATTERN = "^(([A-Za-z]:)?[^:]+\\.[^:]+):";
const char * const COMMAND_PATTERN = "^(.*[\\\\/])?([a-z0-9]+-[a-z0-9]+-[a-z0-9]+-)?(gcc|g\\+\\+)(-[0-9\\.]+)?(\\.exe)?: ";
}
GccParser::GccParser()
......@@ -48,20 +48,16 @@ GccParser::GccParser()
m_regExpIncluded.setPattern("^.*from\\s([^:]+):(\\d+)(,|:)$");
m_regExpIncluded.setMinimal(true);
m_regExpLinker.setPattern(QString::fromLatin1(FILE_PATTERN) + '(' + QLatin1String(POSITION_PATTERN) + ")?\\s(.+)$");
m_regExpLinker.setMinimal(true);
// treat ld (and gold) as part of gcc for simplicity
// optional path with trailing slash
// optional arm-linux-none-thingy
// name of executable
// optional trailing version number
// optional .exe postfix
m_regExpGccNames.setPattern("^(.*[\\\\/])?([a-z0-9]+-[a-z0-9]+-[a-z0-9]+-)?(gcc|g\\+\\+|ld|gold)(-[0-9\\.]+)?(\\.exe)?: ");
m_regExpGccNames.setPattern(COMMAND_PATTERN);
m_regExpGccNames.setMinimal(true);
m_regExpInFunction.setPattern("^In (static |member )*function ");
m_regExpInFunction.setMinimal(true);
appendOutputParser(new LdParser);
}
void GccParser::stdError(const QString &line)
......@@ -76,8 +72,7 @@ void GccParser::stdError(const QString &line)
}
// Handle misc issues:
if (lne.startsWith(QLatin1String("collect2:")) ||
lne.startsWith(QLatin1String("ERROR:")) ||
if (lne.startsWith(QLatin1String("ERROR:")) ||
lne == QLatin1String("* cpp failed")) {
emit addTask(Task(Task::Error,
lne /* description */,
......@@ -118,25 +113,6 @@ void GccParser::stdError(const QString &line)
if (m_regExp.cap(5).startsWith(QChar('#')))
task.description = m_regExp.cap(5) + task.description;
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);
Task task(Task::Error,
description,
m_regExpLinker.cap(1) /* filename */,
lineno,
Constants::TASK_CATEGORY_COMPILE);
if (m_regExpInFunction.indexIn(description) > -1 ||
description.startsWith(QLatin1String("At global scope")) ||
description.startsWith(QLatin1String("instantiated from ")) ||
description.startsWith(QLatin1String("In instantiation of ")))
task.type = Task::Unknown;
emit addTask(task);
return;
} else if (m_regExpIncluded.indexIn(lne) > -1) {
......
......@@ -47,9 +47,7 @@ public:
private:
QRegExp m_regExp;
QRegExp m_regExpIncluded;
QRegExp m_regExpLinker;
QRegExp m_regExpGccNames;
QRegExp m_regExpInFunction;
};
} // namespace ProjectExplorer
......
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** Commercial Usage
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://qt.nokia.com/contact.
**
**************************************************************************/
#include "ldparser.h"
#include "projectexplorerconstants.h"
#include "taskwindow.h"
using namespace ProjectExplorer;
namespace {
// opt. drive letter + filename: (2 brackets)
const char * const FILE_PATTERN = "^(([A-Za-z]:)?[^:]+\\.[^:]+):";
// line no. or elf segment + offset: (1 bracket)
const char * const POSITION_PATTERN = "(\\d+|\\(\\.[a-zA-Z0-9]*.0x[a-fA-F0-9]+\\)):";
const char * const COMMAND_PATTERN = "^(.*[\\\\/])?([a-z0-9]+-[a-z0-9]+-[a-z0-9]+-)?(ld|gold)(-[0-9\\.]+)?(\\.exe)?: ";
}
LdParser::LdParser()
{
m_regExpLinker.setPattern(QString::fromLatin1(FILE_PATTERN) + '(' + QLatin1String(POSITION_PATTERN) + ")?\\s(.+)$");
m_regExpLinker.setMinimal(true);
m_regExpGccNames.setPattern(COMMAND_PATTERN);
m_regExpGccNames.setMinimal(true);
m_regExpInFunction.setPattern("^In (static |member )*function ");
m_regExpInFunction.setMinimal(true);
}
void LdParser::stdError(const QString &line)
{
QString lne = line.trimmed();
if (lne.startsWith(QLatin1String("TeamBuilder ")) ||
lne.startsWith(QLatin1String("distcc["))) {
IOutputParser::stdError(line);
return;
}
if (lne.startsWith(QLatin1String("collect2:"))) {
emit addTask(Task(Task::Error,
lne /* description */,
QString() /* filename */,
-1 /* linenumber */,
Constants::TASK_CATEGORY_COMPILE));
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);
Task task(Task::Error,
description,
m_regExpLinker.cap(1) /* filename */,
lineno,
Constants::TASK_CATEGORY_COMPILE);
if (m_regExpInFunction.indexIn(description) > -1 ||
description.startsWith(QLatin1String("At global scope")) ||
description.startsWith(QLatin1String("instantiated from ")) ||
description.startsWith(QLatin1String("In instantiation of ")))
task.type = Task::Unknown;
emit addTask(task);
return;
}
IOutputParser::stdError(line);
}
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** Commercial Usage
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://qt.nokia.com/contact.
**
**************************************************************************/
#ifndef LDPARSER_H
#define LDPARSER_H
#include "ioutputparser.h"
#include <QtCore/QRegExp>
namespace ProjectExplorer {
class LdParser : public ProjectExplorer::IOutputParser
{
Q_OBJECT
public:
LdParser();
virtual void stdError(const QString &line);
private:
QRegExp m_regExpLinker;
QRegExp m_regExpGccNames;
QRegExp m_regExpInFunction;
};
} // namespace ProjectExplorer
#endif // GCCPARSER_H
......@@ -77,7 +77,8 @@ HEADERS += projectexplorer.h \
doubletabwidget.h \
addtargetdialog.h \
buildenvironmentwidget.h \
buildconfigdialog.h
buildconfigdialog.h \
ldparser.h
SOURCES += projectexplorer.cpp \
projectwindow.cpp \
buildmanager.cpp \
......@@ -141,7 +142,8 @@ SOURCES += projectexplorer.cpp \
doubletabwidget.cpp \
addtargetdialog.cpp \
buildenvironmentwidget.cpp \
buildconfigdialog.cpp
buildconfigdialog.cpp \
ldparser.cpp
FORMS += processstep.ui \
editorsettingspropertiespage.ui \
runsettingspropertiespage.ui \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment