Browse Source

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
Brad King 5 years ago
parent
commit
b9cb1d324d

+ 2 - 3
Source/cmMakefile.cxx

@@ -3401,10 +3401,9 @@ std::vector<std::string> cmMakefile::GetGeneratorConfigs(
   GeneratorConfigQuery mode) const
 {
   std::vector<std::string> 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);

+ 11 - 0
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()

+ 8 - 0
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$

+ 6 - 0
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)