mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-05 05:11:15 -06: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.
66 lines
2.1 KiB
CMake
66 lines
2.1 KiB
CMake
#
|
|
# Activate component packaging
|
|
#
|
|
if(CPACK_GENERATOR MATCHES "ZIP")
|
|
set(CPACK_ARCHIVE_COMPONENT_INSTALL "ON")
|
|
endif()
|
|
|
|
if(CPACK_GENERATOR MATCHES "RPM")
|
|
set(CPACK_RPM_COMPONENT_INSTALL "ON")
|
|
|
|
# test that /usr and /usr/foo get omitted in relocatable
|
|
# rpms as shortest relocation path is treated as base of
|
|
# package (/usr/foo/bar is relocatable and must exist)
|
|
set(CPACK_PACKAGING_INSTALL_PREFIX "/usr/foo/bar")
|
|
|
|
# test requires
|
|
set(CPACK_RPM_APPLICATIONS_PACKAGE_REQUIRES "mylib-libraries")
|
|
|
|
# test a "noarch" rpm
|
|
set(CPACK_RPM_HEADERS_PACKAGE_ARCHITECTURE "noarch")
|
|
|
|
# test cross-built rpm
|
|
set(CPACK_RPM_APPLICATIONS_PACKAGE_ARCHITECTURE "armv7hf")
|
|
|
|
# test package summary override - headers rpm is generated in the middle
|
|
set(CPACK_RPM_PACKAGE_SUMMARY "default summary")
|
|
set(CPACK_RPM_HEADERS_PACKAGE_SUMMARY "headers summary")
|
|
|
|
# test package description override - headers rpm is generated in the middle
|
|
set(CPACK_RPM_HEADERS_PACKAGE_DESCRIPTION "headers description")
|
|
|
|
# test package do not use CPACK_PACKAGING_INSTALL_PREFIX
|
|
# as relocation path
|
|
set(CPACK_RPM_NO_LIBRARIES_INSTALL_PREFIX_RELOCATION true)
|
|
|
|
# test default permissions
|
|
set(CPACK_RPM_DEFAULT_USER defusr)
|
|
set(CPACK_RPM_DEFAULT_GROUP defgrp)
|
|
set(CPACK_RPM_DEFAULT_FILE_PERMISSIONS
|
|
OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ WORLD_READ)
|
|
set(CPACK_RPM_DEFAULT_DIR_PERMISSIONS
|
|
OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ WORLD_READ)
|
|
set(CPACK_RPM_LIBRARIES_DEFAULT_USER user)
|
|
set(CPACK_RPM_APPLICATIONS_DEFAULT_GROUP group)
|
|
set(CPACK_RPM_LIBRARIES_DEFAULT_FILE_PERMISSIONS
|
|
OWNER_READ OWNER_WRITE OWNER_EXECUTE)
|
|
set(CPACK_RPM_APPLICATIONS_DEFAULT_DIR_PERMISSIONS
|
|
OWNER_READ GROUP_READ WORLD_READ)
|
|
endif()
|
|
|
|
if(CPACK_GENERATOR MATCHES "DEB")
|
|
set(CPACK_DEB_COMPONENT_INSTALL "ON")
|
|
endif()
|
|
|
|
if(CPACK_GENERATOR MATCHES "NuGet")
|
|
set(CPACK_NUGET_COMPONENT_INSTALL "ON")
|
|
endif()
|
|
|
|
#
|
|
# Choose grouping way
|
|
#
|
|
#set(CPACK_COMPONENTS_ALL_GROUPS_IN_ONE_PACKAGE)
|
|
#set(CPACK_COMPONENTS_GROUPING)
|
|
set(CPACK_COMPONENTS_IGNORE_GROUPS 1)
|
|
#set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE 1)
|