mirror of
https://github.com/Kitware/CMake.git
synced 2025-06-21 20:11:22 +08:00

Create a CPack generator that uses `nuget.exe` to create packages: https://docs.microsoft.com/en-us/nuget/what-is-nuget NuGet packages could be easily produced from a `*.nuspec` file (running `nuget pack` in the directory w/ the spec file). The spec filename does not affect the result `*.nupkg` name -- only `id` and `version` elements of the spec are used (by NuGet). Some implementation details: * Minimize C++ code -- use CMake script do to the job. It just let the base class (`cmCPackGenerator`) to preinstall everything to a temp directory, render the spec file and run `nuget pack` in it, harvesting `*.nupkg` files...; * Ignore package name (and use default paths) prepared by the base class (only `CPACK_TEMPORARY_DIRECTORY` is important) -- final package filename is a responsibility of NuGet, so after generation just scan the temp directory for the result `*.nupkg` file(s) and update `packageFileNames` data-member of the generator; * The generator supports _all-in-one_ (default), _one-group-per-package_ and _one-component-per-package_ modes.
38 lines
1.1 KiB
C++
38 lines
1.1 KiB
C++
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
file Copyright.txt or https://cmake.org/licensing for details. */
|
|
#ifndef cmCPackNuGetGenerator_h
|
|
#define cmCPackNuGetGenerator_h
|
|
|
|
#include "cmCPackGenerator.h"
|
|
|
|
/** \class cmCPackNuGetGenerator
|
|
* \brief A generator for RPM packages
|
|
*/
|
|
class cmCPackNuGetGenerator : public cmCPackGenerator
|
|
{
|
|
public:
|
|
cmCPackTypeMacro(cmCPackNuGetGenerator, cmCPackGenerator);
|
|
|
|
// NOTE In fact, it is possible to have NuGet not only for Windows...
|
|
// https://docs.microsoft.com/en-us/nuget/install-nuget-client-tools
|
|
static bool CanGenerate() { return true; }
|
|
|
|
protected:
|
|
bool SupportsComponentInstallation() const override;
|
|
int PackageFiles() override;
|
|
|
|
const char* GetOutputExtension() override { return ".nupkg"; }
|
|
bool SupportsAbsoluteDestination() const override { return false; }
|
|
/**
|
|
* The method used to prepare variables when component
|
|
* install is used.
|
|
*/
|
|
void SetupGroupComponentVariables(bool ignoreGroup);
|
|
/**
|
|
* Populate \c packageFileNames vector of built packages.
|
|
*/
|
|
void AddGeneratedPackageNames();
|
|
};
|
|
|
|
#endif
|