From b9cb1d324d500e5b26afee33b6cd565e02117319 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 15 Oct 2020 10:36:21 -0400 Subject: Fix regression in test/install/package configuration selection In commit 7a969fe21d (cmMakefile: Refactor API to better handle empty config values, 2020-06-30, v3.19.0-rc1~567^2), calls to `GetGeneratorConfigs` that pass `OnlyMultiConfig` only want to get any configurations listed if the generator is multi-config. Fix the implementation to actually do that. Fixes: #21316 --- Source/cmMakefile.cxx | 5 ++--- Tests/RunCMake/CTest/RunCMakeTest.cmake | 11 +++++++++++ Tests/RunCMake/CTest/SingleConfig-test-stdout.txt | 8 ++++++++ Tests/RunCMake/CTest/SingleConfig.cmake | 6 ++++++ 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 Tests/RunCMake/CTest/SingleConfig-test-stdout.txt create mode 100644 Tests/RunCMake/CTest/SingleConfig.cmake diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 14ec689..0e4f888 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -3401,10 +3401,9 @@ std::vector cmMakefile::GetGeneratorConfigs( GeneratorConfigQuery mode) const { std::vector configs; - if (this->GetGlobalGenerator()->IsMultiConfig() || - mode == cmMakefile::OnlyMultiConfig) { + if (this->GetGlobalGenerator()->IsMultiConfig()) { this->GetDefExpandList("CMAKE_CONFIGURATION_TYPES", configs); - } else { + } else if (mode != cmMakefile::OnlyMultiConfig) { const std::string& buildType = this->GetSafeDefinition("CMAKE_BUILD_TYPE"); if (!buildType.empty()) { configs.emplace_back(buildType); diff --git a/Tests/RunCMake/CTest/RunCMakeTest.cmake b/Tests/RunCMake/CTest/RunCMakeTest.cmake index 62606f8..ffc8f78 100644 --- a/Tests/RunCMake/CTest/RunCMakeTest.cmake +++ b/Tests/RunCMake/CTest/RunCMakeTest.cmake @@ -27,3 +27,14 @@ function(run_TestfileErrors) run_cmake_command(TestfileErrors-test ${CMAKE_CTEST_COMMAND} -C Debug) endfunction() run_TestfileErrors() + +function(run_SingleConfig) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/SingleConfig-build) + run_cmake(SingleConfig) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(SingleConfig-build ${CMAKE_COMMAND} --build .) + run_cmake_command(SingleConfig-test ${CMAKE_CTEST_COMMAND}) # No -C Debug required for single-config. +endfunction() +if(NOT RunCMake_GENERATOR_IS_MULTI_CONFIG) + run_SingleConfig() +endif() diff --git a/Tests/RunCMake/CTest/SingleConfig-test-stdout.txt b/Tests/RunCMake/CTest/SingleConfig-test-stdout.txt new file mode 100644 index 0000000..1c39ea1 --- /dev/null +++ b/Tests/RunCMake/CTest/SingleConfig-test-stdout.txt @@ -0,0 +1,8 @@ +^Test project [^ +]*/Tests/RunCMake/CTest/SingleConfig-build + Start 1: SingleConfig +1/1 Test #1: SingleConfig \.+ +Passed +[0-9.]+ sec ++ +100% tests passed, 0 tests failed out of 1 ++ +Total Test time \(real\) = +[0-9.]+ sec$ diff --git a/Tests/RunCMake/CTest/SingleConfig.cmake b/Tests/RunCMake/CTest/SingleConfig.cmake new file mode 100644 index 0000000..7c10e06 --- /dev/null +++ b/Tests/RunCMake/CTest/SingleConfig.cmake @@ -0,0 +1,6 @@ +include(CTest) + +# This should be ignored by single-config generators. +set(CMAKE_CONFIGURATION_TYPES "Release;Debug" CACHE INTERNAL "Supported configuration types") + +add_test(NAME SingleConfig COMMAND ${CMAKE_COMMAND} -E echo SingleConfig) -- cgit v0.12