blob: aafa84feed6951c78bc38a073280d1b3434bd8fe [file] [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;
std::string GetDefaultDestination(std::string const& root = {}) 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*);