CMAKE_TEST_BUILD_DEPENDS: Use config when evaluating test dependency targets

Fixes: #27979
This commit is contained in:
Martin Duffy
2026-07-22 10:17:54 -04:00
parent 8dd7eb41bb
commit 593c4ccaa6
5 changed files with 35 additions and 3 deletions
+1 -1
View File
@@ -1311,7 +1311,7 @@ void cmGlobalNinjaGenerator::WriteTestPrepTargets()
auto const& testGenerators = lg->GetMakefile()->GetTestGenerators();
for (auto const& tester : testGenerators) {
cmTestGenerator::BuildDependencies testDeps;
if (!tester->GetBuildDependencies(lg, testDeps)) {
if (!tester->GetBuildDependencies(lg, config, testDeps)) {
continue;
}
std::string const depName = this->ConvertToNinjaPath(
+2 -1
View File
@@ -94,6 +94,7 @@ cmTest* cmTestGenerator::GetTest() const
}
bool cmTestGenerator::GetBuildDependencies(cmLocalGenerator* lg,
std::string const& config,
BuildDependencies& info)
{
if (this->Test == nullptr ||
@@ -107,7 +108,6 @@ bool cmTestGenerator::GetBuildDependencies(cmLocalGenerator* lg,
// Get dependencies from generator expressions
cmGeneratorExpression ge(*this->Test->GetMakefile()->GetCMakeInstance(),
this->Test->GetBacktrace());
std::string const config;
for (std::string const& arg : this->Test->GetCommand()) {
auto parsed = ge.Parse(arg);
parsed->Evaluate(lg, config);
@@ -274,6 +274,7 @@ void cmTestGenerator::GenerateScriptForConfig(std::ostream& os,
<< cmScriptGenerator::Quote(
ge.Parse(i.second)->Evaluate(this->LG, config));
}
os << ' ';
this->GenerateBacktrace(os, this->Test->GetBacktrace());
os << ")\n";
+2 -1
View File
@@ -39,7 +39,8 @@ public:
cmTestGenerator& operator=(cmTestGenerator const&) = delete;
void Compute(cmLocalGenerator* lg);
bool GetBuildDependencies(cmLocalGenerator* lg, BuildDependencies& deps);
bool GetBuildDependencies(cmLocalGenerator* lg, std::string const& config,
BuildDependencies& deps);
/** Test if this generator installs the test for a given configuration. */
bool TestsForConfig(std::string const& config);
@@ -81,14 +81,25 @@ if(RunCMake_GENERATOR MATCHES Ninja)
run_testdependency_case(ON TRUE)
if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
block()
set(RunCMake_TEST_BINARY_DIR
${RunCMake_BINARY_DIR}/TestDependency-ON-file-generate-config-build)
run_cmake(TestDependency-ON-file-generate-config)
set(RunCMake_TEST_NO_CLEAN 1)
run_cmake_command(TestDependency-ON-file-generate-config-build
${CMAKE_COMMAND} --build . --config Debug
--target test_prep/FileGenerateConfigTest)
endblock()
set(TestDependency_CONFIG Debug)
else()
set(TestDependency_CONFIG "")
endif()
set(TestDependency_BUILD_CONFIG_ARG)
if(TestDependency_CONFIG)
set(TestDependency_BUILD_CONFIG_ARG --config ${TestDependency_CONFIG})
endif()
set(RunCMake_TEST_OUTPUT_MERGE 1)
set(RunCMake_TEST_NO_CLEAN 1)
run_cmake_command(TestDependency-ON-all
@@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 4.3)
set(CMAKE_TEST_BUILD_DEPENDS ON)
project(TestDependencyFileGenerateConfig C)
enable_testing()
add_executable(TestDependencyGenexFileGenerate main.c)
set(rc_file
"${CMAKE_CURRENT_BINARY_DIR}/gen/TestDependencyGenexFileGenerate/$<CONFIG>/version.rc")
file(GENERATE
OUTPUT "${rc_file}"
CONTENT "// Config: $<CONFIG>\n1 RCDATA { \"$<CONFIG>\" }\n"
TARGET TestDependencyGenexFileGenerate)
target_sources(TestDependencyGenexFileGenerate PRIVATE "${rc_file}")
add_test(NAME FileGenerateConfigTest
COMMAND $<TARGET_FILE:TestDependencyGenexFileGenerate>)