CMAKE_TEST_BUILD_DEPENDS: Use config when evaluating test dependency targets

Fixes: #27979
This commit is contained in:
Martin Duffy
2026-07-22 10:41:30 -04:00
committed by Brad King
parent 1c50e7aa70
commit c31f09a1e6
7 changed files with 39 additions and 6 deletions
+2 -1
View File
@@ -1607,7 +1607,8 @@ void cmGlobalFastbuildGenerator::WriteTestPrepTargets()
auto const& testGenerators = localGen->GetMakefile()->GetTestGenerators();
for (auto const& tester : testGenerators) {
cmTestGenerator::BuildDependencies testDeps;
if (!tester->GetBuildDependencies(localGen.get(), testDeps)) {
if (!tester->GetBuildDependencies(localGen.get(), std::string(),
testDeps)) {
continue;
}
std::string const depName =
+1 -1
View File
@@ -1313,7 +1313,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(
+1 -1
View File
@@ -967,7 +967,7 @@ void cmGlobalUnixMakefileGenerator3::ComputeTestPrepTargets()
for (auto const& lg : this->LocalGenerators) {
for (auto const& tester : lg->GetMakefile()->GetTestGenerators()) {
cmTestGenerator::BuildDependencies deps;
if (!tester->GetBuildDependencies(lg.get(), deps)) {
if (!tester->GetBuildDependencies(lg.get(), std::string(), deps)) {
continue;
}
cmTest* test = tester->GetTest();
+2 -2
View File
@@ -115,6 +115,7 @@ cmTest* cmTestGenerator::GetTest() const
}
bool cmTestGenerator::GetBuildDependencies(cmLocalGenerator* lg,
std::string const& config,
BuildDependencies& info)
{
if (this->Test == nullptr ||
@@ -128,7 +129,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);
@@ -304,7 +304,7 @@ void cmTestGenerator::GenerateScriptForConfig(std::ostream& os,
ge.Parse(i.second)->Evaluate(this->LG, config));
}
BuildDependencies deps;
if (this->GetBuildDependencies(this->LG, deps)) {
if (this->GetBuildDependencies(this->LG, config, deps)) {
cmList depList;
for (std::string const& dep :
this->LG->GetGlobalGenerator()->GetTestBuildDependencyPaths(config,
+2 -1
View File
@@ -52,7 +52,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);
@@ -122,6 +122,18 @@ if(RunCMake_GENERATOR MATCHES "Ninja|FASTBuild|Makefiles")
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/TestDependency-ON-build)
run_testdependency_case(ON TRUE)
if(RunCMake_GENERATOR MATCHES "Ninja" AND 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()
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>)