blob: 50f04983a38649b685112d8afc0d9a5da176e17f [file] [log] [blame] [edit]
/* 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 <cm/string_view>
#include <cm/type_traits>
#include <cmext/string_view>
#include "cmArgumentParser.h" // IWYU pragma: keep
#include "cmArgumentParserTypes.h"
#include "cmProjectInfoArguments.h"
class cmSbomArguments : public cmProjectInfoArguments
{
public:
enum class SbomFormat
{
SPDX_3_0_JSON,
NONE,
};
template <
typename T,
typename = cm::enable_if_t<std::is_base_of<cmSbomArguments, T>::value>>
static void Bind(cmArgumentParser<T>& parser)
{
cmSbomArguments* const self = nullptr;
cmSbomArguments::Bind(parser, self);
}
void Bind(cmArgumentParser<void>& parser) { Bind(parser, this); }
bool Check(cmExecutionStatus& status) const override;
std::string GetNamespace() const;
std::string GetPackageDirName() const;
std::string GetPackageFileName() const;
SbomFormat GetFormat() const;
ArgumentParser::NonEmpty<std::string> Format;
protected:
cm::string_view CommandName() const override;
private:
using cmProjectInfoArguments::Bind;
template <typename T>
static void Bind(cmArgumentParser<T>& parser, cmSbomArguments* self)
{
cmProjectInfoArguments* const base = self;
Bind(base, parser, "SBOM"_s, &cmProjectInfoArguments::PackageName);
Bind(self, parser, "FORMAT"_s, &cmSbomArguments::Format);
cmProjectInfoArguments::Bind(parser, self);
}
};
extern template void cmSbomArguments::Bind<void>(cmArgumentParser<void>&,
cmSbomArguments*);