|
|
|
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
|
|
file Copyright.txt or https://cmake.org/licensing for details. */
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "cmConfigure.h" // IWYU pragma: keep
|
|
|
|
|
|
|
|
#include <cstdint> // IWYU pragma: keep
|
|
|
|
#include <initializer_list>
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
#include <cm/optional>
|
|
|
|
#include <cm/string_view>
|
|
|
|
#include <cmext/enum_set>
|
|
|
|
#include <cmext/string_view>
|
|
|
|
|
|
|
|
class cmMakefile;
|
|
|
|
|
|
|
|
class cmWindowsRegistry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
enum class View
|
|
|
|
{
|
|
|
|
Both,
|
|
|
|
Target,
|
|
|
|
Host,
|
|
|
|
Reg64_32,
|
|
|
|
Reg32_64,
|
|
|
|
Reg32,
|
|
|
|
Reg64
|
|
|
|
};
|
|
|
|
|
|
|
|
// Registry supported types
|
|
|
|
enum class ValueType : std::uint8_t
|
|
|
|
{
|
|
|
|
Reg_SZ,
|
|
|
|
Reg_EXPAND_SZ,
|
|
|
|
Reg_MULTI_SZ,
|
|
|
|
Reg_DWORD,
|
|
|
|
Reg_QWORD
|
|
|
|
};
|
|
|
|
using ValueTypeSet = cm::enum_set<ValueType>;
|
|
|
|
|
|
|
|
// All types as defined by enum ValueType
|
|
|
|
static const ValueTypeSet AllTypes;
|
|
|
|
// same as AllTYpes but without type REG_MULTI_SZ
|
|
|
|
static const ValueTypeSet SimpleTypes;
|
|
|
|
|
|
|
|
cmWindowsRegistry(cmMakefile&,
|
|
|
|
const ValueTypeSet& supportedTypes = AllTypes);
|
|
|
|
|
|
|
|
// Helper routine to convert string to enum value
|
|
|
|
static cm::optional<View> ToView(cm::string_view name);
|
|
|
|
// Helper routine to convert enum to string
|
|
|
|
static cm::string_view FromView(View view);
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
// Expand an expression which may contains multiple references
|
|
|
|
// to registry keys.
|
|
|
|
// Depending of the view specified, one or two expansions can be done.
|
|
|
|
cm::optional<std::vector<std::string>> ExpandExpression(
|
|
|
|
cm::string_view expression, View view, cm::string_view separator = "\0"_s);
|
|
|
|
|
|
|
|
cm::string_view GetLastError() const;
|
|
|
|
|
|
|
|
private:
|
|
|
|
#if defined(_WIN32) && !defined(__CYGWIN__)
|
|
|
|
std::vector<View> ComputeViews(View view);
|
|
|
|
|
|
|
|
int TargetSize = 0;
|
|
|
|
ValueTypeSet SupportedTypes = AllTypes;
|
|
|
|
#endif
|
|
|
|
std::string LastError;
|
|
|
|
};
|