From 5aa649d5f6e635bb2d0be41cd743abcbe4b5624f Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 1 Apr 2026 11:12:37 -0400 Subject: [PATCH] find_package: Save package information only after successfully loading it If a package configuration file sets `_FOUND` to false, the package is considered not found. Do not save its package info. Note that this exposes an existing pointer invalidation on nested `find_package` calls, which will be fixed in following commits. Issue: #27730 --- Source/cmFindPackageCommand.cxx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index dd866440e6..25143f5003 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/Source/cmFindPackageCommand.cxx @@ -1732,6 +1732,12 @@ bool cmFindPackageCommand::HandlePackageMode( // The configuration file is invalid. result = false; } + + if (this->UseConfigFiles && found) { + this->CurrentPackageInfo->Directory = + cmSystemTools::GetFilenamePath(this->FileFound); + this->CurrentPackageInfo->Version = this->VersionFound; + } } if (this->UseFindModules && !found && @@ -1975,8 +1981,6 @@ bool cmFindPackageCommand::FindConfig() std::string init; if (found) { init = cmSystemTools::GetFilenamePath(this->FileFound); - this->CurrentPackageInfo->Directory = init; - this->CurrentPackageInfo->Version = this->VersionFound; } else { init = this->Variable + "-NOTFOUND"; }