/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 | | |
47 | | bool Check(cmExecutionStatus& status) const override; |
48 | | |
49 | | ArgumentParser::NonEmpty<std::string> Appendix; |
50 | | ArgumentParser::NonEmpty<std::string> DefaultLicense; |
51 | | ArgumentParser::NonEmpty<std::vector<std::string>> DefaultTargets; |
52 | | ArgumentParser::NonEmpty<std::vector<std::string>> DefaultConfigs; |
53 | | bool LowerCase = false; |
54 | | |
55 | | protected: |
56 | | cm::string_view CommandName() const override; |
57 | | |
58 | | bool SetEffectiveProject(cmExecutionStatus& status) override; |
59 | | |
60 | | template <typename T> |
61 | | static void Bind(cmArgumentParser<T>& parser, cmPackageInfoArguments* self) |
62 | 0 | { |
63 | 0 | cmProjectInfoArguments* const base = self; |
64 | |
|
65 | 0 | Bind(base, parser, "PACKAGE_INFO"_s, &cmProjectInfoArguments::PackageName); |
66 | 0 | Bind(self, parser, "LOWER_CASE_FILE"_s, |
67 | 0 | &cmPackageInfoArguments::LowerCase); |
68 | 0 | Bind(self, parser, "APPENDIX"_s, &cmPackageInfoArguments::Appendix); |
69 | |
|
70 | 0 | Bind(base, parser, "COMPAT_VERSION"_s, |
71 | 0 | &cmProjectInfoArguments::VersionCompat); |
72 | 0 | Bind(base, parser, "VERSION_SCHEMA"_s, |
73 | 0 | &cmProjectInfoArguments::VersionSchema); |
74 | 0 | Bind(self, parser, "DEFAULT_TARGETS"_s, |
75 | 0 | &cmPackageInfoArguments::DefaultTargets); |
76 | 0 | Bind(self, parser, "DEFAULT_CONFIGURATIONS"_s, |
77 | 0 | &cmPackageInfoArguments::DefaultConfigs); |
78 | 0 | Bind(self, parser, "DEFAULT_LICENSE"_s, |
79 | 0 | &cmPackageInfoArguments::DefaultLicense); |
80 | |
|
81 | 0 | cmProjectInfoArguments::Bind(parser, self); |
82 | 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*) |
83 | | |
84 | | using cmProjectInfoArguments::Bind; |
85 | | |
86 | | static bool ArgWasSpecified(std::vector<std::string> const& value) |
87 | 0 | { |
88 | 0 | return !value.empty(); |
89 | 0 | } |
90 | | using cmProjectInfoArguments::ArgWasSpecified; |
91 | | }; |
92 | | |
93 | | extern template void cmPackageInfoArguments::Bind<void>( |
94 | | cmArgumentParser<void>&, cmPackageInfoArguments*); |