CMake/Source/CPack/cmCPackFreeBSDGenerator.h
Adriaan de Groot 2042cae9a5 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.
2017-06-10 07:53:59 -04:00

38 lines
971 B
C++

/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#ifndef cmCPackFreeBSDGenerator_h
#define cmCPackFreeBSDGenerator_h
#include <cmConfigure.h>
#include "cmCPackArchiveGenerator.h"
#include "cmCPackGenerator.h"
class cmGeneratedFileStream;
/** \class cmCPackFreeBSDGenerator
* \brief A generator for FreeBSD package files (TXZ with a manifest)
*
*/
class cmCPackFreeBSDGenerator : public cmCPackArchiveGenerator
{
public:
cmCPackTypeMacro(cmCPackFreeBSDGenerator, cmCPackArchiveGenerator);
/**
* Construct generator
*/
cmCPackFreeBSDGenerator();
~cmCPackFreeBSDGenerator() CM_OVERRIDE;
int InitializeInternal() CM_OVERRIDE;
int PackageFiles() CM_OVERRIDE;
protected:
const char* GetOutputExtension() CM_OVERRIDE { return ".txz"; }
std::string var_lookup(const char* var_name);
void write_manifest_fields(cmGeneratedFileStream&);
};
#endif