summaryrefslogtreecommitdiffstats
path: root/Source/CPack/cmCPackGeneratorFactory.cxx
diff options
context:
space:
mode:
authorAdriaan de Groot <groot@kde.org>2017-02-12 16:48:14 (GMT)
committerBrad King <brad.king@kitware.com>2017-06-10 11:53:59 (GMT)
commit2042cae9a5d9bb2f71a715022a4b6a7416c8e9e3 (patch)
treec164e350b033a26667041234f9979dd1e0707e66 /Source/CPack/cmCPackGeneratorFactory.cxx
parentc095e90f3af78fb3421c80b725ebc6ad9ec85999 (diff)
downloadCMake-2042cae9a5d9bb2f71a715022a4b6a7416c8e9e3.zip
CMake-2042cae9a5d9bb2f71a715022a4b6a7416c8e9e3.tar.gz
CMake-2042cae9a5d9bb2f71a715022a4b6a7416c8e9e3.tar.bz2
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.
Diffstat (limited to 'Source/CPack/cmCPackGeneratorFactory.cxx')
-rw-r--r--Source/CPack/cmCPackGeneratorFactory.cxx9
1 files changed, 9 insertions, 0 deletions
diff --git a/Source/CPack/cmCPackGeneratorFactory.cxx b/Source/CPack/cmCPackGeneratorFactory.cxx
index 31f48c7..f135059 100644
--- a/Source/CPack/cmCPackGeneratorFactory.cxx
+++ b/Source/CPack/cmCPackGeneratorFactory.cxx
@@ -9,6 +9,9 @@
#include "IFW/cmCPackIFWGenerator.h"
#include "cmAlgorithms.h"
#include "cmCPack7zGenerator.h"
+#ifdef HAVE_FREEBSD_PKG
+#include "cmCPackFreeBSDGenerator.h"
+#endif
#include "cmCPackGenerator.h"
#include "cmCPackLog.h"
#include "cmCPackNSISGenerator.h"
@@ -132,6 +135,12 @@ cmCPackGeneratorFactory::cmCPackGeneratorFactory()
cmCPackRPMGenerator::CreateGenerator);
}
#endif
+#ifdef HAVE_FREEBSD_PKG
+ if (cmCPackFreeBSDGenerator::CanGenerate()) {
+ this->RegisterGenerator("FREEBSD", "FreeBSD pkg(8) packages",
+ cmCPackFreeBSDGenerator::CreateGenerator);
+ }
+#endif
}
cmCPackGeneratorFactory::~cmCPackGeneratorFactory()