diff --git a/src/plugins/cmakeprojectmanager/builddirparameters.cpp b/src/plugins/cmakeprojectmanager/builddirparameters.cpp index 2a72521d1c5..71f6b820889 100644 --- a/src/plugins/cmakeprojectmanager/builddirparameters.cpp +++ b/src/plugins/cmakeprojectmanager/builddirparameters.cpp @@ -8,16 +8,19 @@ #include "cmakekitaspect.h" #include "cmaketoolmanager.h" +#include #include #include #include #include #include +#include #include #include using namespace ProjectExplorer; +using namespace Utils; namespace CMakeProjectManager::Internal { @@ -70,6 +73,15 @@ BuildDirParameters::BuildDirParameters(CMakeBuildSystem *buildSystem) environment.setFallback("CLICOLOR_FORCE", "1"); cmakeToolId = CMakeKitAspect::cmakeToolId(k); + + outputParserGenerator = [k, bc]() { + QList outputParsers = k->createOutputParsers(); + for (const Id id : bc->customParsers()) { + if (auto parser = createCustomParserFromId(id)) + outputParsers << parser; + } + return outputParsers; + }; } bool BuildDirParameters::isValid() const @@ -82,4 +94,10 @@ CMakeTool *BuildDirParameters::cmakeTool() const return CMakeToolManager::findById(cmakeToolId); } +QList BuildDirParameters::outputParsers() const +{ + QTC_ASSERT(outputParserGenerator, return {}); + return outputParserGenerator(); +} + } // CMakeProjectManager::Internal diff --git a/src/plugins/cmakeprojectmanager/builddirparameters.h b/src/plugins/cmakeprojectmanager/builddirparameters.h index bc5cccddd35..f2648f7773c 100644 --- a/src/plugins/cmakeprojectmanager/builddirparameters.h +++ b/src/plugins/cmakeprojectmanager/builddirparameters.h @@ -8,7 +8,12 @@ #include #include -namespace Utils { class MacroExpander; } +#include + +namespace Utils { +class MacroExpander; +class OutputLineParser; +} // namespace Utils namespace CMakeProjectManager::Internal { @@ -38,6 +43,12 @@ public: QStringList additionalCMakeArguments; Utils::MacroExpander* expander = nullptr; + + QList outputParsers() const; + +private: + using OutputParserGenerator = std::function()>; + OutputParserGenerator outputParserGenerator; }; } // CMakeProjectManager::Internal diff --git a/src/plugins/cmakeprojectmanager/cmakeprocess.cpp b/src/plugins/cmakeprojectmanager/cmakeprocess.cpp index 57ff1df2d2c..93c93c2ec7b 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprocess.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprocess.cpp @@ -110,6 +110,7 @@ void CMakeProcess::run(const BuildDirParameters ¶meters, const QStringList & const auto parser = new CMakeParser; parser->setSourceDirectory(parameters.sourceDirectory); m_parser.addLineParser(parser); + m_parser.addLineParsers(parameters.outputParsers()); // Always use the sourceDir: If we are triggered because the build directory is getting deleted // then we are racing against CMakeCache.txt also getting deleted.