/src/CMake/Source/cmPackageInfoArguments.h
Line | Count | Source |
1 | | /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
2 | | file LICENSE.rst or https://cmake.org/licensing for details. */ |
3 | | #pragma once |
4 | | |
5 | | #include "cmConfigure.h" // IWYU pragma: keep |
6 | | |
7 | | #include <string> |
8 | | #include <vector> |
9 | | |
10 | | #include <cm/string_view> |
11 | | #include <cm/type_traits> |
12 | | #include <cmext/string_view> |
13 | | |
14 | | #include "cmArgumentParser.h" // IWYU pragma: keep |
15 | | #include "cmArgumentParserTypes.h" |
16 | | #include "cmProjectInfoArguments.h" |
17 | | |
18 | | /** \class cmPackageInfoArguments |
19 | | * \brief Convey information about a package. |
20 | | * |
21 | | * This class encapsulates several attributes of package metadata. It is used |
22 | | * both as a convenience container to convey several values in a single |
23 | | * container, and also provides utilities to obtain this metadata from commands |
24 | | * which produce packages (i.e. export and install). |
25 | | */ |
26 | | class cmPackageInfoArguments : public cmProjectInfoArguments |
27 | | { |
28 | | public: |
29 | | template <typename T, |
30 | | typename = cm::enable_if_t< |
31 | | std::is_base_of<cmPackageInfoArguments, T>::value>> |
32 | | static void Bind(cmArgumentParser<T>& parser) |
33 | 0 | { |
34 | 0 | cmPackageInfoArguments* const self = nullptr; |
35 | 0 | cmPackageInfoArguments::Bind(parser, self); |
36 | 0 | } |
37 | | |
38 | | void Bind(cmArgumentParser<void>& parser) |
39 | 0 | { |
40 | 0 | cmPackageInfoArguments::Bind(parser, this); |
41 | 0 | } |
42 | | |
43 | | std::string GetNamespace() const; |
44 | | std::string GetPackageDirName() const; |
45 | | std::string GetPackageFileName() const; |
46 | | std::string GetDefaultDestination(std::string const& root = {}) const; |
47 | | |
48 | | bool Check(cmExecutionStatus& status) const override; |
49 | | |
50 | | ArgumentParser::NonEmpty<std::string> Appendix; |
51 | | ArgumentParser::NonEmpty<std::string> DefaultLicense; |
52 | | ArgumentParser::NonEmpty<std::vector<std::string>> DefaultTargets; |
53 | | ArgumentParser::NonEmpty<std::vector<std::string>> DefaultConfigs; |
54 | | bool LowerCase = false; |
55 | | |
56 | | protected: |
57 | | cm::string_view CommandName() const override; |
58 | | |
59 | | bool SetEffectiveProject(cmExecutionStatus& status) override; |
60 | | |
61 | | template <typename T> |
62 | | static void Bind(cmArgumentParser<T>& parser, cmPackageInfoArguments* self) |
63 | 0 | { |
64 | 0 | cmProjectInfoArguments* const base = self; |
65 | |
|
66 | 0 | Bind(base, parser, "PACKAGE_INFO"_s, &cmProjectInfoArguments::PackageName); |
67 | 0 | Bind(self, parser, "LOWER_CASE_FILE"_s, |
68 | 0 | &cmPackageInfoArguments::LowerCase); |
69 | 0 | Bind(self, parser, "APPENDIX"_s, &cmPackageInfoArguments::Appendix); |
70 | |
|
71 | 0 | Bind(base, parser, "COMPAT_VERSION"_s, |
72 | 0 | &cmProjectInfoArguments::VersionCompat); |
73 | 0 | Bind(base, parser, "VERSION_SCHEMA"_s, |
74 | 0 | &cmProjectInfoArguments::VersionSchema); |
75 | 0 | Bind(self, parser, "DEFAULT_TARGETS"_s, |
76 | 0 | &cmPackageInfoArguments::DefaultTargets); |
77 | 0 | Bind(self, parser, "DEFAULT_CONFIGURATIONS"_s, |
78 | 0 | &cmPackageInfoArguments::DefaultConfigs); |
79 | 0 | Bind(self, parser, "DEFAULT_LICENSE"_s, |
80 | 0 | &cmPackageInfoArguments::DefaultLicense); |
81 | |
|
82 | 0 | cmProjectInfoArguments::Bind(parser, self); |
83 | 0 | } Unexecuted instantiation: cmExportCommand.cxx:void cmPackageInfoArguments::Bind<HandleSpecialExportMode<cmPackageInfoArguments, cmExportBuildPackageInfoGenerator>(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, cmExecutionStatus&)::ExportArguments>(cmArgumentParser<HandleSpecialExportMode<cmPackageInfoArguments, cmExportBuildPackageInfoGenerator>(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, cmExecutionStatus&)::ExportArguments>&, cmPackageInfoArguments*) Unexecuted instantiation: void cmPackageInfoArguments::Bind<void>(cmArgumentParser<void>&, cmPackageInfoArguments*) |
84 | | |
85 | | using cmProjectInfoArguments::Bind; |
86 | | |
87 | | static bool ArgWasSpecified(std::vector<std::string> const& value) |
88 | 0 | { |
89 | 0 | return !value.empty(); |
90 | 0 | } |
91 | | using cmProjectInfoArguments::ArgWasSpecified; |
92 | | }; |
93 | | |
94 | | extern template void cmPackageInfoArguments::Bind<void>( |
95 | | cmArgumentParser<void>&, cmPackageInfoArguments*); |