1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-06-21 20:11:22 +08:00
CMake/Source/CPack/cmCPackNuGetGenerator.h
Alex Turbov f739752ad6 CPack: Add NuGet support
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.
2018-05-11 09:28:44 -04:00

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