From 35a7ed125bf7f051635b78e8e2babe441112cbb1 Mon Sep 17 00:00:00 2001 From: Matthew Woehlke Date: Fri, 31 Jan 2025 14:00:32 -0500 Subject: [PATCH] find_package: Fix reporting of rejected CPS files' version The logic to extract the version of a CPS file into the location used to record files that were considered but rejected was happening too late, resulting in rejected files unnecessarily reporting their version as "unknown". Fix this by filling the variable sooner. --- Source/cmFindPackageCommand.cxx | 9 ++++++--- .../find_package-CPS/MissingComponent-stderr.txt | 2 +- .../MissingTransitiveComponent-stderr.txt | 2 +- Tests/RunCMake/find_package-CPS/cps/componenttest.cps | 1 + 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index cd1938e526..a47e9c3428 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/Source/cmFindPackageCommand.cxx @@ -2718,7 +2718,10 @@ bool cmFindPackageCommand::CheckVersion(std::string const& config_file) cmPackageInfoReader::Read(config_file); if (reader && reader->GetName() == this->Name) { cm::optional cpsVersion = reader->GetVersion(); - if (cpsVersion) { + bool const hasVersion = cpsVersion.has_value(); + + if (hasVersion) { + version = std::move(*cpsVersion); // TODO: Implement version check for CPS result = true; } else { @@ -2752,8 +2755,8 @@ bool cmFindPackageCommand::CheckVersion(std::string const& config_file) result = false; } - if (result && cpsVersion) { - this->VersionFound = (version = std::move(*cpsVersion)); + if (result && hasVersion) { + this->VersionFound = version; std::vector const& versionParts = reader->ParseVersion(); this->VersionFoundCount = static_cast(versionParts.size()); diff --git a/Tests/RunCMake/find_package-CPS/MissingComponent-stderr.txt b/Tests/RunCMake/find_package-CPS/MissingComponent-stderr.txt index d617cfda0c..14f1f0af14 100644 --- a/Tests/RunCMake/find_package-CPS/MissingComponent-stderr.txt +++ b/Tests/RunCMake/find_package-CPS/MissingComponent-stderr.txt @@ -5,7 +5,7 @@ CMake Error at MissingComponent.cmake:[0-9]+ \(find_package\): The following configuration files were considered but not accepted: ( [^ -]*/Tests/RunCMake/find_package-CPS/cps/[Cc]omponent[Tt]est\.cps, version: unknown)+ +]*/Tests/RunCMake/find_package-CPS/cps/[Cc]omponent[Tt]est\.cps, version: 1\.0)+ Call Stack \(most recent call first\): CMakeLists\.txt:[0-9]+ \(include\) diff --git a/Tests/RunCMake/find_package-CPS/MissingTransitiveComponent-stderr.txt b/Tests/RunCMake/find_package-CPS/MissingTransitiveComponent-stderr.txt index c102911757..50c4afe19b 100644 --- a/Tests/RunCMake/find_package-CPS/MissingTransitiveComponent-stderr.txt +++ b/Tests/RunCMake/find_package-CPS/MissingTransitiveComponent-stderr.txt @@ -5,7 +5,7 @@ CMake Error in cps/[Tt]ransitive[Mm]issing\.cps: The following configuration files were considered but not accepted: ( [^ -]*/Tests/RunCMake/find_package-CPS/cps/[Cc]omponent[Tt]est\.cps, version: unknown)+ +]*/Tests/RunCMake/find_package-CPS/cps/[Cc]omponent[Tt]est\.cps, version: 1\.0)+ Call Stack \(most recent call first\): MissingTransitiveComponent\.cmake:[0-9]+ \(find_package\) diff --git a/Tests/RunCMake/find_package-CPS/cps/componenttest.cps b/Tests/RunCMake/find_package-CPS/cps/componenttest.cps index ef49af4366..dbbe0956b3 100644 --- a/Tests/RunCMake/find_package-CPS/cps/componenttest.cps +++ b/Tests/RunCMake/find_package-CPS/cps/componenttest.cps @@ -1,6 +1,7 @@ { "cps_version": "0.13", "name": "ComponentTest", + "version": "1.0", "cps_path": "@prefix@/cps", "components": {} }