diff options
author | Brad King <brad.king@kitware.com> | 2023-02-14 20:27:12 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2023-02-23 14:12:29 (GMT) |
commit | bfeb16bd5bc7fdeca0922d5f89a35fe4a3e19d1f (patch) | |
tree | d9377a95209af8bc2ec111125933fe51d293a660 | |
parent | c0fcd07e6f0928ae666c5f6fe1f8ad6c306e67ba (diff) | |
download | CMake-bfeb16bd5bc7fdeca0922d5f89a35fe4a3e19d1f.zip CMake-bfeb16bd5bc7fdeca0922d5f89a35fe4a3e19d1f.tar.gz CMake-bfeb16bd5bc7fdeca0922d5f89a35fe4a3e19d1f.tar.bz2 |
cmFindPackageCommand: Refactor CMP0074 logic to de-duplicate lookups
-rw-r--r-- | Source/cmFindPackageCommand.cxx | 30 | ||||
-rw-r--r-- | Source/cmMakefile.cxx | 26 | ||||
-rw-r--r-- | Source/cmMakefile.h | 3 |
3 files changed, 34 insertions, 25 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() diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index d963a5a..b640d64 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -208,26 +208,20 @@ bool cmMakefile::CheckCMP0037(std::string const& targetName, return true; } -void cmMakefile::MaybeWarnCMP0074(std::string const& pkg) +void cmMakefile::MaybeWarnCMP0074(std::string const& rootVar, cmValue rootDef, + cm::optional<std::string> const& rootEnv) { - // Warn if a <pkg>_ROOT variable we may use is set. - std::string const varName = pkg + "_ROOT"; - cmValue var = this->GetDefinition(varName); - std::string env; - cmSystemTools::GetEnv(varName, env); - - bool const haveVar = cmNonempty(var); - bool const haveEnv = !env.empty(); - if ((haveVar || haveEnv) && this->WarnedCMP0074.insert(varName).second) { + // Warn if a <PackageName>_ROOT variable we may use is set. + if ((rootDef || rootEnv) && this->WarnedCMP0074.insert(rootVar).second) { std::ostringstream w; w << cmPolicies::GetPolicyWarning(cmPolicies::CMP0074) << "\n"; - if (haveVar) { - w << "CMake variable " << varName << " is set to:\n" - << " " << *var << "\n"; + if (rootDef) { + w << "CMake variable " << rootVar << " is set to:\n" + << " " << *rootDef << "\n"; } - if (haveEnv) { - w << "Environment variable " << varName << " is set to:\n" - << " " << env << "\n"; + if (rootEnv) { + w << "Environment variable " << rootVar << " is set to:\n" + << " " << *rootEnv << "\n"; } w << "For compatibility, CMake is ignoring the variable."; this->IssueMessage(MessageType::AUTHOR_WARNING, w.str()); diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index 7b19c97..247d4dd 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -1011,7 +1011,8 @@ public: bool GetDebugFindPkgMode() const; - void MaybeWarnCMP0074(std::string const& pkg); + void MaybeWarnCMP0074(std::string const& rootVar, cmValue rootDef, + cm::optional<std::string> const& rootEnv); void MaybeWarnUninitialized(std::string const& variable, const char* sourceFilename) const; bool IsProjectFile(const char* filename) const; |