summaryrefslogtreecommitdiffstats
path: root/Source/cmFindPackageCommand.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2023-02-14 20:27:12 (GMT)
committerBrad King <brad.king@kitware.com>2023-02-23 14:12:29 (GMT)
commitbfeb16bd5bc7fdeca0922d5f89a35fe4a3e19d1f (patch)
treed9377a95209af8bc2ec111125933fe51d293a660 /Source/cmFindPackageCommand.cxx
parentc0fcd07e6f0928ae666c5f6fe1f8ad6c306e67ba (diff)
downloadCMake-bfeb16bd5bc7fdeca0922d5f89a35fe4a3e19d1f.zip
CMake-bfeb16bd5bc7fdeca0922d5f89a35fe4a3e19d1f.tar.gz
CMake-bfeb16bd5bc7fdeca0922d5f89a35fe4a3e19d1f.tar.bz2
cmFindPackageCommand: Refactor CMP0074 logic to de-duplicate lookups
Diffstat (limited to 'Source/cmFindPackageCommand.cxx')
-rw-r--r--Source/cmFindPackageCommand.cxx30
1 files changed, 22 insertions, 8 deletions
diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index 16e0986..dd00419 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -1814,26 +1814,40 @@ void cmFindPackageCommand::PushFindPackageRootPathStack()
// Add root paths from <PackageName>_ROOT CMake and environment variables,
// subject to CMP0074.
+ std::string const rootVar = this->Name + "_ROOT";
+ cmValue rootDef = this->Makefile->GetDefinition(rootVar);
+ if (rootDef && rootDef.IsEmpty()) {
+ rootDef = nullptr;
+ }
+ cm::optional<std::string> rootEnv = cmSystemTools::GetEnvVar(rootVar);
+ if (rootEnv && rootEnv->empty()) {
+ rootEnv = cm::nullopt;
+ }
switch (this->Makefile->GetPolicyStatus(cmPolicies::CMP0074)) {
case cmPolicies::WARN:
- this->Makefile->MaybeWarnCMP0074(this->Name);
+ this->Makefile->MaybeWarnCMP0074(rootVar, rootDef, rootEnv);
CM_FALLTHROUGH;
case cmPolicies::OLD:
- // OLD behavior is to ignore the <pkg>_ROOT variables.
- break;
+ // OLD behavior is to ignore the <PackageName>_ROOT variables.
+ return;
case cmPolicies::REQUIRED_IF_USED:
case cmPolicies::REQUIRED_ALWAYS:
this->Makefile->IssueMessage(
MessageType::FATAL_ERROR,
cmPolicies::GetRequiredPolicyError(cmPolicies::CMP0074));
- break;
+ return;
case cmPolicies::NEW: {
- // NEW behavior is to honor the <pkg>_ROOT variables.
- std::string const rootVar = this->Name + "_ROOT";
- this->Makefile->GetDefExpandList(rootVar, rootPaths, false);
- cmSystemTools::GetPath(rootPaths, rootVar.c_str());
+ // NEW behavior is to honor the <PackageName>_ROOT variables.
} break;
}
+
+ if (rootDef) {
+ cmExpandList(*rootDef, rootPaths);
+ }
+ if (rootEnv) {
+ std::vector<std::string> p = cmSystemTools::SplitEnvPath(*rootEnv);
+ std::move(p.begin(), p.end(), std::back_inserter(rootPaths));
+ }
}
void cmFindPackageCommand::PopFindPackageRootPathStack()