diff options
author | Marc Chevrier <marc.chevrier@gmail.com> | 2022-04-01 12:57:12 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2022-04-13 12:59:08 (GMT) |
commit | 17ff86547e759fea54b74eecce5fa62f33bba7f6 (patch) | |
tree | cd74a3e5dc9dbcc154afd6e51daff4b89e3e7c4a /Source/cmWindowsRegistry.h | |
parent | 591426f5a0ff9d442753105031313e704b972d29 (diff) | |
download | CMake-17ff86547e759fea54b74eecce5fa62f33bba7f6.zip CMake-17ff86547e759fea54b74eecce5fa62f33bba7f6.tar.gz CMake-17ff86547e759fea54b74eecce5fa62f33bba7f6.tar.bz2 |
cmake_host_system_information: query windows registry
Fixes: #21240, #23367
Diffstat (limited to 'Source/cmWindowsRegistry.h')
-rw-r--r-- | Source/cmWindowsRegistry.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/Source/cmWindowsRegistry.h b/Source/cmWindowsRegistry.h new file mode 100644 index 0000000..6f10b3a --- /dev/null +++ b/Source/cmWindowsRegistry.h @@ -0,0 +1,55 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#pragma once + +#include <string> +#include <vector> + +#include <cm/optional> +#include <cm/string_view> +#include <cmext/string_view> + +class cmMakefile; + +class cmWindowsRegistry +{ +public: + cmWindowsRegistry(cmMakefile&); + + enum class View + { + Both, + Target, + Host, + Reg64_32, + Reg32_64, + Reg32, + Reg64 + }; + + cm::optional<std::string> ReadValue(cm::string_view key, + View view = View::Both, + cm::string_view separator = "\0"_s) + { + return this->ReadValue(key, ""_s, view, separator); + } + cm::optional<std::string> ReadValue(cm::string_view key, + cm::string_view name, + View view = View::Both, + cm::string_view separator = "\0"_s); + + cm::optional<std::vector<std::string>> GetValueNames(cm::string_view key, + View view = View::Both); + cm::optional<std::vector<std::string>> GetSubKeys(cm::string_view key, + View view = View::Both); + + cm::string_view GetLastError() const; + +private: +#if defined(_WIN32) && !defined(__CYGWIN__) + std::vector<View> ComputeViews(View view); + + int TargetSize = 0; +#endif + std::string LastError; +}; |