From 1da072eacbcf4df2df3a5b6a692c48aea23d2066 Mon Sep 17 00:00:00 2001 From: Daniel Pfeifer Date: Fri, 13 Mar 2026 10:53:35 +0100 Subject: [PATCH] discover_tests: Add TEST_LIST to CTest command --- Source/CTest/cmCTestDiscoverTests.cxx | 6 +++++- Source/CTest/cmCTestDiscoverTests.h | 4 ++++ Source/CTest/cmCTestTestHandler.cxx | 24 +++++++++++++++++++++--- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/Source/CTest/cmCTestDiscoverTests.cxx b/Source/CTest/cmCTestDiscoverTests.cxx index 95a97a130a..d872540373 100644 --- a/Source/CTest/cmCTestDiscoverTests.cxx +++ b/Source/CTest/cmCTestDiscoverTests.cxx @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -87,6 +88,7 @@ private: bool cmCTestDiscoverTests(cmTestDiscoveryArgs const& args, cmCTestTestHandler* handler, + std::vector& testList, cmExecutionStatus& status) { cmsys::RegularExpression re; @@ -136,7 +138,7 @@ bool cmCTestDiscoverTests(cmTestDiscoveryArgs const& args, continue; } - auto const testName = replace(args.TestName); + auto testName = replace(args.TestName); auto testArgs = std::vector{ testName }; testArgs.reserve(1 + args.Command.size() + args.TestArgs.size()); std::copy(args.Command.begin(), args.Command.end(), @@ -157,6 +159,8 @@ bool cmCTestDiscoverTests(cmTestDiscoveryArgs const& args, if (!handler->SetTestsProperties(testProperties)) { return false; } + + testList.push_back(std::move(testName)); } return true; diff --git a/Source/CTest/cmCTestDiscoverTests.h b/Source/CTest/cmCTestDiscoverTests.h index 8de7d7e85f..b39318542e 100644 --- a/Source/CTest/cmCTestDiscoverTests.h +++ b/Source/CTest/cmCTestDiscoverTests.h @@ -4,10 +4,14 @@ #include "cmConfigure.h" // IWYU pragma: keep +#include +#include + struct cmTestDiscoveryArgs; class cmCTestTestHandler; class cmExecutionStatus; bool cmCTestDiscoverTests(cmTestDiscoveryArgs const& args, cmCTestTestHandler* handler, + std::vector& testList, cmExecutionStatus& status); diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx index 5f211600cc..1661b69a40 100644 --- a/Source/CTest/cmCTestTestHandler.cxx +++ b/Source/CTest/cmCTestTestHandler.cxx @@ -263,8 +263,13 @@ public: bool cmCTestDiscoverTestsCommand::InitialPass( std::vector const& args, cmExecutionStatus& status) { - using Arguments = cmTestDiscoveryArgs; - static auto const parser = cmTestDiscoveryParser(); + struct Arguments : cmTestDiscoveryArgs + { + std::string TestList; + }; + static auto const parser = + cmArgumentParser{ cmTestDiscoveryParser() } // + .Bind("TEST_LIST"_s, &Arguments::TestList); auto unparsed = std::vector{}; Arguments const arguments = parser.Parse(args, &unparsed); @@ -277,7 +282,20 @@ bool cmCTestDiscoverTestsCommand::InitialPass( return false; } - return cmCTestDiscoverTests(arguments, this->TestHandler, status); + std::vector testList; + if (!cmCTestDiscoverTests(arguments, this->TestHandler, testList, status)) { + return false; + } + + if (!arguments.TestList.empty()) { + for (std::string& testName : testList) { + cmSystemTools::ReplaceString(testName, ";", "\\;"); + } + status.GetMakefile().AddDefinition(arguments.TestList, + cmList::to_string(testList)); + } + + return true; } class cmCTestSetTestsPropertiesCommand : public cmCTestCommand