2013-10-15 19:17:36 +04:00
#.rst:
# CPackDeb
# --------
#
# The builtin (binary) CPack Deb generator (Unix only)
#
2013-10-15 21:23:23 +04:00
# Variables specific to CPack Debian (DEB) generator
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#
# CPackDeb may be used to create Deb package using CPack.
2009-10-30 19:06:53 +03:00
# CPackDeb is a CPack generator thus it uses the CPACK_XXX variables
2010-07-28 20:24:20 +04:00
# used by CPack : http://www.cmake.org/Wiki/CMake:CPackConfiguration.
2013-10-15 19:17:36 +04:00
# CPackDeb generator should work on any linux host but it will produce
# better deb package when Debian specific tools 'dpkg-xxx' are usable on
# the build system.
#
# CPackDeb has specific features which are controlled by the specifics
2015-04-29 19:05:36 +03:00
# :code:`CPACK_DEBIAN_XXX` variables.
2013-10-15 19:17:36 +04:00
#
2015-04-29 19:05:36 +03:00
# :code:`CPACK_DEBIAN_<COMPONENT>_XXXX` variables may be used in order to have
# **component** specific values. Note however that <COMPONENT> refers to the
# **grouping name** written in upper case. It may be either a component name or
# a component GROUP name.
#
# You'll find a detailed usage on the wiki:
# http://www.cmake.org/Wiki/CMake:CPackPackageGenerators#DEB_.28UNIX_only.29 .
2009-10-30 19:06:53 +03:00
# However as a handy reminder here comes the list of specific variables:
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_NAME
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# The Debian package summary
#
2013-10-15 21:23:23 +04:00
# * Mandatory : YES
2015-05-16 00:06:43 +03:00
# * Default : :variable:`CPACK_PACKAGE_NAME` (lower case)
2013-10-15 19:17:36 +04:00
#
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_VERSION
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# The Debian package version
#
2013-10-15 21:23:23 +04:00
# * Mandatory : YES
2015-05-16 00:06:43 +03:00
# * Default : :variable:`CPACK_PACKAGE_VERSION`
2013-10-15 19:17:36 +04:00
#
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_ARCHITECTURE
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# The Debian package architecture
#
2013-10-15 21:23:23 +04:00
# * Mandatory : YES
2015-05-16 00:06:43 +03:00
# * Default : Output of :code:`dpkg --print-architecture` (or :code:`i386`
# if :code:`dpkg` is not found)
2013-10-15 19:17:36 +04:00
#
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_DEPENDS
2015-05-09 00:36:26 +03:00
# CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS
#
2015-05-16 00:06:43 +03:00
# Sets the Debian dependencies of this package.
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# * Mandatory : NO
2015-05-09 00:36:26 +03:00
# * Default :
2013-10-15 19:17:36 +04:00
#
2015-05-09 00:36:26 +03:00
# - An empty string for non-component based installations
# - :variable:`CPACK_DEBIAN_PACKAGE_DEPENDS` for component-based
# installations.
#
# .. note::
#
# If :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS` or
# more specifically :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS`
# is set for this component, the discovered dependencies will be appended
2015-05-16 00:06:43 +03:00
# to :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS` instead of
2015-05-09 00:36:26 +03:00
# :variable:`CPACK_DEBIAN_PACKAGE_DEPENDS`. If
# :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS` is an empty string,
# only the automatically discovered dependencies will be set for this
# component.
#
# Example::
#
# set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6), libc6 (< 2.4)")
2013-10-15 19:17:36 +04:00
#
2015-09-10 00:57:58 +03:00
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_MAINTAINER
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# The Debian package maintainer
#
2013-10-15 21:23:23 +04:00
# * Mandatory : YES
2015-05-16 00:06:43 +03:00
# * Default : :code:`CPACK_PACKAGE_CONTACT`
2013-10-15 19:17:36 +04:00
#
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_DESCRIPTION
2015-04-29 19:05:36 +03:00
# CPACK_COMPONENT_<COMPONENT>_DESCRIPTION
#
2015-05-16 00:06:43 +03:00
# The Debian package description
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# * Mandatory : YES
2015-04-29 19:05:36 +03:00
# * Default :
2013-10-15 19:17:36 +04:00
#
2015-04-29 19:05:36 +03:00
# - :variable:`CPACK_DEBIAN_PACKAGE_DESCRIPTION` if set or
# - :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_SECTION
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# * Mandatory : YES
# * Default : 'devel'
2013-10-15 19:17:36 +04:00
#
2014-03-10 09:37:26 +04:00
# .. variable:: CPACK_DEBIAN_COMPRESSION_TYPE
#
2015-05-16 00:06:43 +03:00
# The compression used for creating the Debian package.
# Possible values are: lzma, xz, bzip2 and gzip.
#
2014-03-10 09:37:26 +04:00
# * Mandatory : YES
# * Default : 'gzip'
#
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_PRIORITY
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# The Debian package priority
#
2013-10-15 21:23:23 +04:00
# * Mandatory : YES
# * Default : 'optional'
2013-10-15 19:17:36 +04:00
#
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_HOMEPAGE
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# 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.
2015-05-16 00:06:43 +03:00
#
# * Mandatory : NO
# * Default : -
#
# .. note::
#
# The content of this field is a simple URL without any surrounding
# characters such as <>.
#
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_SHLIBDEPS
2015-05-02 23:14:57 +03:00
# CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# May be set to ON in order to use :code:`dpkg-shlibdeps` to generate
2013-10-15 21:23:23 +04:00
# better package dependency list.
2015-05-02 23:14:57 +03:00
#
# * Mandatory : NO
# * Default :
#
# - :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS` if set or
# - OFF
#
# .. note::
#
# You may need set :variable:`CMAKE_INSTALL_RPATH` to an appropriate value
# if you use this feature, because if you don't :code:`dpkg-shlibdeps`
# may fail to find your own shared libs.
# See http://www.cmake.org/Wiki/CMake_RPATH_handling.
2013-10-15 19:17:36 +04:00
#
#
2015-05-16 00:06:43 +03:00
# .. variable:: CPACK_DEBIAN_PACKAGE_DEBUG
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# May be set when invoking cpack in order to trace debug information
# during CPackDeb run.
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# * Mandatory : NO
# * Default : -
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_PREDEPENDS
2015-09-10 00:57:58 +03:00
# CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# Sets the `Pre-Depends` field of the Debian package.
# Like :variable:`Depends <CPACK_DEBIAN_PACKAGE_DEPENDS>`, except that it
# also forces :code:`dpkg` to complete installation of the packages named
# before even starting the installation of the package which declares the
# pre-dependency.
#
2013-10-15 21:23:23 +04:00
# * Mandatory : NO
2015-09-10 00:57:58 +03:00
# * Default :
#
# - An empty string for non-component based installations
# - :variable:`CPACK_DEBIAN_PACKAGE_PREDEPENDS` for component-based
# installations.
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_ENHANCES
2015-09-10 00:57:58 +03:00
# CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# Sets the `Enhances` field of the Debian package.
# Similar to :variable:`Suggests <CPACK_DEBIAN_PACKAGE_SUGGESTS>` but works
# in the opposite direction: declares that a package can enhance the
# functionality of another package.
#
2013-10-15 21:23:23 +04:00
# * Mandatory : NO
2015-09-10 00:57:58 +03:00
# * Default :
#
# - An empty string for non-component based installations
# - :variable:`CPACK_DEBIAN_PACKAGE_ENHANCES` for component-based
# installations.
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_BREAKS
2015-09-10 00:57:58 +03:00
# CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# Sets the `Breaks` field of the Debian package.
# When a binary package (P) declares that it breaks other packages (B),
# :code:`dpkg` will not allow the package (P) which declares `Breaks` be
# **unpacked** unless the packages that will be broken (B) are deconfigured
# first.
# As long as the package (P) is configured, the previously deconfigured
# packages (B) cannot be reconfigured again.
#
2013-10-15 21:23:23 +04:00
# * Mandatory : NO
2015-09-10 00:57:58 +03:00
# * Default :
#
# - An empty string for non-component based installations
# - :variable:`CPACK_DEBIAN_PACKAGE_BREAKS` for component-based
# installations.
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# See https://www.debian.org/doc/debian-policy/ch-relationships.html#s-breaks
#
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_CONFLICTS
2015-09-10 00:57:58 +03:00
# CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# Sets the `Conflicts` field of the Debian package.
# When one binary package declares a conflict with another using a `Conflicts`
# field, :code:`dpkg` will not allow them to be unpacked on the system at
# the same time.
#
2013-10-15 21:23:23 +04:00
# * Mandatory : NO
2015-09-10 00:57:58 +03:00
# * Default :
#
# - An empty string for non-component based installations
# - :variable:`CPACK_DEBIAN_PACKAGE_CONFLICTS` for component-based
# installations.
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# See https://www.debian.org/doc/debian-policy/ch-relationships.html#s-conflicts
#
# .. note::
#
# This is a stronger restriction than
# :variable:`Breaks <CPACK_DEBIAN_PACKAGE_BREAKS>`, which prevents the
# broken package from being configured while the breaking package is in
# the "Unpacked" state but allows both packages to be unpacked at the same
# time.
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_PROVIDES
2015-09-10 00:57:58 +03:00
# CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# Sets the `Provides` field of the Debian package.
# A virtual package is one which appears in the `Provides` control field of
# another package.
#
2013-10-15 21:23:23 +04:00
# * Mandatory : NO
2015-09-10 00:57:58 +03:00
# * Default :
#
# - An empty string for non-component based installations
# - :variable:`CPACK_DEBIAN_PACKAGE_PROVIDES` for component-based
# installations.
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# See https://www.debian.org/doc/debian-policy/ch-relationships.html#s-virtual
#
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_REPLACES
2015-09-10 00:57:58 +03:00
# CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# Sets the `Replaces` field of the Debian package.
# Packages can declare in their control file that they should overwrite
# files in certain other packages, or completely replace other packages.
#
2013-10-15 21:23:23 +04:00
# * Mandatory : NO
2015-09-10 00:57:58 +03:00
# * Default :
#
# - An empty string for non-component based installations
# - :variable:`CPACK_DEBIAN_PACKAGE_REPLACES` for component-based
# installations.
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
#
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_RECOMMENDS
2015-09-10 00:57:58 +03:00
# CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# Sets the `Recommends` field of the Debian package.
# Allows packages to declare a strong, but not absolute, dependency on other
# packages.
#
2013-10-15 21:23:23 +04:00
# * Mandatory : NO
2015-09-10 00:57:58 +03:00
# * Default :
#
# - An empty string for non-component based installations
# - :variable:`CPACK_DEBIAN_PACKAGE_RECOMMENDS` for component-based
# installations.
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
#
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_SUGGESTS
2015-09-10 00:57:58 +03:00
# CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# Sets the `Suggests` field of the Debian package.
# Allows packages to declare a suggested package install grouping.
#
2013-10-15 21:23:23 +04:00
# * Mandatory : NO
2015-09-10 00:57:58 +03:00
# * Default :
#
# - An empty string for non-component based installations
# - :variable:`CPACK_DEBIAN_PACKAGE_SUGGESTS` for component-based
# installations.
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
#
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# .. variable:: CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
2015-07-13 23:25:44 +03:00
# CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_EXTRA
2013-10-15 19:17:36 +04:00
#
2015-05-16 00:06:43 +03:00
# This variable allow advanced user to add custom script to the
# control.tar.gz.
# Typical usage is for conffiles, postinst, postrm, prerm.
#
2013-10-15 21:23:23 +04:00
# * Mandatory : NO
# * Default : -
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# Usage::
2013-10-15 19:17:36 +04:00
#
2013-10-15 21:23:23 +04:00
# set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
# "${CMAKE_CURRENT_SOURCE_DIR/prerm;${CMAKE_CURRENT_SOURCE_DIR}/postrm")
2015-09-11 21:58:18 +03:00
#
# .. note::
#
# The original permissions of the files will be used in the final
# package unless the variable
# :variable:`CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION` is set.
# In particular, the scripts should have the proper executable
# flag prior to the generation of the package.
#
# .. variable:: CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION
# CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_STRICT_PERMISSION
#
# This variable indicates if the Debian policy on control files should be
# strictly followed.
#
# * Mandatory : NO
# * Default : FALSE
#
# Usage::
#
# set(CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION TRUE)
#
# .. note::
#
# This overrides the permissions on the original files, following the rules
# set by Debian policy
# https://www.debian.org/doc/debian-policy/ch-files.html#s-permissions-owners
#
2012-06-18 18:15:43 +04:00
2007-08-08 22:18:13 +04:00
2009-09-28 19:46:51 +04:00
#=============================================================================
# Copyright 2007-2009 Kitware, Inc.
2009-10-30 19:06:53 +03:00
# Copyright 2007-2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
2009-09-28 19:46:51 +04:00
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
2010-08-07 04:48:47 +04:00
# (To distribute this file outside of CMake, substitute the full
2009-09-28 19:46:51 +04:00
# License text for the above reference.)
2007-08-08 22:18:13 +04:00
# CPack script for creating Debian package
# Author: Mathieu Malaterre
#
# http://wiki.debian.org/HowToPackageForDebian
2012-08-13 21:47:32 +04:00
if ( CMAKE_BINARY_DIR )
message ( FATAL_ERROR "CPackDeb.cmake may only be used by CPack internally." )
2012-08-13 21:50:14 +04:00
endif ( )
2007-07-25 18:57:33 +04:00
2012-08-13 21:47:32 +04:00
if ( NOT UNIX )
message ( FATAL_ERROR "CPackDeb.cmake may only be used under UNIX." )
2012-08-13 21:50:14 +04:00
endif ( )
2007-07-25 18:57:33 +04:00
2015-04-20 21:48:24 +03:00
function ( cpack_deb_prepare_package_vars )
# CPACK_DEBIAN_PACKAGE_SHLIBDEPS
# If specify OFF, only user depends are used
if ( NOT DEFINED CPACK_DEBIAN_PACKAGE_SHLIBDEPS )
set ( CPACK_DEBIAN_PACKAGE_SHLIBDEPS OFF )
endif ( )
2010-07-28 20:24:20 +04:00
2015-05-02 23:14:57 +03:00
set ( WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_DEB_PACKAGE_COMPONENT_PART_PATH}" )
# per component automatic discover: some of the component might not have
# binaries.
if ( CPACK_DEB_PACKAGE_COMPONENT )
string ( TOUPPER "${CPACK_DEB_PACKAGE_COMPONENT}" _local_component_name )
set ( _component_shlibdeps_var "CPACK_DEBIAN_${_local_component_name}_PACKAGE_SHLIBDEPS" )
# if set, overrides the global configuration
if ( DEFINED ${ _component_shlibdeps_var } )
set ( CPACK_DEBIAN_PACKAGE_SHLIBDEPS "${${_component_shlibdeps_var}}" )
if ( CPACK_DEBIAN_PACKAGE_DEBUG )
message ( "CPackDeb Debug: component '${CPACK_DEB_PACKAGE_COMPONENT}' dpkg-shlibdeps set to ${CPACK_DEBIAN_PACKAGE_SHLIBDEPS}" )
endif ( )
endif ( )
endif ( )
2015-04-20 21:48:24 +03:00
if ( CPACK_DEBIAN_PACKAGE_SHLIBDEPS )
# dpkg-shlibdeps is a Debian utility for generating dependency list
find_program ( SHLIBDEPS_EXECUTABLE dpkg-shlibdeps )
if ( SHLIBDEPS_EXECUTABLE )
2015-05-02 23:14:57 +03:00
# Check version of the dpkg-shlibdeps tool using CPackRPM method
2015-04-20 21:48:24 +03:00
execute_process ( COMMAND env LC_ALL=C ${ SHLIBDEPS_EXECUTABLE } --version
O U T P U T _ V A R I A B L E _ T M P _ V E R S I O N
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
2015-06-03 16:21:52 +03:00
if ( _TMP_VERSION MATCHES "dpkg-shlibdeps version ([0-9]+\\.[0-9]+\\.[0-9]+)" )
set ( SHLIBDEPS_EXECUTABLE_VERSION "${CMAKE_MATCH_1}" )
else ( )
set ( SHLIBDEPS_EXECUTABLE_VERSION "" )
endif ( )
2015-05-02 23:14:57 +03:00
2015-04-20 21:48:24 +03:00
if ( CPACK_DEBIAN_PACKAGE_DEBUG )
2015-05-02 23:14:57 +03:00
message ( "CPackDeb Debug: dpkg-shlibdeps --version output is '${_TMP_VERSION}'" )
message ( "CPackDeb Debug: dpkg-shlibdeps version is <${SHLIBDEPS_EXECUTABLE_VERSION}>" )
2015-04-20 21:48:24 +03:00
endif ( )
2010-07-28 20:24:20 +04:00
2015-04-20 21:48:24 +03:00
# Generating binary list - Get type of all install files
2015-05-02 23:14:57 +03:00
cmake_policy ( PUSH )
# Tell file(GLOB_RECURSE) not to follow directory symlinks
# even if the project does not set this policy to NEW.
cmake_policy ( SET CMP0009 NEW )
file ( GLOB_RECURSE FILE_PATHS_ LIST_DIRECTORIES false RELATIVE "${WDIR}" "${WDIR}/*" )
cmake_policy ( POP )
# get file info so that we can determine if file is executable or not
unset ( CPACK_DEB_INSTALL_FILES )
foreach ( FILE_ IN LISTS FILE_PATHS_ )
execute_process ( COMMAND file "./${FILE_}"
W O R K I N G _ D I R E C T O R Y " $ { W D I R } "
O U T P U T _ V A R I A B L E I N S T A L L _ F I L E _ )
list ( APPEND CPACK_DEB_INSTALL_FILES "${INSTALL_FILE_}" )
endforeach ( )
2015-04-20 21:48:24 +03:00
# Only dynamically linked ELF files are included
# Extract only file name infront of ":"
2015-05-02 23:14:57 +03:00
foreach ( _FILE ${ CPACK_DEB_INSTALL_FILES } )
if ( ${ _FILE } MATCHES "ELF.*dynamically linked" )
string ( REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}" )
list ( APPEND CPACK_DEB_BINARY_FILES "${CMAKE_MATCH_1}" )
set ( CONTAINS_EXECUTABLE_FILES_ TRUE )
2015-04-20 21:48:24 +03:00
endif ( )
endforeach ( )
2015-05-02 23:14:57 +03:00
if ( CONTAINS_EXECUTABLE_FILES_ )
message ( "CPackDeb: - Generating dependency list" )
2010-07-28 20:24:20 +04:00
2015-05-02 23:14:57 +03:00
# Create blank control file for running dpkg-shlibdeps
# There might be some other way to invoke dpkg-shlibdeps without creating this file
# but standard debian package should not have anything that can collide with this file or directory
file ( MAKE_DIRECTORY ${ CPACK_TEMPORARY_DIRECTORY } /debian )
file ( WRITE ${ CPACK_TEMPORARY_DIRECTORY } /debian/control "" )
2010-07-28 20:24:20 +04:00
2015-06-03 16:23:02 +03:00
# Add --ignore-missing-info if the tool supports it
execute_process ( COMMAND env LC_ALL=C ${ SHLIBDEPS_EXECUTABLE } --help
O U T P U T _ V A R I A B L E _ T M P _ H E L P
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( _TMP_HELP MATCHES "--ignore-missing-info" )
2015-05-02 23:14:57 +03:00
set ( IGNORE_MISSING_INFO_FLAG "--ignore-missing-info" )
endif ( )
# Execute dpkg-shlibdeps
# --ignore-missing-info : allow dpkg-shlibdeps to run even if some libs do not belong to a package
# -O : print to STDOUT
execute_process ( COMMAND ${ SHLIBDEPS_EXECUTABLE } ${ IGNORE_MISSING_INFO_FLAG } -O ${ CPACK_DEB_BINARY_FILES }
W O R K I N G _ D I R E C T O R Y " $ { C P A C K _ T E M P O R A R Y _ D I R E C T O R Y } "
O U T P U T _ V A R I A B L E S H L I B D E P S _ O U T P U T
R E S U L T _ V A R I A B L E S H L I B D E P S _ R E S U L T
E R R O R _ V A R I A B L E S H L I B D E P S _ E R R O R
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( CPACK_DEBIAN_PACKAGE_DEBUG )
# dpkg-shlibdeps will throw some warnings if some input files are not binary
message ( "CPackDeb Debug: dpkg-shlibdeps warnings \n${SHLIBDEPS_ERROR}" )
endif ( )
if ( NOT SHLIBDEPS_RESULT EQUAL 0 )
message ( FATAL_ERROR "CPackDeb: dpkg-shlibdeps: '${SHLIBDEPS_ERROR}';\n"
" e x e c u t e d c o m m a n d : ' $ { S H L I B D E P S _ E X E C U T A B L E } $ { I G N O R E _ M I S S I N G _ I N F O _ F L A G } - O $ { C P A C K _ D E B _ B I N A R Y _ F I L E S } ' ; \ n "
" f o u n d f i l e s : ' $ { I N S T A L L _ F I L E _ } ' ; \ n "
" f i l e s i n f o : ' $ { C P A C K _ D E B _ I N S T A L L _ F I L E S } ' ; \ n "
" b i n a r y f i l e s : ' $ { C P A C K _ D E B _ B I N A R Y _ F I L E S } ' " )
endif ( )
#Get rid of prefix generated by dpkg-shlibdeps
string ( REGEX REPLACE "^.*Depends=" "" CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS "${SHLIBDEPS_OUTPUT}" )
2015-04-20 21:48:24 +03:00
2015-05-02 23:14:57 +03:00
if ( CPACK_DEBIAN_PACKAGE_DEBUG )
2015-05-09 00:36:26 +03:00
message ( "CPackDeb Debug: Found dependency: ${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS} from output ${SHLIBDEPS_OUTPUT}" )
2015-05-02 23:14:57 +03:00
endif ( )
2010-07-28 20:24:20 +04:00
2015-05-02 23:14:57 +03:00
# Remove blank control file
# Might not be safe if package actual contain file or directory named debian
file ( REMOVE_RECURSE "${CPACK_TEMPORARY_DIRECTORY}/debian" )
else ( )
if ( CPACK_DEBIAN_PACKAGE_DEBUG )
2015-05-09 00:36:26 +03:00
message ( AUTHOR_WARNING "CPackDeb Debug: Using only user-provided depends because package does not contain executable files that link to shared libraries." )
2015-05-02 23:14:57 +03:00
endif ( )
endif ( )
else ( )
2015-05-09 00:36:26 +03:00
message ( "CPackDeb: Using only user-provided dependencies because dpkg-shlibdeps is not found." )
2015-04-20 21:48:24 +03:00
endif ( )
2012-08-13 21:47:32 +04:00
2015-05-02 23:14:57 +03:00
else ( )
2012-08-13 21:47:32 +04:00
if ( CPACK_DEBIAN_PACKAGE_DEBUG )
2015-05-09 00:36:26 +03:00
message ( "CPackDeb Debug: Using only user-provided dependencies" )
2012-08-13 21:50:14 +04:00
endif ( )
endif ( )
2012-08-13 21:47:32 +04:00
2015-04-20 21:48:24 +03:00
# Let's define the control file found in debian package:
2007-07-27 16:59:59 +04:00
2015-04-20 21:48:24 +03:00
# Binary package:
# http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-binarycontrolfiles
2007-08-08 22:18:13 +04:00
2015-04-20 21:48:24 +03:00
# DEBIAN/control
# debian policy enforce lower case for package name
# Package: (mandatory)
if ( NOT CPACK_DEBIAN_PACKAGE_NAME )
string ( TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_DEBIAN_PACKAGE_NAME )
2012-08-13 21:50:14 +04:00
endif ( )
2007-07-27 16:59:59 +04:00
2015-04-20 21:48:24 +03:00
# Version: (mandatory)
if ( NOT CPACK_DEBIAN_PACKAGE_VERSION )
if ( NOT CPACK_PACKAGE_VERSION )
message ( FATAL_ERROR "CPackDeb: Debian package requires a package version" )
endif ( )
set ( CPACK_DEBIAN_PACKAGE_VERSION ${ CPACK_PACKAGE_VERSION } )
2012-08-13 21:50:14 +04:00
endif ( )
2007-07-27 16:59:59 +04:00
2015-04-20 21:48:24 +03:00
# Architecture: (mandatory)
if ( NOT CPACK_DEBIAN_PACKAGE_ARCHITECTURE )
# There is no such thing as i686 architecture on debian, you should use i386 instead
# $ dpkg --print-architecture
find_program ( DPKG_CMD dpkg )
if ( NOT DPKG_CMD )
message ( STATUS "CPackDeb: Can not find dpkg in your path, default to i386." )
set ( CPACK_DEBIAN_PACKAGE_ARCHITECTURE i386 )
endif ( )
execute_process ( COMMAND "${DPKG_CMD}" --print-architecture
O U T P U T _ V A R I A B L E C P A C K _ D E B I A N _ P A C K A G E _ A R C H I T E C T U R E
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E
)
endif ( )
2007-07-27 16:59:59 +04:00
2015-04-20 21:48:24 +03:00
# have a look at get_property(result GLOBAL PROPERTY ENABLED_FEATURES),
# this returns the successful find_package() calls, maybe this can help
# Depends:
# You should set: DEBIAN_PACKAGE_DEPENDS
# TODO: automate 'objdump -p | grep NEEDED'
2015-05-09 00:36:26 +03:00
2015-09-10 00:57:58 +03:00
# if per-component dependency, overrides the global CPACK_DEBIAN_PACKAGE_${dependency_type_}
2015-05-09 00:36:26 +03:00
# automatic dependency discovery will be performed afterwards.
if ( CPACK_DEB_PACKAGE_COMPONENT )
2015-09-10 00:57:58 +03:00
foreach ( dependency_type_ DEPENDS RECOMMENDS SUGGESTS PREDEPENDS ENHANCES BREAKS CONFLICTS PROVIDES REPLACES )
set ( _component_var "CPACK_DEBIAN_${_local_component_name}_PACKAGE_${dependency_type_}" )
2015-05-09 00:36:26 +03:00
2015-09-10 00:57:58 +03:00
# if set, overrides the global dependency
if ( DEFINED ${ _component_var } )
set ( CPACK_DEBIAN_PACKAGE_ ${ dependency_type_ } "${${_component_var}}" )
if ( CPACK_DEBIAN_PACKAGE_DEBUG )
message ( "CPackDeb Debug: component '${_local_component_name}' ${dependency_type_}"
" d e p e n d e n c i e s s e t t o ' $ { C P A C K _ D E B I A N _ P A C K A G E _ $ { d e p e n d e n c y _ } } ' " )
endif ( )
2015-05-09 00:36:26 +03:00
endif ( )
2015-09-10 00:57:58 +03:00
endforeach ( )
2015-05-09 00:36:26 +03:00
endif ( )
# at this point, the CPACK_DEBIAN_PACKAGE_DEPENDS is properly set
# to the minimal dependency of the package
# Append automatically discovered dependencies .
if ( NOT "${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}" STREQUAL "" )
if ( CPACK_DEBIAN_PACKAGE_DEPENDS )
set ( CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}, ${CPACK_DEBIAN_PACKAGE_DEPENDS}" )
else ( )
set ( CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}" )
endif ( )
endif ( )
2015-04-20 21:48:24 +03:00
if ( NOT CPACK_DEBIAN_PACKAGE_DEPENDS )
message ( STATUS "CPACK_DEBIAN_PACKAGE_DEPENDS not set, the package will have no dependencies." )
2012-08-13 21:50:14 +04:00
endif ( )
2007-07-27 16:59:59 +04:00
2015-04-20 21:48:24 +03:00
# Maintainer: (mandatory)
if ( NOT CPACK_DEBIAN_PACKAGE_MAINTAINER )
if ( NOT CPACK_PACKAGE_CONTACT )
message ( FATAL_ERROR "CPackDeb: Debian package requires a maintainer for a package, set CPACK_PACKAGE_CONTACT or CPACK_DEBIAN_PACKAGE_MAINTAINER" )
endif ( )
set ( CPACK_DEBIAN_PACKAGE_MAINTAINER ${ CPACK_PACKAGE_CONTACT } )
2012-08-13 21:50:14 +04:00
endif ( )
2007-08-08 22:18:13 +04:00
2015-04-20 21:48:24 +03:00
# Description: (mandatory)
2015-04-29 19:05:36 +03:00
if ( NOT CPACK_DEB_PACKAGE_COMPONENT )
if ( NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION )
if ( NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY )
message ( FATAL_ERROR "CPackDeb: Debian package requires a summary for a package, set CPACK_PACKAGE_DESCRIPTION_SUMMARY or CPACK_DEBIAN_PACKAGE_DESCRIPTION" )
endif ( )
set ( CPACK_DEBIAN_PACKAGE_DESCRIPTION ${ CPACK_PACKAGE_DESCRIPTION_SUMMARY } )
endif ( )
else ( )
set ( component_description_var CPACK_COMPONENT_ ${ _local_component_name } _DESCRIPTION )
# component description overrides package description
if ( ${ component_description_var } )
set ( CPACK_DEBIAN_PACKAGE_DESCRIPTION ${ ${component_description_var } } )
elseif ( NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION )
if ( NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY )
message ( FATAL_ERROR "CPackDeb: Debian package requires a summary for a package, set CPACK_PACKAGE_DESCRIPTION_SUMMARY or CPACK_DEBIAN_PACKAGE_DESCRIPTION or ${component_description_var}" )
endif ( )
set ( CPACK_DEBIAN_PACKAGE_DESCRIPTION ${ CPACK_PACKAGE_DESCRIPTION_SUMMARY } )
2015-04-20 21:48:24 +03:00
endif ( )
endif ( )
2007-08-08 22:18:13 +04:00
2015-04-20 21:48:24 +03:00
# Section: (recommended)
if ( NOT CPACK_DEBIAN_PACKAGE_SECTION )
set ( CPACK_DEBIAN_PACKAGE_SECTION "devel" )
endif ( )
2007-08-08 22:18:13 +04:00
2015-04-20 21:48:24 +03:00
# Priority: (recommended)
if ( NOT CPACK_DEBIAN_PACKAGE_PRIORITY )
set ( CPACK_DEBIAN_PACKAGE_PRIORITY "optional" )
endif ( )
2014-03-10 09:37:26 +04:00
2015-04-20 21:48:24 +03:00
# Compression: (recommended)
if ( NOT CPACK_DEBIAN_COMPRESSION_TYPE )
set ( CPACK_DEBIAN_COMPRESSION_TYPE "gzip" )
endif ( )
2014-03-10 09:37:26 +04:00
2011-03-11 10:47:15 +03:00
2015-04-20 21:48:24 +03:00
# Recommends:
# You should set: CPACK_DEBIAN_PACKAGE_RECOMMENDS
# Suggests:
# You should set: CPACK_DEBIAN_PACKAGE_SUGGESTS
# CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
# This variable allow advanced user to add custom script to the control.tar.gz (inside the .deb archive)
# Typical examples are:
# - conffiles
# - postinst
# - postrm
2015-07-13 23:25:44 +03:00
# - prerm
2015-04-20 21:48:24 +03:00
# Usage:
# set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
# "${CMAKE_CURRENT_SOURCE_DIR/prerm;${CMAKE_CURRENT_SOURCE_DIR}/postrm")
# Are we packaging components ?
if ( CPACK_DEB_PACKAGE_COMPONENT )
2015-07-13 23:25:44 +03:00
# override values with per component version if set
2015-09-11 21:58:18 +03:00
foreach ( VAR_NAME_ "PACKAGE_CONTROL_EXTRA" "PACKAGE_CONTROL_STRICT_PERMISSION" )
2015-07-13 23:25:44 +03:00
if ( CPACK_DEBIAN_ ${ _local_component_name } _ ${ VAR_NAME_ } )
set ( CPACK_DEBIAN_ ${ VAR_NAME_ } "${CPACK_DEBIAN_${_local_component_name}_${VAR_NAME_}}" )
endif ( )
endforeach ( )
2015-04-20 21:48:24 +03:00
set ( CPACK_DEB_PACKAGE_COMPONENT_PART_NAME "-${CPACK_DEB_PACKAGE_COMPONENT}" )
string ( TOLOWER "${CPACK_PACKAGE_NAME}${CPACK_DEB_PACKAGE_COMPONENT_PART_NAME}" CPACK_DEBIAN_PACKAGE_NAME )
else ( )
set ( CPACK_DEB_PACKAGE_COMPONENT_PART_NAME "" )
endif ( )
2007-08-08 22:18:13 +04:00
2015-04-20 21:48:24 +03:00
# Print out some debug information if we were asked for that
if ( CPACK_DEBIAN_PACKAGE_DEBUG )
message ( "CPackDeb:Debug: CPACK_TOPLEVEL_DIRECTORY = ${CPACK_TOPLEVEL_DIRECTORY}" )
message ( "CPackDeb:Debug: CPACK_TOPLEVEL_TAG = ${CPACK_TOPLEVEL_TAG}" )
message ( "CPackDeb:Debug: CPACK_TEMPORARY_DIRECTORY = ${CPACK_TEMPORARY_DIRECTORY}" )
message ( "CPackDeb:Debug: CPACK_OUTPUT_FILE_NAME = ${CPACK_OUTPUT_FILE_NAME}" )
message ( "CPackDeb:Debug: CPACK_OUTPUT_FILE_PATH = ${CPACK_OUTPUT_FILE_PATH}" )
message ( "CPackDeb:Debug: CPACK_PACKAGE_FILE_NAME = ${CPACK_PACKAGE_FILE_NAME}" )
message ( "CPackDeb:Debug: CPACK_PACKAGE_INSTALL_DIRECTORY = ${CPACK_PACKAGE_INSTALL_DIRECTORY}" )
message ( "CPackDeb:Debug: CPACK_TEMPORARY_PACKAGE_FILE_NAME = ${CPACK_TEMPORARY_PACKAGE_FILE_NAME}" )
2015-09-11 21:58:18 +03:00
message ( "CPackDeb:Debug: CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION = ${CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION}" )
2015-04-20 21:48:24 +03:00
endif ( )
2007-08-08 22:18:13 +04:00
2015-04-20 21:48:24 +03:00
# For debian source packages:
# debian/control
# http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-sourcecontrolfiles
# .dsc
# http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-debiansourcecontrolfiles
# Builds-Depends:
#if(NOT CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS)
# set(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS
# "debhelper (>> 5.0.0), libncurses5-dev, tcl8.4"
# )
#endif()
# move variables to parent scope so that they may be used to create debian package
set ( GEN_CPACK_DEBIAN_PACKAGE_NAME "${CPACK_DEBIAN_PACKAGE_NAME}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_DEBIAN_PACKAGE_VERSION}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_SECTION "${CPACK_DEBIAN_PACKAGE_SECTION}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_PRIORITY "${CPACK_DEBIAN_PACKAGE_PRIORITY}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_MAINTAINER "${CPACK_DEBIAN_PACKAGE_MAINTAINER}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_DEBIAN_PACKAGE_DESCRIPTION}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_COMPRESSION_TYPE "${CPACK_DEBIAN_COMPRESSION_TYPE}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_RECOMMENDS "${CPACK_DEBIAN_PACKAGE_RECOMMENDS}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_SUGGESTS "${CPACK_DEBIAN_PACKAGE_SUGGESTS}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_HOMEPAGE "${CPACK_DEBIAN_PACKAGE_HOMEPAGE}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_PREDEPENDS "${CPACK_DEBIAN_PACKAGE_PREDEPENDS}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_ENHANCES "${CPACK_DEBIAN_PACKAGE_ENHANCES}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_BREAKS "${CPACK_DEBIAN_PACKAGE_BREAKS}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_CONFLICTS "${CPACK_DEBIAN_PACKAGE_CONFLICTS}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_PROVIDES "${CPACK_DEBIAN_PACKAGE_PROVIDES}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_REPLACES "${CPACK_DEBIAN_PACKAGE_REPLACES}" PARENT_SCOPE )
set ( GEN_CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA}" PARENT_SCOPE )
2015-09-11 21:58:18 +03:00
set ( GEN_CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION
" $ { C P A C K _ D E B I A N _ P A C K A G E _ C O N T R O L _ S T R I C T _ P E R M I S S I O N } " P A R E N T _ S C O P E )
2015-04-20 21:48:24 +03:00
set ( GEN_WDIR "${WDIR}" PARENT_SCOPE )
endfunction ( )
cpack_deb_prepare_package_vars ( )