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:
@@ -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 =
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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>)
|
||||
Reference in New Issue
Block a user