diff --git a/src/plugins/projectexplorer/kit.cpp b/src/plugins/projectexplorer/kit.cpp index 6f233524925..3190a450a5e 100644 --- a/src/plugins/projectexplorer/kit.cpp +++ b/src/plugins/projectexplorer/kit.cpp @@ -31,6 +31,7 @@ #include "kitmanager.h" #include "ioutputparser.h" +#include "osparser.h" #include #include @@ -399,15 +400,10 @@ void Kit::addToEnvironment(Utils::Environment &env) const IOutputParser *Kit::createOutputParser() const { - IOutputParser *first = 0; + IOutputParser *first = new OsParser; QList infoList = KitManager::kitInformation(); - foreach (KitInformation *ki, infoList) { - IOutputParser *next = ki->createOutputParser(this); - if (!first) - first = next; - else - first->appendOutputParser(next); - } + foreach (KitInformation *ki, infoList) + first->appendOutputParser(ki->createOutputParser(this)); return first; } diff --git a/src/plugins/projectexplorer/osparser.cpp b/src/plugins/projectexplorer/osparser.cpp new file mode 100644 index 00000000000..3747b6dd766 --- /dev/null +++ b/src/plugins/projectexplorer/osparser.cpp @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "osparser.h" +#include "projectexplorerconstants.h" +#include "task.h" + +#include + +using namespace ProjectExplorer; + +OsParser::OsParser() : + m_hasFatalError(false) +{ + setObjectName(QLatin1String("OsParser")); +} + +void OsParser::stdError(const QString &line) +{ + IOutputParser::stdError(line); +} + +void OsParser::stdOutput(const QString &line) +{ + if (Utils::HostOsInfo::isWindowsHost()) { + const QString trimmed = line.trimmed(); + if (trimmed == QLatin1String("The process cannot access the file because it is being used by another process.")) { + addTask(Task(Task::Error, tr("The process can not access the file because it is being used by another process.\n" + "Please close all running instances of your application before starting a build."), + Utils::FileName(), -1, Constants::TASK_CATEGORY_COMPILE)); + m_hasFatalError = true; + } + } + IOutputParser::stdOutput(line); +} + +bool OsParser::hasFatalErrors() const +{ + return m_hasFatalError || IOutputParser::hasFatalErrors(); +} diff --git a/src/plugins/projectexplorer/osparser.h b/src/plugins/projectexplorer/osparser.h new file mode 100644 index 00000000000..ccc4364ca09 --- /dev/null +++ b/src/plugins/projectexplorer/osparser.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef OSPARSER_H +#define OSPARSER_H + +#include "ioutputparser.h" + +#include + +#include + +namespace ProjectExplorer { + +class OsParser : public ProjectExplorer::IOutputParser +{ + Q_OBJECT + +public: + OsParser(); + + void stdError(const QString &line); + void stdOutput(const QString &line); + + bool hasFatalErrors() const; + +private: + bool m_hasFatalError; +}; + +} // namespace ProjectExplorer + +#endif // OSPARSER_H diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro index 484db7658f4..6515e3ef99b 100644 --- a/src/plugins/projectexplorer/projectexplorer.pro +++ b/src/plugins/projectexplorer/projectexplorer.pro @@ -12,6 +12,7 @@ HEADERS += projectexplorer.h \ gcctoolchain.h \ localapplicationrunconfiguration.h \ localenvironmentaspect.h \ + osparser.h \ projectexplorer_export.h \ projectwindow.h \ removetaskhandler.h \ @@ -147,6 +148,7 @@ SOURCES += projectexplorer.cpp \ gcctoolchain.cpp \ localapplicationrunconfiguration.cpp \ localenvironmentaspect.cpp \ + osparser.cpp \ projectwindow.cpp \ removetaskhandler.cpp \ kit.cpp \ diff --git a/src/plugins/projectexplorer/projectexplorer.qbs b/src/plugins/projectexplorer/projectexplorer.qbs index f0edff32cb6..3c3f423c503 100644 --- a/src/plugins/projectexplorer/projectexplorer.qbs +++ b/src/plugins/projectexplorer/projectexplorer.qbs @@ -92,6 +92,7 @@ QtcPlugin { "miniprojecttargetselector.cpp", "miniprojecttargetselector.h", "namedwidget.cpp", "namedwidget.h", "nodesvisitor.cpp", "nodesvisitor.h", + "osparser.cpp", "osparser.h", "outputparser_test.cpp", "outputparser_test.h", "pluginfilefactory.cpp", "pluginfilefactory.h", "processparameters.cpp", "processparameters.h",