summaryrefslogtreecommitdiffstats
path: root/Source/cmWindowsRegistry.h
diff options
context:
space:
mode:
authorMarc Chevrier <marc.chevrier@gmail.com>2022-04-01 12:57:12 (GMT)
committerBrad King <brad.king@kitware.com>2022-04-13 12:59:08 (GMT)
commit17ff86547e759fea54b74eecce5fa62f33bba7f6 (patch)
treecd74a3e5dc9dbcc154afd6e51daff4b89e3e7c4a /Source/cmWindowsRegistry.h
parent591426f5a0ff9d442753105031313e704b972d29 (diff)
downloadCMake-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.h55
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;
+};