mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-09 08:40:11 -06:00
Extract those values of cmPackageInfoArguments which are inherited from the project into a new base class. This will allow other users (SBOM support, in particular) to leverage the functionality of inheriting these values without duplicating code or needing to share the exact same value set.
95 lines
3.0 KiB
C++
95 lines
3.0 KiB
C++
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
file LICENSE.rst or https://cmake.org/licensing for details. */
|
|
#pragma once
|
|
|
|
#include "cmConfigure.h" // IWYU pragma: keep
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <cm/string_view>
|
|
#include <cm/type_traits>
|
|
#include <cmext/string_view>
|
|
|
|
#include "cmArgumentParser.h" // IWYU pragma: keep
|
|
#include "cmArgumentParserTypes.h"
|
|
#include "cmProjectInfoArguments.h"
|
|
|
|
/** \class cmPackageInfoArguments
|
|
* \brief Convey information about a package.
|
|
*
|
|
* This class encapsulates several attributes of package metadata. It is used
|
|
* both as a convenience container to convey several values in a single
|
|
* container, and also provides utilities to obtain this metadata from commands
|
|
* which produce packages (i.e. export and install).
|
|
*/
|
|
class cmPackageInfoArguments : public cmProjectInfoArguments
|
|
{
|
|
public:
|
|
template <typename T,
|
|
typename = cm::enable_if_t<
|
|
std::is_base_of<cmPackageInfoArguments, T>::value>>
|
|
static void Bind(cmArgumentParser<T>& parser)
|
|
{
|
|
cmPackageInfoArguments* const self = nullptr;
|
|
cmPackageInfoArguments::Bind(parser, self);
|
|
}
|
|
|
|
void Bind(cmArgumentParser<void>& parser)
|
|
{
|
|
cmPackageInfoArguments::Bind(parser, this);
|
|
}
|
|
|
|
std::string GetNamespace() const;
|
|
std::string GetPackageDirName() const;
|
|
std::string GetPackageFileName() const;
|
|
|
|
bool Check(cmExecutionStatus& status) const override;
|
|
|
|
ArgumentParser::NonEmpty<std::string> Appendix;
|
|
ArgumentParser::NonEmpty<std::string> DefaultLicense;
|
|
ArgumentParser::NonEmpty<std::vector<std::string>> DefaultTargets;
|
|
ArgumentParser::NonEmpty<std::vector<std::string>> DefaultConfigs;
|
|
bool LowerCase = false;
|
|
|
|
protected:
|
|
cm::string_view CommandName() const override;
|
|
|
|
bool SetEffectiveProject(cmExecutionStatus& status) override;
|
|
|
|
template <typename T>
|
|
static void Bind(cmArgumentParser<T>& parser, cmPackageInfoArguments* self)
|
|
{
|
|
cmProjectInfoArguments* const base = self;
|
|
|
|
Bind(base, parser, "PACKAGE_INFO"_s, &cmProjectInfoArguments::PackageName);
|
|
Bind(self, parser, "LOWER_CASE_FILE"_s,
|
|
&cmPackageInfoArguments::LowerCase);
|
|
Bind(self, parser, "APPENDIX"_s, &cmPackageInfoArguments::Appendix);
|
|
|
|
Bind(base, parser, "COMPAT_VERSION"_s,
|
|
&cmProjectInfoArguments::VersionCompat);
|
|
Bind(base, parser, "VERSION_SCHEMA"_s,
|
|
&cmProjectInfoArguments::VersionSchema);
|
|
Bind(self, parser, "DEFAULT_TARGETS"_s,
|
|
&cmPackageInfoArguments::DefaultTargets);
|
|
Bind(self, parser, "DEFAULT_CONFIGURATIONS"_s,
|
|
&cmPackageInfoArguments::DefaultConfigs);
|
|
Bind(self, parser, "DEFAULT_LICENSE"_s,
|
|
&cmPackageInfoArguments::DefaultLicense);
|
|
|
|
cmProjectInfoArguments::Bind(parser, self);
|
|
}
|
|
|
|
using cmProjectInfoArguments::Bind;
|
|
|
|
static bool ArgWasSpecified(std::vector<std::string> const& value)
|
|
{
|
|
return !value.empty();
|
|
}
|
|
using cmProjectInfoArguments::ArgWasSpecified;
|
|
};
|
|
|
|
extern template void cmPackageInfoArguments::Bind<void>(
|
|
cmArgumentParser<void>&, cmPackageInfoArguments*);
|