diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 0dba078adca..029aba3d94e 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -153,6 +153,13 @@ void CMakeBuildConfiguration::setMsvcVersion(const QString &msvcVersion) emit msvcVersionChanged(); } +ProjectExplorer::IOutputParser *CMakeBuildConfiguration::createOutputParser() const +{ + if (m_toolChain) + return m_toolChain->outputParser(); + return 0; +} + /*! \class CMakeBuildConfigurationFactory */ diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index 6fb65a90176..867838c46bc 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -62,6 +62,8 @@ public: QVariantMap toMap() const; + ProjectExplorer::IOutputParser *createOutputParser() const; + signals: void msvcVersionChanged(); diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp index 1d575e33c37..ab83eb03547 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp @@ -50,6 +50,7 @@ const char * const BUILD_DIRECTORY_KEY("GenericProjectManager.GenericBuildConfig GenericBuildConfiguration::GenericBuildConfiguration(GenericTarget *parent) : BuildConfiguration(parent, QLatin1String(GENERIC_BC_ID)) { + } GenericBuildConfiguration::GenericBuildConfiguration(GenericTarget *parent, const QString &id) @@ -116,6 +117,14 @@ GenericTarget *GenericBuildConfiguration::genericTarget() const return static_cast(target()); } +ProjectExplorer::IOutputParser *GenericBuildConfiguration::createOutputParser() const +{ + ProjectExplorer::ToolChain *tc = genericTarget()->genericProject()->toolChain(); + if (tc) + return tc->outputParser(); + return 0; +} + /*! \class GenericBuildConfigurationFactory diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h index cc70616ff15..eae5d0e749c 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h @@ -57,6 +57,8 @@ public: QVariantMap toMap() const; + ProjectExplorer::IOutputParser *createOutputParser() const; + protected: GenericBuildConfiguration(GenericTarget *parent, GenericBuildConfiguration *source); GenericBuildConfiguration(GenericTarget *parent, const QString &id); diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index e2c938656dc..d095206106e 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -44,6 +44,7 @@ namespace ProjectExplorer { class Target; +class IOutputParser; class PROJECTEXPLORER_EXPORT BuildConfiguration : public ProjectConfiguration { @@ -73,6 +74,13 @@ public: virtual QVariantMap toMap() const; + // Creates a suitable outputparser for custom build steps + // (based on the toolchain) + // TODO this is not great API + // it's mainly so that custom build systems are better integrated + // with the generic project manager + virtual IOutputParser *createOutputParser() const = 0; + signals: void environmentChanged(); void buildDirectoryChanged(); diff --git a/src/plugins/projectexplorer/processstep.cpp b/src/plugins/projectexplorer/processstep.cpp index fbb9ee8e351..7254dc59c7c 100644 --- a/src/plugins/projectexplorer/processstep.cpp +++ b/src/plugins/projectexplorer/processstep.cpp @@ -94,7 +94,7 @@ bool ProcessStep::init() AbstractProcessStep::setCommand(m_command); AbstractProcessStep::setEnabled(m_enabled); AbstractProcessStep::setArguments(m_arguments); - setOutputParser(0); + setOutputParser(buildConfiguration()->createOutputParser()); return AbstractProcessStep::init(); } diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index 4c014c06d63..b8807d8eef7 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -556,6 +556,14 @@ QString Qt4BuildConfiguration::extractSpecFromArgumentList(const QStringList &li return parsedSpec; } +ProjectExplorer::IOutputParser *Qt4BuildConfiguration::createOutputParser() const +{ + ToolChain *tc = toolChain(); + if (tc) + return toolChain()->outputParser(); + return 0; +} + /*! \class Qt4BuildConfigurationFactory */ diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index 93a3a435f89..e9fea988955 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -106,6 +106,8 @@ public: QVariantMap toMap() const; + ProjectExplorer::IOutputParser *createOutputParser() const; + signals: /// emitted if the qt version changes (either directly, or because the default qt version changed /// or because the user changed the settings for the qt version