mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
CMAKE_TEST_BUILD_DEPENDS: Use config when evaluating test dependency targets
Fixes: #27979
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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>)
|
||||
Reference in New Issue
Block a user