
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.
38 lines
971 B
C++
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
|