123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
- # file Copyright.txt or https://cmake.org/licensing for details.
- #[=======================================================================[.rst:
- CPackFreeBSD
- ------------
- The built in (binary) CPack FreeBSD (pkg) generator (Unix only)
- Variables specific to CPack FreeBSD (pkg) generator
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- CPackFreeBSD may be used to create pkg(8) packages -- these may be used
- on FreeBSD, DragonflyBSD, NetBSD, OpenBSD, but also on Linux or OSX,
- depending on the installed package-management tools -- using :module:`CPack`.
- CPackFreeBSD is a :module:`CPack` generator and uses the ``CPACK_XXX``
- variables used by :module:`CPack`. It tries to re-use packaging information
- that may already be specified for Debian packages for the :module:`CPackDeb`
- generator. it also tries to re-use RPM packaging information when Debian
- does not specify.
- CPackFreeBSD generator should work on any host with libpkg installed. The
- packages it produces are specific to the host architecture and ABI.
- CPackFreeBSD sets package-metadata through :code:`CPACK_FREEBSD_XXX` variables.
- CPackFreeBSD, unlike CPackDeb, does not specially support componentized
- packages; a single package is created from all the software artifacts
- created through CMake.
- All of the variables can be set specifically for FreeBSD packaging in
- the CPackConfig file or in CMakeLists.txt, but most of them have defaults
- that use general settings (e.g. CMAKE_PROJECT_NAME) or Debian-specific
- variables when those make sense (e.g. the homepage of an upstream project
- is usually unchanged by the flavor of packaging). When there is no Debian
- information to fall back on, but the RPM packaging has it, fall back to
- the RPM information (e.g. package license).
- .. variable:: CPACK_FREEBSD_PACKAGE_NAME
- Sets the package name (in the package manifest, but also affects the
- output filename).
- * Mandatory: YES
- * Default:
- - :variable:`CPACK_PACKAGE_NAME` (this is always set by CPack itself,
- based on CMAKE_PROJECT_NAME).
- .. variable:: CPACK_FREEBSD_PACKAGE_COMMENT
- Sets the package comment. This is the short description displayed by
- pkg(8) in standard "pkg info" output.
- * Mandatory: YES
- * Default:
- - :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY` (this is always set
- by CPack itself, if nothing else sets it explicitly).
- - :variable:`PROJECT_DESCRIPTION` (this can be set with the DESCRIPTION
- parameter for :command:`project`).
- .. variable:: CPACK_FREEBSD_PACKAGE_DESCRIPTION
- Sets the package description. This is the long description of the package,
- given by "pkg info" with a specific package as argument.
- * Mandatory: YES
- * Default:
- - :variable:`CPACK_DEBIAN_PACKAGE_DESCRIPTION` (this may be set already
- for Debian packaging, so we may as well re-use it).
- .. variable:: CPACK_FREEBSD_PACKAGE_WWW
- The URL of the web site for this package, preferably (when applicable) the
- site from which the original source can be obtained and any additional
- upstream documentation or information may be found.
- * Mandatory: YES
- * Default:
- - :variable:`CPACK_DEBIAN_PACKAGE_HOMEPAGE` (this may be set already
- for Debian packaging, so we may as well re-use it).
- .. variable:: CPACK_FREEBSD_PACKAGE_LICENSE
- The license, or licenses, which apply to this software package. This must
- be one or more license-identifiers that pkg recognizes as acceptable license
- identifiers (e.g. "GPLv2").
- * Mandatory: YES
- * Default:
- - :variable:`CPACK_RPM_PACKAGE_LICENSE`
- .. variable:: CPACK_FREEBSD_PACKAGE_LICENSE_LOGIC
- This variable is only of importance if there is more than one license.
- The default is "single", which is only applicable to a single license.
- Other acceptable values are determined by pkg -- those are "dual" or "multi" --
- meaning choice (OR) or simultaneous (AND) application of the licenses.
- * Mandatory: NO
- * Default: single
- .. variable:: CPACK_FREEBSD_PACKAGE_MAINTAINER
- The FreeBSD maintainer (e.g. kde@freebsd.org) of this package.
- * Mandatory: YES
- * Default: none
- .. variable:: CPACK_FREEBSD_PACKAGE_ORIGIN
- The origin (ports label) of this package; for packages built by CPack
- outside of the ports system this is of less importance. The default
- puts the package somewhere under misc/, as a stopgap.
- * Mandatory: YES
- * Default: misc/<package name>
- .. variable:: CPACK_FREEBSD_PACKAGE_CATEGORIES
- The ports categories where this package lives (if it were to be built
- from ports). If none is set a single category is determined based on
- the package origin.
- * Mandatory: YES
- * Default: derived from ORIGIN
- .. variable:: CPACK_FREEBSD_PACKAGE_DEPS
- A list of package origins that should be added as package dependencies.
- These are in the form <category>/<packagename>, e.g. x11/libkonq.
- No version information needs to be provided (this is not included
- in the manifest).
- * Mandatory: NO
- * Default: empty
- #]=======================================================================]
- if(CMAKE_BINARY_DIR)
- message(FATAL_ERROR "CPackFreeBSD.cmake may only be used by CPack internally.")
- endif()
- if(NOT UNIX)
- message(FATAL_ERROR "CPackFreeBSD.cmake may only be used under UNIX.")
- endif()
- ###
- #
- # These bits are copied from the Debian packaging file; slightly modified.
- # They are used for filling in FreeBSD-packaging variables that can take
- # on values from elsewhere -- e.g. the package description may as well be
- # copied from Debian.
- #
- function(_cpack_freebsd_fallback_var OUTPUT_VAR_NAME)
- set(FALLBACK_VAR_NAMES ${ARGN})
- set(VALUE "${${OUTPUT_VAR_NAME}}")
- if(VALUE)
- return()
- endif()
- foreach(variable_name IN LISTS FALLBACK_VAR_NAMES)
- if(${variable_name})
- set(${OUTPUT_VAR_NAME} "${${variable_name}}" PARENT_SCOPE)
- set(VALUE "${${variable_name}}")
- break()
- endif()
- endforeach()
- if(NOT VALUE)
- message(WARNING "Variable ${OUTPUT_VAR_NAME} could not be given a fallback value from any variable ${FALLBACK_VAR_NAMES}.")
- endif()
- endfunction()
- function(check_required_var VAR_NAME)
- if(NOT ${VAR_NAME})
- message(FATAL_ERROR "Variable ${VAR_NAME} is not set.")
- endif()
- endfunction()
- set(_cpack_freebsd_fallback_origin "misc/bogus")
- _cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_NAME"
- "CPACK_PACKAGE_NAME"
- "CMAKE_PROJECT_NAME"
- )
- set(_cpack_freebsd_fallback_www "http://example.com/?pkg=${CPACK_FREEBSD_PACKAGE_NAME}")
- _cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_COMMENT"
- "CPACK_PACKAGE_DESCRIPTION_SUMMARY"
- )
- # TODO: maybe read the PACKAGE_DESCRIPTION file for the longer
- # FreeBSD pkg-descr?
- _cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_DESCRIPTION"
- "CPACK_DEBIAN_PACKAGE_DESCRIPTION"
- "CPACK_PACKAGE_DESCRIPTION_SUMMARY"
- "PACKAGE_DESCRIPTION"
- )
- # There's really only one homepage for a project, so
- # re-use the Debian setting if it's there.
- _cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_WWW"
- "CPACK_DEBIAN_PACKAGE_HOMEPAGE"
- "_cpack_freebsd_fallback_www"
- )
- _cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_VERSION"
- "CMAKE_PROJECT_VERSION"
- "${CMAKE_PROJECT_NAME}_VERSION"
- "PROJECT_VERSION"
- "CPACK_PACKAGE_VERSION"
- "CPACK_PACKAGE_VERSION"
- )
- _cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_MAINTAINER"
- "CPACK_PACKAGE_CONTACT"
- )
- _cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_LICENSE"
- "CPACK_RPM_PACKAGE_LICENSE"
- )
- _cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_ORIGIN"
- "_cpack_freebsd_fallback_origin"
- )
- if(NOT CPACK_FREEBSD_PACKAGE_CATEGORIES)
- string(REGEX REPLACE "/.*" "" CPACK_FREEBSD_PACKAGE_CATEGORIES ${CPACK_FREEBSD_PACKAGE_ORIGIN})
- endif()
- check_required_var("CPACK_FREEBSD_PACKAGE_NAME")
- check_required_var("CPACK_FREEBSD_PACKAGE_ORIGIN")
- check_required_var("CPACK_FREEBSD_PACKAGE_VERSION")
- check_required_var("CPACK_FREEBSD_PACKAGE_MAINTAINER")
- check_required_var("CPACK_FREEBSD_PACKAGE_COMMENT")
- check_required_var("CPACK_FREEBSD_PACKAGE_DESCRIPTION")
- check_required_var("CPACK_FREEBSD_PACKAGE_WWW")
- check_required_var("CPACK_FREEBSD_PACKAGE_LICENSE")
|