From 4bb4bbcf592ca7f9de760ea92ddbbf1d1a5ea5fe Mon Sep 17 00:00:00 2001 From: Matthew Woehlke Date: Thu, 3 Jul 2025 12:49:55 -0400 Subject: [PATCH] Tests: Actually test CPS generation with no config Commit 58d9950842 (CPS: Fix empty configuration field on noconfig builds, 2025-06-30) fixed an issue with CPS generation that would incorrectly use the empty string to identify the configuration in some instances. (The expected CMake behavior is that an empty configuration is always equivalent to 'noconfig'.) However, that commit did not add any tests for the fix. Add those tests now. Also, tweak the tests that were added, that test for expected non-empty configuration-specific content, to hard-code what configuration or configurations are produced. Lastly, remove the explicit test for existence of the CPS file in said tests; `file(READ)` will complain if the file does not exist, so the separate test is superfluous. --- ...eration-check.cmake => Config-check.cmake} | 6 ++--- Tests/RunCMake/ExportPackageInfo/Config.cmake | 13 ++++++++++ .../ExportPackageInfo/EmptyConfig-check.cmake | 7 ++++++ .../ExportPackageInfo/EmptyConfig.cmake | 9 +++++++ .../PerConfigGeneration.cmake | 13 ---------- .../ExportPackageInfo/RunCMakeTest.cmake | 3 ++- .../InstallPackageInfo/Config-check.cmake | 16 +++++++++++++ .../RunCMake/InstallPackageInfo/Config.cmake | 13 ++++++++++ .../EmptyConfig-check.cmake | 7 ++++++ .../InstallPackageInfo/EmptyConfig.cmake | 9 +++++++ .../PerConfigGeneration-check.cmake | 24 ------------------- .../PerConfigGeneration.cmake | 13 ---------- .../InstallPackageInfo/RunCMakeTest.cmake | 3 ++- 13 files changed, 81 insertions(+), 55 deletions(-) rename Tests/RunCMake/ExportPackageInfo/{PerConfigGeneration-check.cmake => Config-check.cmake} (65%) create mode 100644 Tests/RunCMake/ExportPackageInfo/Config.cmake create mode 100644 Tests/RunCMake/ExportPackageInfo/EmptyConfig-check.cmake create mode 100644 Tests/RunCMake/ExportPackageInfo/EmptyConfig.cmake delete mode 100644 Tests/RunCMake/ExportPackageInfo/PerConfigGeneration.cmake create mode 100644 Tests/RunCMake/InstallPackageInfo/Config-check.cmake create mode 100644 Tests/RunCMake/InstallPackageInfo/Config.cmake create mode 100644 Tests/RunCMake/InstallPackageInfo/EmptyConfig-check.cmake create mode 100644 Tests/RunCMake/InstallPackageInfo/EmptyConfig.cmake delete mode 100644 Tests/RunCMake/InstallPackageInfo/PerConfigGeneration-check.cmake delete mode 100644 Tests/RunCMake/InstallPackageInfo/PerConfigGeneration.cmake diff --git a/Tests/RunCMake/ExportPackageInfo/PerConfigGeneration-check.cmake b/Tests/RunCMake/ExportPackageInfo/Config-check.cmake similarity index 65% rename from Tests/RunCMake/ExportPackageInfo/PerConfigGeneration-check.cmake rename to Tests/RunCMake/ExportPackageInfo/Config-check.cmake index 221942fe5a..acb4ecd310 100644 --- a/Tests/RunCMake/ExportPackageInfo/PerConfigGeneration-check.cmake +++ b/Tests/RunCMake/ExportPackageInfo/Config-check.cmake @@ -1,14 +1,14 @@ include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake) -set(out_dir "${RunCMake_BINARY_DIR}/PerConfigGeneration-build") +set(out_dir "${RunCMake_BINARY_DIR}/Config-build") file(READ "${out_dir}/foo.cps" content) if(RunCMake_GENERATOR_IS_MULTI_CONFIG) - foreach(config ${CMAKE_CONFIGURATION_TYPES}) + foreach(config FooConfig BarConfig) expect_object("${content}" "components" "foo" "configurations" ${config}) endforeach() else() - include(${RunCMake_TEST_BINARY_DIR}/build_type.cmake) + set(config TestConfig) expect_object("${content}" "components" "foo" "configurations" ${config}) endif() diff --git a/Tests/RunCMake/ExportPackageInfo/Config.cmake b/Tests/RunCMake/ExportPackageInfo/Config.cmake new file mode 100644 index 0000000000..361fb66ee5 --- /dev/null +++ b/Tests/RunCMake/ExportPackageInfo/Config.cmake @@ -0,0 +1,13 @@ +project(Config CXX) + +get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(_isMultiConfig) + set(CMAKE_CONFIGURATION_TYPES "FooConfig;BarConfig" CACHE STRING "" FORCE) +else() + set(CMAKE_BUILD_TYPE "TestConfig" CACHE STRING "" FORCE) +endif() + +add_library(foo foo.cxx) + +install(TARGETS foo EXPORT foo) +export(EXPORT foo PACKAGE_INFO foo) diff --git a/Tests/RunCMake/ExportPackageInfo/EmptyConfig-check.cmake b/Tests/RunCMake/ExportPackageInfo/EmptyConfig-check.cmake new file mode 100644 index 0000000000..ffabf80bf2 --- /dev/null +++ b/Tests/RunCMake/ExportPackageInfo/EmptyConfig-check.cmake @@ -0,0 +1,7 @@ +include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake) + +set(out_dir "${RunCMake_BINARY_DIR}/EmptyConfig-build") + +file(READ "${out_dir}/foo.cps" content) + +expect_object("${content}" "components" "foo" "configurations" "noconfig") diff --git a/Tests/RunCMake/ExportPackageInfo/EmptyConfig.cmake b/Tests/RunCMake/ExportPackageInfo/EmptyConfig.cmake new file mode 100644 index 0000000000..4ed643657b --- /dev/null +++ b/Tests/RunCMake/ExportPackageInfo/EmptyConfig.cmake @@ -0,0 +1,9 @@ +project(EmptyConfig CXX) + +set(CMAKE_BUILD_TYPE "" CACHE STRING "" FORCE) +set(CMAKE_CONFIGURATION_TYPES "" CACHE STRING "" FORCE) + +add_library(foo foo.cxx) + +install(TARGETS foo EXPORT foo) +export(EXPORT foo PACKAGE_INFO foo) diff --git a/Tests/RunCMake/ExportPackageInfo/PerConfigGeneration.cmake b/Tests/RunCMake/ExportPackageInfo/PerConfigGeneration.cmake deleted file mode 100644 index ed9b29ae9a..0000000000 --- a/Tests/RunCMake/ExportPackageInfo/PerConfigGeneration.cmake +++ /dev/null @@ -1,13 +0,0 @@ -project(PerConfigGeneration CXX) - -set(config ${CMAKE_BUILD_TYPE}) -if(NOT config) - set(config noconfig) -endif() - -file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/build_type.cmake" "set(config \"${config}\")") - -add_library(foo foo.cxx) - -install(TARGETS foo EXPORT foo) -export(EXPORT foo PACKAGE_INFO foo) diff --git a/Tests/RunCMake/ExportPackageInfo/RunCMakeTest.cmake b/Tests/RunCMake/ExportPackageInfo/RunCMakeTest.cmake index 67fbe69109..c505f289c4 100644 --- a/Tests/RunCMake/ExportPackageInfo/RunCMakeTest.cmake +++ b/Tests/RunCMake/ExportPackageInfo/RunCMakeTest.cmake @@ -40,5 +40,6 @@ run_cmake(Requirements) run_cmake(TargetTypes) run_cmake(DependsMultiple) run_cmake(LinkOnly) -run_cmake(PerConfigGeneration) +run_cmake(Config) +run_cmake(EmptyConfig) run_cmake(FileSetHeaders) diff --git a/Tests/RunCMake/InstallPackageInfo/Config-check.cmake b/Tests/RunCMake/InstallPackageInfo/Config-check.cmake new file mode 100644 index 0000000000..7739681e2c --- /dev/null +++ b/Tests/RunCMake/InstallPackageInfo/Config-check.cmake @@ -0,0 +1,16 @@ +include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake) + +set(out_dir "${RunCMake_BINARY_DIR}/Config-build/CMakeFiles/Export/510c5684a4a8a792eadfb55bc9744983") + +macro(check_config CONFIG) + string(TOLOWER "${CONFIG}" CONFIG_LOWER) + file(READ "${out_dir}/foo@${CONFIG_LOWER}.cps" content) + expect_value("${content}" "${CONFIG}" "configuration") +endmacro() + +if(RunCMake_GENERATOR_IS_MULTI_CONFIG) + check_config(FooConfig) + check_config(BarConfig) +else() + check_config(TestConfig) +endif() diff --git a/Tests/RunCMake/InstallPackageInfo/Config.cmake b/Tests/RunCMake/InstallPackageInfo/Config.cmake new file mode 100644 index 0000000000..ce53713a86 --- /dev/null +++ b/Tests/RunCMake/InstallPackageInfo/Config.cmake @@ -0,0 +1,13 @@ +project(Config CXX) + +get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(_isMultiConfig) + set(CMAKE_CONFIGURATION_TYPES "FooConfig;BarConfig" CACHE STRING "" FORCE) +else() + set(CMAKE_BUILD_TYPE "TestConfig" CACHE STRING "" FORCE) +endif() + +add_library(foo foo.cxx) + +install(TARGETS foo EXPORT foo) +install(PACKAGE_INFO foo DESTINATION cps EXPORT foo) diff --git a/Tests/RunCMake/InstallPackageInfo/EmptyConfig-check.cmake b/Tests/RunCMake/InstallPackageInfo/EmptyConfig-check.cmake new file mode 100644 index 0000000000..49ca07a3eb --- /dev/null +++ b/Tests/RunCMake/InstallPackageInfo/EmptyConfig-check.cmake @@ -0,0 +1,7 @@ +include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake) + +set(out_dir "${RunCMake_BINARY_DIR}/EmptyConfig-build/CMakeFiles/Export/510c5684a4a8a792eadfb55bc9744983") + +file(READ "${out_dir}/foo@noconfig.cps" content) + +expect_value("${content}" "noconfig" "configuration") diff --git a/Tests/RunCMake/InstallPackageInfo/EmptyConfig.cmake b/Tests/RunCMake/InstallPackageInfo/EmptyConfig.cmake new file mode 100644 index 0000000000..9641b54b28 --- /dev/null +++ b/Tests/RunCMake/InstallPackageInfo/EmptyConfig.cmake @@ -0,0 +1,9 @@ +project(EmptyConfig CXX) + +set(CMAKE_BUILD_TYPE "" CACHE STRING "" FORCE) +set(CMAKE_CONFIGURATION_TYPES "" CACHE STRING "" FORCE) + +add_library(foo foo.cxx) + +install(TARGETS foo EXPORT foo) +install(PACKAGE_INFO foo DESTINATION cps EXPORT foo) diff --git a/Tests/RunCMake/InstallPackageInfo/PerConfigGeneration-check.cmake b/Tests/RunCMake/InstallPackageInfo/PerConfigGeneration-check.cmake deleted file mode 100644 index 5ff99a5f6b..0000000000 --- a/Tests/RunCMake/InstallPackageInfo/PerConfigGeneration-check.cmake +++ /dev/null @@ -1,24 +0,0 @@ -include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake) - -set(out_dir "${RunCMake_BINARY_DIR}/PerConfigGeneration-build/CMakeFiles/Export/510c5684a4a8a792eadfb55bc9744983") - -macro(check_config) - string(TOLOWER "${config}" config_lower) - if(NOT EXISTS "${out_dir}/foo@${config_lower}.cps") - set(RunCMake_TEST_FAILED - "Configuration file for '${config}' does not exist") - return() - endif() - - file(READ "${out_dir}/foo@${config_lower}.cps" content) - expect_value("${content}" "${config}" "configuration") -endmacro() - -if(RunCMake_GENERATOR_IS_MULTI_CONFIG) - foreach(config ${CMAKE_CONFIGURATION_TYPES}) - check_config() - endforeach() -else() - include(${RunCMake_TEST_BINARY_DIR}/build_type.cmake) - check_config() -endif() diff --git a/Tests/RunCMake/InstallPackageInfo/PerConfigGeneration.cmake b/Tests/RunCMake/InstallPackageInfo/PerConfigGeneration.cmake deleted file mode 100644 index 4f4c149c0d..0000000000 --- a/Tests/RunCMake/InstallPackageInfo/PerConfigGeneration.cmake +++ /dev/null @@ -1,13 +0,0 @@ -project(PerConfigGeneration CXX) - -set(config ${CMAKE_BUILD_TYPE}) -if(NOT config) - set(config noconfig) -endif() - -file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/build_type.cmake" "set(config \"${config}\")") - -add_library(foo foo.cxx) - -install(TARGETS foo EXPORT foo) -install(PACKAGE_INFO foo DESTINATION cps EXPORT foo) diff --git a/Tests/RunCMake/InstallPackageInfo/RunCMakeTest.cmake b/Tests/RunCMake/InstallPackageInfo/RunCMakeTest.cmake index 1f58923f23..67e43ecf46 100644 --- a/Tests/RunCMake/InstallPackageInfo/RunCMakeTest.cmake +++ b/Tests/RunCMake/InstallPackageInfo/RunCMakeTest.cmake @@ -48,6 +48,7 @@ run_cmake(Requirements) run_cmake(TargetTypes) run_cmake(DependsMultiple) run_cmake(DependsMultipleNotInstalled) -run_cmake(PerConfigGeneration) +run_cmake(Config) +run_cmake(EmptyConfig) run_cmake(FileSetHeaders) run_cmake_install(Destination)