From f04dd93c4736ecbc74624dbf2c1b6dd58ecf3ca4 Mon Sep 17 00:00:00 2001 From: Matthew Woehlke Date: Thu, 17 Oct 2024 14:57:38 -0400 Subject: [PATCH] cmExportPackageInfoGenerator: Fix version properties Fix a small bug in cmExportPackageInfoGenerator that caused extended version properties ("compat_version", "version_schema")) to be emitted when empty. Add a test to ensure this is working as intended. Fixes: #26264 --- Source/cmExportPackageInfoGenerator.cxx | 4 ++-- .../PackageInfo/MinimalVersion-check.cmake | 21 +++++++++++++++++++ .../RunCMake/PackageInfo/MinimalVersion.cmake | 19 +++++++++++++++++ Tests/RunCMake/PackageInfo/RunCMakeTest.cmake | 1 + 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 Tests/RunCMake/PackageInfo/MinimalVersion-check.cmake create mode 100644 Tests/RunCMake/PackageInfo/MinimalVersion.cmake diff --git a/Source/cmExportPackageInfoGenerator.cxx b/Source/cmExportPackageInfoGenerator.cxx index 826c49e449..3f6628b21d 100644 --- a/Source/cmExportPackageInfoGenerator.cxx +++ b/Source/cmExportPackageInfoGenerator.cxx @@ -106,10 +106,10 @@ Json::Value cmExportPackageInfoGenerator::GeneratePackageInfo() const if (!this->PackageVersion.empty()) { package["version"] = this->PackageVersion; - if (!this->PackageVersion.empty()) { + if (!this->PackageVersionCompat.empty()) { package["compat_version"] = this->PackageVersionCompat; } - if (!this->PackageVersion.empty()) { + if (!this->PackageVersionSchema.empty()) { package["version_schema"] = this->PackageVersionSchema; } } diff --git a/Tests/RunCMake/PackageInfo/MinimalVersion-check.cmake b/Tests/RunCMake/PackageInfo/MinimalVersion-check.cmake new file mode 100644 index 0000000000..8facefa571 --- /dev/null +++ b/Tests/RunCMake/PackageInfo/MinimalVersion-check.cmake @@ -0,0 +1,21 @@ +include(${CMAKE_CURRENT_LIST_DIR}/Assertions.cmake) + +set(out_dir "${RunCMake_BINARY_DIR}/MinimalVersion-build/CMakeFiles/Export/510c5684a4a8a792eadfb55bc9744983") + +file(READ "${out_dir}/foo1.cps" content) +expect_value("${content}" "foo1" "name") +expect_value("${content}" "1.0" "version") +expect_missing("${content}" "compat_version") +expect_missing("${content}" "version_schema") + +file(READ "${out_dir}/foo2.cps" content) +expect_value("${content}" "foo2" "name") +expect_value("${content}" "1.5" "version") +expect_value("${content}" "1.0" "compat_version") +expect_missing("${content}" "version_schema") + +file(READ "${out_dir}/foo3.cps" content) +expect_value("${content}" "foo3" "name") +expect_value("${content}" "1.0" "version") +expect_missing("${content}" "compat_version") +expect_value("${content}" "simple" "version_schema") diff --git a/Tests/RunCMake/PackageInfo/MinimalVersion.cmake b/Tests/RunCMake/PackageInfo/MinimalVersion.cmake new file mode 100644 index 0000000000..ea4679c4ab --- /dev/null +++ b/Tests/RunCMake/PackageInfo/MinimalVersion.cmake @@ -0,0 +1,19 @@ +add_library(foo INTERFACE) +install(TARGETS foo EXPORT foo DESTINATION .) + +install(PACKAGE_INFO foo1 + EXPORT foo + VERSION 1.0 + DESTINATION cps) + +install(PACKAGE_INFO foo2 + EXPORT foo + VERSION 1.5 + COMPAT_VERSION 1.0 + DESTINATION cps) + +install(PACKAGE_INFO foo3 + EXPORT foo + VERSION 1.0 + VERSION_SCHEMA simple + DESTINATION cps) diff --git a/Tests/RunCMake/PackageInfo/RunCMakeTest.cmake b/Tests/RunCMake/PackageInfo/RunCMakeTest.cmake index 54a32d5595..e90c371125 100644 --- a/Tests/RunCMake/PackageInfo/RunCMakeTest.cmake +++ b/Tests/RunCMake/PackageInfo/RunCMakeTest.cmake @@ -27,6 +27,7 @@ run_cmake(Appendix) run_cmake(InterfaceProperties) run_cmake(Metadata) run_cmake(Minimal) +run_cmake(MinimalVersion) run_cmake(LowerCaseFile) run_cmake(Requirements) run_cmake(TargetTypes)