Handle more make errors

This commit is contained in:
Tobias Hunger
2010-09-08 14:55:37 +02:00
parent de88538479
commit ba5750d486
4 changed files with 85 additions and 36 deletions

View File

@@ -49,7 +49,7 @@ GnuMakeParser::GnuMakeParser(const QString &dir) :
m_makeDir.setPattern(QLatin1String(MAKE_PATTERN) + m_makeDir.setPattern(QLatin1String(MAKE_PATTERN) +
QLatin1String("(\\w+) directory .(.+).$")); QLatin1String("(\\w+) directory .(.+).$"));
m_makeDir.setMinimal(true); m_makeDir.setMinimal(true);
m_makeLine.setPattern(QLatin1String(MAKE_PATTERN) + QLatin1String("\\*\\*\\*\\s(.*)$")); m_makeLine.setPattern(QLatin1String(MAKE_PATTERN) + QLatin1String("(\\*\\*\\*\\s)?(.*)$"));
m_makeLine.setMinimal(true); m_makeLine.setMinimal(true);
m_makefileError.setPattern(QLatin1String("^(.*):(\\d+):\\s\\*\\*\\*\\s(.*)$")); m_makefileError.setPattern(QLatin1String("^(.*):(\\d+):\\s\\*\\*\\*\\s(.*)$"));
m_makefileError.setMinimal(true); m_makefileError.setMinimal(true);
@@ -93,11 +93,12 @@ void GnuMakeParser::stdError(const QString &line)
return; return;
} }
if (m_makeLine.indexIn(lne) > -1) { if (m_makeLine.indexIn(lne) > -1) {
if (!m_makeLine.cap(7).isEmpty())
++m_fatalErrorCount; ++m_fatalErrorCount;
if (!m_suppressIssues) { if (!m_suppressIssues) {
m_suppressIssues = true; m_suppressIssues = true;
addTask(Task(Task::Error, addTask(Task(Task::Error,
m_makeLine.cap(7), m_makeLine.cap(8),
QString() /* filename */, QString() /* filename */,
-1, /* line */ -1, /* line */
Constants::TASK_CATEGORY_BUILDSYSTEM)); Constants::TASK_CATEGORY_BUILDSYSTEM));
@@ -308,6 +309,18 @@ void ProjectExplorerPlugin::testGnuMakeParserParsing_data()
Constants::TASK_CATEGORY_BUILDSYSTEM)) Constants::TASK_CATEGORY_BUILDSYSTEM))
<< QString() << QString()
<< QStringList(); << QStringList();
QTest::newRow("missing g++")
<< QStringList()
<< QString::fromLatin1("make: g++: Command not found")
<< OutputParserTester::STDERR
<< QString() << QString()
<< (QList<Task>()
<< Task(Task::Error,
QString::fromLatin1("g++: Command not found"),
QString(), -1,
Constants::TASK_CATEGORY_BUILDSYSTEM))
<< QString()
<< QStringList();
} }
void ProjectExplorerPlugin::testGnuMakeParserParsing() void ProjectExplorerPlugin::testGnuMakeParserParsing()

View File

@@ -509,9 +509,8 @@ public:
QMenu *m_contextMenu; QMenu *m_contextMenu;
QModelIndex m_contextMenuIndex; QModelIndex m_contextMenuIndex;
ITaskHandler *m_defaultHandler; ITaskHandler *m_defaultHandler;
QToolButton *m_filterWarningsButton; QToolButton *m_filterButton;
QToolButton *m_categoriesButton; QMenu *m_filterMenu;
QMenu *m_categoriesMenu;
TaskHub *m_taskHub; TaskHub *m_taskHub;
}; };
@@ -569,20 +568,16 @@ TaskWindow::TaskWindow(TaskHub *taskhub) : d(new TaskWindowPrivate)
connect(d->m_listview, SIGNAL(customContextMenuRequested(QPoint)), connect(d->m_listview, SIGNAL(customContextMenuRequested(QPoint)),
this, SLOT(showContextMenu(QPoint))); this, SLOT(showContextMenu(QPoint)));
d->m_filterWarningsButton = createFilterButton(d->m_model->taskTypeIcon(Task::Warning), d->m_filterMenu = new QMenu;
tr("Show Warnings"), connect(d->m_filterMenu, SIGNAL(aboutToShow()), this, SLOT(updateCategoriesMenu()));
this, SLOT(setShowWarnings(bool))); connect(d->m_filterMenu, SIGNAL(triggered(QAction*)), this, SLOT(filterMenuTriggered(QAction*)));
d->m_categoriesMenu = new QMenu; d->m_filterButton = new QToolButton;
connect(d->m_categoriesMenu, SIGNAL(aboutToShow()), this, SLOT(updateCategoriesMenu())); d->m_filterButton->setIcon(QIcon(QLatin1String(Core::Constants::ICON_FILTER)));
connect(d->m_categoriesMenu, SIGNAL(triggered(QAction*)), this, SLOT(filterCategoryTriggered(QAction*))); d->m_filterButton->setToolTip(tr("Filter by categories"));
d->m_filterButton->setAutoRaise(true);
d->m_categoriesButton = new QToolButton; d->m_filterButton->setPopupMode(QToolButton::InstantPopup);
d->m_categoriesButton->setIcon(QIcon(QLatin1String(Core::Constants::ICON_FILTER))); d->m_filterButton->setMenu(d->m_filterMenu);
d->m_categoriesButton->setToolTip(tr("Filter by categories"));
d->m_categoriesButton->setAutoRaise(true);
d->m_categoriesButton->setPopupMode(QToolButton::InstantPopup);
d->m_categoriesButton->setMenu(d->m_categoriesMenu);
connect(d->m_taskHub, SIGNAL(categoryAdded(QString, QString)), connect(d->m_taskHub, SIGNAL(categoryAdded(QString, QString)),
this, SLOT(addCategory(QString, QString))); this, SLOT(addCategory(QString, QString)));
@@ -598,7 +593,6 @@ TaskWindow::~TaskWindow()
{ {
Core::ICore::instance()->removeContextObject(d->m_taskWindowContext); Core::ICore::instance()->removeContextObject(d->m_taskWindowContext);
cleanContextMenu(); cleanContextMenu();
delete d->m_filterWarningsButton;
delete d->m_listview; delete d->m_listview;
delete d->m_filter; delete d->m_filter;
delete d->m_model; delete d->m_model;
@@ -607,7 +601,7 @@ TaskWindow::~TaskWindow()
QList<QWidget*> TaskWindow::toolBarWidgets() const QList<QWidget*> TaskWindow::toolBarWidgets() const
{ {
return QList<QWidget*>() << d->m_filterWarningsButton << d->m_categoriesButton; return QList<QWidget*>() << d->m_filterButton;
} }
QWidget *TaskWindow::outputWidget(QWidget *) QWidget *TaskWindow::outputWidget(QWidget *)
@@ -731,25 +725,49 @@ void TaskWindow::setShowWarnings(bool show)
void TaskWindow::updateCategoriesMenu() void TaskWindow::updateCategoriesMenu()
{ {
d->m_categoriesMenu->clear(); d->m_filterMenu->clear();
const QStringList filteredCategories = d->m_filter->filteredCategories(); const QStringList filteredCategories = d->m_filter->filteredCategories();
foreach (const QString &categoryId, d->m_model->categoryIds()) { foreach (const QString &categoryId, d->m_model->categoryIds()) {
const QString categoryName = d->m_model->categoryDisplayName(categoryId); const QString categoryName = d->m_model->categoryDisplayName(categoryId);
QAction *action = new QAction(d->m_categoriesMenu); QAction *action = new QAction(d->m_filterMenu);
action->setCheckable(true); action->setCheckable(true);
action->setText(categoryName); action->setText(categoryName);
action->setData(categoryId); action->setData(categoryId);
action->setChecked(!filteredCategories.contains(categoryId)); action->setChecked(!filteredCategories.contains(categoryId));
d->m_categoriesMenu->addAction(action); d->m_filterMenu->addAction(action);
} }
d->m_filterMenu->addSeparator();
QAction *unknownType = new QAction(d->m_model->taskTypeIcon(Task::Unknown),
tr("Informational"), d->m_filterMenu);
unknownType->setCheckable(true);
unknownType->setData(Task::Unknown);
unknownType->setChecked(d->m_filter->filterIncludesUnknowns());
d->m_filterMenu->addAction(unknownType);
QAction *warningType = new QAction(d->m_model->taskTypeIcon(Task::Warning),
tr("Warnings"), d->m_filterMenu);
warningType->setCheckable(true);
warningType->setData(Task::Warning);
warningType->setChecked(d->m_filter->filterIncludesUnknowns());
d->m_filterMenu->addAction(warningType);
QAction *errorType = new QAction(d->m_model->taskTypeIcon(Task::Error),
tr("Errors"), d->m_filterMenu);
errorType->setCheckable(true);
errorType->setData(Task::Error);
errorType->setChecked(d->m_filter->filterIncludesUnknowns());
d->m_filterMenu->addAction(errorType);
} }
void TaskWindow::filterCategoryTriggered(QAction *action) void TaskWindow::filterMenuTriggered(QAction *action)
{ {
if (action->data().type() == QVariant::String) {
QString categoryId = action->data().toString(); QString categoryId = action->data().toString();
Q_ASSERT(!categoryId.isEmpty()); Q_ASSERT(!categoryId.isEmpty());
@@ -763,6 +781,24 @@ void TaskWindow::filterCategoryTriggered(QAction *action)
} }
d->m_filter->setFilteredCategories(categories); d->m_filter->setFilteredCategories(categories);
} else {
bool ok;
Task::TaskType type = static_cast<Task::TaskType>(action->data().toInt(&ok));
Q_ASSERT(ok);
switch (type) {
case ProjectExplorer::Task::Unknown:
d->m_filter->setFilterIncludesUnknowns(action->isChecked());
break;
case ProjectExplorer::Task::Error:
d->m_filter->setFilterIncludesErrors(action->isChecked());
break;
case ProjectExplorer::Task::Warning:
d->m_filter->setFilterIncludesWarnings(action->isChecked());
break;
}
}
} }
int TaskWindow::taskCount() const int TaskWindow::taskCount() const

View File

@@ -91,7 +91,7 @@ private slots:
void contextMenuEntryTriggered(QAction *); void contextMenuEntryTriggered(QAction *);
void setShowWarnings(bool); void setShowWarnings(bool);
void updateCategoriesMenu(); void updateCategoriesMenu();
void filterCategoryTriggered(QAction *action); void filterMenuTriggered(QAction *action);
private: private:
void cleanContextMenu(); void cleanContextMenu();

View File

@@ -400,7 +400,7 @@ AutoDetectS60QtDevices::AutoDetectS60QtDevices(QObject *parent) :
// Detect a Qt version that is installed into a Symbian SDK // Detect a Qt version that is installed into a Symbian SDK
static QString detect_SDK_installedQt(const QString &epocRoot) static QString detect_SDK_installedQt(const QString &epocRoot)
{ {
const QString coreLibDllFileName = epocRoot + QLatin1String("/epoc32/release/winscw/udeb/QtCore.dll"); const QString coreLibDllFileName = epocRoot + QLatin1String("/epoc32/release/armv5/udeb/QtCore.dll");
QFile coreLibDllFile(coreLibDllFileName); QFile coreLibDllFile(coreLibDllFileName);
if (!coreLibDllFile.exists() || !coreLibDllFile.open(QIODevice::ReadOnly)) if (!coreLibDllFile.exists() || !coreLibDllFile.open(QIODevice::ReadOnly))
return QString(); return QString();