diff options
Diffstat (limited to 'Source/cmFindPackageCommand.cxx')
-rw-r--r-- | Source/cmFindPackageCommand.cxx | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx index 4031864..6586c69 100644 --- a/Source/cmFindPackageCommand.cxx +++ b/Source/cmFindPackageCommand.cxx @@ -13,6 +13,7 @@ #include <utility> #include <cm/memory> +#include <cm/optional> #include <cmext/string_view> #include "cmsys/Directory.hxx" @@ -34,6 +35,7 @@ #include "cmSystemTools.h" #include "cmValue.h" #include "cmVersion.h" +#include "cmWindowsRegistry.h" #if defined(__HAIKU__) # include <FindDirectory.h> @@ -324,6 +326,20 @@ bool cmFindPackageCommand::InitialPass(std::vector<std::string> const& args) // Ignore legacy option. configArgs.insert(i); doing = DoingNone; + } else if (args[i] == "REGISTRY_VIEW") { + if (++i == args.size()) { + this->SetError("missing required argument for \"REGISTRY_VIEW\""); + return false; + } + auto view = cmWindowsRegistry::ToView(args[i]); + if (view) { + this->RegistryView = *view; + this->RegistryViewDefined = true; + } else { + this->SetError( + cmStrCat("given invalid value for \"REGISTRY_VIEW\": ", args[i])); + return false; + } } else if (this->CheckCommonArgument(args[i])) { configArgs.insert(i); doing = DoingNone; @@ -827,6 +843,11 @@ void cmFindPackageCommand::SetModuleVariables(const std::string& components) id = cmStrCat(this->Name, "_FIND_VERSION_RANGE_MAX"); this->AddFindDefinition(id, this->VersionRangeMax); } + + if (this->RegistryViewDefined) { + this->AddFindDefinition(cmStrCat(this->Name, "_FIND_REGISTRY_VIEW"), + cmWindowsRegistry::FromView(this->RegistryView)); + } } void cmFindPackageCommand::AddFindDefinition(const std::string& var, |