CPack-FreeBSD: add a generator for FreeBSD pkg(8)

Adds an option CPACK_ENABLE_FREEBSD_PKG to allow CPack to look
for FreeBSD's libpkg / pkg(8). If this is set and the libpkg
headers and library are found (which they will be, by default,
on any FreeBSD system), then add a FreeBSD pkg(8) generator.

The FreeBSD package tool pkg(8) uses tar.xz files (.txz) with two
metadata files embedded (+MANIFEST and +COMPACT_MANIFEST).
This introduces a bunch of FreeBSD-specific CPACK_FREEBSD_PACKAGE_*
variables for filling in the metadata; the Debian generator does
something similar. Documentation for the CPack CMake-script is styled
after the Debian generator.

Implementation notes:
 - Checks for libpkg -- the underlying implementation for pkg(8) --
   and includes FreeBSD package-generation if building CMake on
   a UNIX host. Since libpkg can be used on BSDs, Linux and OSX,
   this potentially adds one more packaging format. In practice,
   this will only happen on FreeBSD and DragonflyBSD.
 - Copy-paste from cmCPackArchiveGenerator to special-case
   the metadata generation and to run around the internal
   archive generation: use libpkg instead.
 - Generating the metadata files is a little contrived.
 - Most of the validation logic for package settings is in
   CPackFreeBSD.cmake, as well as the code that tries to re-use
   packaging settings that may already be set up for Debian.
 - libpkg has its own notion of output filename, so we have
   another contrived bit of code that munges the output file
   list so that CPack can find the output.
 - Stick with C++98.
This commit is contained in:
Adriaan de Groot
2017-02-12 17:48:14 +01:00
committed by Brad King
parent c095e90f3a
commit 2042cae9a5
10 changed files with 696 additions and 0 deletions
+1
View File
@@ -60,6 +60,7 @@ All Modules
/module/CPackCygwin
/module/CPackDeb
/module/CPackDMG
/module/CPackFreeBSD
/module/CPackIFW
/module/CPackIFWConfigureFile
/module/CPackNSIS
+1
View File
@@ -0,0 +1 @@
.. cmake-module:: ../../Modules/CPackFreeBSD.cmake
+5
View File
@@ -0,0 +1,5 @@
cpack-freebsd-pkg
-----------------
* CPack gained a ``FREEBSD`` generator for FreeBSD ``pkg(8)``, configured
by the :module:`CPackFreeBSD` module.