/src/CMake/Source/cmProjectInfoArguments.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 | | |
9 | | #include <cm/string_view> |
10 | | #include <cm/type_traits> |
11 | | #include <cmext/string_view> |
12 | | |
13 | | #include "cmArgumentParser.h" // IWYU pragma: keep |
14 | | #include "cmArgumentParserTypes.h" |
15 | | |
16 | | class cmExecutionStatus; |
17 | | |
18 | | /** \class cmProjectInfoArguments |
19 | | * \brief Convey information about a project. |
20 | | * |
21 | | * This class encapsulates several attributes of project metadata; |
22 | | * specifically, those which can be inherited from the project. It is used as |
23 | | * the base class for classes specific to SBOM and PACKAGE_INFO exports. |
24 | | */ |
25 | | class cmProjectInfoArguments |
26 | | { |
27 | | public: |
28 | | cmProjectInfoArguments(); |
29 | 0 | cmProjectInfoArguments(cmProjectInfoArguments const&) = default; |
30 | | cmProjectInfoArguments& operator=(cmProjectInfoArguments const&) = default; |
31 | 0 | cmProjectInfoArguments(cmProjectInfoArguments&&) = default; |
32 | | cmProjectInfoArguments& operator=(cmProjectInfoArguments&&) = default; |
33 | | |
34 | 0 | virtual ~cmProjectInfoArguments() = default; |
35 | | |
36 | | /// Ensure that no conflicting options were specified. |
37 | | virtual bool Check(cmExecutionStatus& status) const; |
38 | | |
39 | | /// Set metadata (not already specified) from either the specified project, |
40 | | /// or from the project which matches the package name. |
41 | | bool SetMetadataFromProject(cmExecutionStatus& status); |
42 | | |
43 | | ArgumentParser::NonEmpty<std::string> PackageName; |
44 | | ArgumentParser::NonEmpty<std::string> Version; |
45 | | ArgumentParser::NonEmpty<std::string> VersionCompat; |
46 | | ArgumentParser::NonEmpty<std::string> VersionSchema; |
47 | | ArgumentParser::NonEmpty<std::string> License; |
48 | | ArgumentParser::NonEmpty<std::string> Description; |
49 | | ArgumentParser::NonEmpty<std::string> Website; |
50 | | |
51 | | ArgumentParser::NonEmpty<std::string> ProjectName; |
52 | | bool NoProjectDefaults = false; |
53 | | |
54 | | protected: |
55 | | virtual cm::string_view CommandName() const = 0; |
56 | | |
57 | | virtual bool SetEffectiveProject(cmExecutionStatus& status); |
58 | | |
59 | | template <typename T> |
60 | | static void Bind(cmArgumentParser<T>& parser, cmProjectInfoArguments* self) |
61 | 0 | { |
62 | 0 | Bind(self, parser, "VERSION"_s, &cmProjectInfoArguments::Version); |
63 | 0 | Bind(self, parser, "LICENSE"_s, &cmProjectInfoArguments::License); |
64 | 0 | Bind(self, parser, "DESCRIPTION"_s, &cmProjectInfoArguments::Description); |
65 | 0 | Bind(self, parser, "HOMEPAGE_URL"_s, &cmProjectInfoArguments::Website); |
66 | |
|
67 | 0 | Bind(self, parser, "PROJECT"_s, &cmProjectInfoArguments::ProjectName); |
68 | 0 | Bind(self, parser, "NO_PROJECT_METADATA"_s, |
69 | 0 | &cmProjectInfoArguments::NoProjectDefaults); |
70 | 0 | } Unexecuted instantiation: cmExportCommand.cxx:void cmProjectInfoArguments::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>&, cmProjectInfoArguments*) Unexecuted instantiation: cmExportCommand.cxx:void cmProjectInfoArguments::Bind<HandleSpecialExportMode<cmSbomArguments, cmExportBuildSbomGenerator>(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<cmSbomArguments, cmExportBuildSbomGenerator>(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>&, cmProjectInfoArguments*) Unexecuted instantiation: void cmProjectInfoArguments::Bind<void>(cmArgumentParser<void>&, cmProjectInfoArguments*) |
71 | | |
72 | | template < |
73 | | typename Self, typename T, typename U, |
74 | | typename = |
75 | | cm::enable_if_t<std::is_base_of<cmProjectInfoArguments, Self>::value>, |
76 | | typename = |
77 | | cm::enable_if_t<std::is_base_of<cmProjectInfoArguments, T>::value>> |
78 | | static void Bind(Self*, cmArgumentParser<T>& parser, |
79 | | cm::static_string_view name, U Self::*member) |
80 | 0 | { |
81 | 0 | parser.Bind(name, member); |
82 | 0 | } Unexecuted instantiation: cmExportCommand.cxx:void cmProjectInfoArguments::Bind<cmProjectInfoArguments, 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, ArgumentParser::NonEmpty<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void, void>(cmProjectInfoArguments*, 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>&, cm::static_string_view, ArgumentParser::NonEmpty<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > cmProjectInfoArguments::*) Unexecuted instantiation: cmExportCommand.cxx:void cmProjectInfoArguments::Bind<cmPackageInfoArguments, 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, bool, void, void>(cmPackageInfoArguments*, 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>&, cm::static_string_view, bool cmPackageInfoArguments::*) Unexecuted instantiation: cmExportCommand.cxx:void cmProjectInfoArguments::Bind<cmPackageInfoArguments, 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, ArgumentParser::NonEmpty<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void, void>(cmPackageInfoArguments*, 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>&, cm::static_string_view, ArgumentParser::NonEmpty<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > cmPackageInfoArguments::*) Unexecuted instantiation: cmExportCommand.cxx:void cmProjectInfoArguments::Bind<cmPackageInfoArguments, 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, ArgumentParser::NonEmpty<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> > > > >, void, void>(cmPackageInfoArguments*, 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>&, cm::static_string_view, ArgumentParser::NonEmpty<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> > > > > cmPackageInfoArguments::*) Unexecuted instantiation: cmExportCommand.cxx:void cmProjectInfoArguments::Bind<cmProjectInfoArguments, 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, bool, void, void>(cmProjectInfoArguments*, 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>&, cm::static_string_view, bool cmProjectInfoArguments::*) Unexecuted instantiation: cmExportCommand.cxx:void cmProjectInfoArguments::Bind<cmProjectInfoArguments, HandleSpecialExportMode<cmSbomArguments, cmExportBuildSbomGenerator>(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, ArgumentParser::NonEmpty<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void, void>(cmProjectInfoArguments*, cmArgumentParser<HandleSpecialExportMode<cmSbomArguments, cmExportBuildSbomGenerator>(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>&, cm::static_string_view, ArgumentParser::NonEmpty<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > cmProjectInfoArguments::*) Unexecuted instantiation: cmExportCommand.cxx:void cmProjectInfoArguments::Bind<cmSbomArguments, HandleSpecialExportMode<cmSbomArguments, cmExportBuildSbomGenerator>(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, ArgumentParser::NonEmpty<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void, void>(cmSbomArguments*, cmArgumentParser<HandleSpecialExportMode<cmSbomArguments, cmExportBuildSbomGenerator>(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>&, cm::static_string_view, ArgumentParser::NonEmpty<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > cmSbomArguments::*) Unexecuted instantiation: cmExportCommand.cxx:void cmProjectInfoArguments::Bind<cmProjectInfoArguments, HandleSpecialExportMode<cmSbomArguments, cmExportBuildSbomGenerator>(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, bool, void, void>(cmProjectInfoArguments*, cmArgumentParser<HandleSpecialExportMode<cmSbomArguments, cmExportBuildSbomGenerator>(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>&, cm::static_string_view, bool cmProjectInfoArguments::*) |
83 | | |
84 | | template < |
85 | | typename Self, typename T, typename U, |
86 | | typename = |
87 | | cm::enable_if_t<std::is_base_of<cmProjectInfoArguments, Self>::value>, |
88 | | typename = |
89 | | cm::enable_if_t<std::is_base_of<cmProjectInfoArguments, T>::value>> |
90 | | static void Bind(Self* self, cmArgumentParser<void>& parser, |
91 | | cm::static_string_view name, U T::*member) |
92 | 0 | { |
93 | 0 | parser.Bind(name, (self)->*member); |
94 | 0 | } Unexecuted instantiation: void cmProjectInfoArguments::Bind<cmProjectInfoArguments, cmProjectInfoArguments, ArgumentParser::NonEmpty<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void, void>(cmProjectInfoArguments*, cmArgumentParser<void>&, cm::static_string_view, ArgumentParser::NonEmpty<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > cmProjectInfoArguments::*) Unexecuted instantiation: void cmProjectInfoArguments::Bind<cmSbomArguments, cmSbomArguments, ArgumentParser::NonEmpty<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void, void>(cmSbomArguments*, cmArgumentParser<void>&, cm::static_string_view, ArgumentParser::NonEmpty<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > cmSbomArguments::*) Unexecuted instantiation: void cmProjectInfoArguments::Bind<cmProjectInfoArguments, cmProjectInfoArguments, bool, void, void>(cmProjectInfoArguments*, cmArgumentParser<void>&, cm::static_string_view, bool cmProjectInfoArguments::*) Unexecuted instantiation: void cmProjectInfoArguments::Bind<cmPackageInfoArguments, cmPackageInfoArguments, bool, void, void>(cmPackageInfoArguments*, cmArgumentParser<void>&, cm::static_string_view, bool cmPackageInfoArguments::*) Unexecuted instantiation: void cmProjectInfoArguments::Bind<cmPackageInfoArguments, cmPackageInfoArguments, ArgumentParser::NonEmpty<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void, void>(cmPackageInfoArguments*, cmArgumentParser<void>&, cm::static_string_view, ArgumentParser::NonEmpty<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > cmPackageInfoArguments::*) Unexecuted instantiation: void cmProjectInfoArguments::Bind<cmPackageInfoArguments, cmPackageInfoArguments, ArgumentParser::NonEmpty<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> > > > >, void, void>(cmPackageInfoArguments*, cmArgumentParser<void>&, cm::static_string_view, ArgumentParser::NonEmpty<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> > > > > cmPackageInfoArguments::*) |
95 | | |
96 | | static bool ArgWasSpecified(std::string const& value) |
97 | 0 | { |
98 | 0 | return !value.empty(); |
99 | 0 | } |
100 | | }; |
101 | | |
102 | | extern template void cmProjectInfoArguments::Bind<void>( |
103 | | cmArgumentParser<void>&, cmProjectInfoArguments*); |