CPackDeb.cmake 38.8 KB
Newer Older
1 2 3
# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.

4 5 6 7
#.rst:
# CPackDeb
# --------
#
8
# The built in (binary) CPack Deb generator (Unix only)
9
#
10 11 12
# Variables specific to CPack Debian (DEB) generator
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#
13 14 15 16 17 18
# CPackDeb may be used to create Deb package using :module:`CPack`.
# CPackDeb is a :module:`CPack` generator thus it uses the ``CPACK_XXX``
# variables used by :module:`CPack`.
#
# CPackDeb generator should work on any Linux host but it will produce
# better deb package when Debian specific tools ``dpkg-xxx`` are usable on
19 20 21
# the build system.
#
# CPackDeb has specific features which are controlled by the specifics
22
# :code:`CPACK_DEBIAN_XXX` variables.
23
#
24
# :code:`CPACK_DEBIAN_<COMPONENT>_XXXX` variables may be used in order to have
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
# **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.
#
# Here are some CPackDeb wiki resources that are here for historic reasons and
# are no longer maintained but may still prove useful:
#
#  - https://cmake.org/Wiki/CMake:CPackConfiguration
#  - https://cmake.org/Wiki/CMake:CPackPackageGenerators#DEB_.28UNIX_only.29
#
# List of CPackRPM specific variables:
#
# .. variable:: CPACK_DEB_PACKAGE_COMPONENT
#
#  Enable component packaging for CPackRPM
40
#
41 42 43 44 45
#  * Mandatory : NO
#  * Default   : OFF
#
#  If enabled (ON) multiple packages are generated. By default a single package
#  containing files of all components is generated.
46
#
47
# .. variable:: CPACK_DEBIAN_PACKAGE_NAME
48
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_NAME
49
#
50 51
#  Set Package control field (variable is automatically transformed to lower
#  case).
52
#
53
#  * Mandatory : YES
54 55 56 57 58 59 60 61
#  * Default   :
#
#    - :variable:`CPACK_PACKAGE_NAME` for non-component based
#      installations
#    - :variable:`CPACK_DEBIAN_PACKAGE_NAME` suffixed with -<COMPONENT>
#      for component-based installations.
#
#  See https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Source
62
#
63 64 65 66 67 68 69 70 71 72 73 74 75
# .. variable:: CPACK_DEBIAN_FILE_NAME
#               CPACK_DEBIAN_<COMPONENT>_FILE_NAME
#
#  Package file name.
#
#  * Mandatory : YES
#  * Default   : ``<CPACK_PACKAGE_FILE_NAME>[-<component>].deb``
#
#  This may be set to ``DEB-DEFAULT`` to allow CPackDeb to generate package file
#  name by itself in deb format::
#
#    <PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
#
76
#  Alternatively provided package file name must end with ``.deb`` suffix.
77 78 79 80 81 82 83 84 85 86 87 88
#
#  .. note::
#
#    Preferred setting of this variable is ``DEB-DEFAULT`` but for backward
#    compatibility with CPackDeb in CMake prior to version 3.6 this feature
#    is disabled by default.
#
#  .. note::
#
#    By using non default filenames duplicate names may occur. Duplicate files
#    get overwritten and it is up to the packager to set the variables in a
#    manner that will prevent such errors.
89
#
90
# .. variable:: CPACK_DEBIAN_PACKAGE_VERSION
91
#
92 93
#  The Debian package version
#
94
#  * Mandatory : YES
95
#  * Default   : :variable:`CPACK_PACKAGE_VERSION`
96
#
97 98 99 100 101 102 103 104 105 106 107 108
# .. variable:: CPACK_DEBIAN_PACKAGE_RELEASE
#
#  The Debian package release - Debian revision number.
#
#  * Mandatory : YES
#  * Default   : 1
#
#  This is the numbering of the DEB package itself, i.e. the version of the
#  packaging and not the version of the content (see
#  :variable:`CPACK_DEBIAN_PACKAGE_VERSION`). One may change the default value
#  if the previous packaging was buggy and/or you want to put here a fancy Linux
#  distro specific numbering.
109
#
110
# .. variable:: CPACK_DEBIAN_PACKAGE_ARCHITECTURE
111
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE
112
#
113 114
#  The Debian package architecture
#
115
#  * Mandatory : YES
116 117
#  * Default   : Output of :code:`dpkg --print-architecture` (or :code:`i386`
#    if :code:`dpkg` is not found)
118
#
119
# .. variable:: CPACK_DEBIAN_PACKAGE_DEPENDS
120 121
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS
#
122
#  Sets the Debian dependencies of this package.
123
#
124
#  * Mandatory : NO
125
#  * Default   :
126
#
127 128 129 130 131 132 133 134 135
#    - 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
136
#    to :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS` instead of
137 138 139 140 141 142 143 144
#    :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)")
145
#
146 147 148 149 150 151 152
# .. variable:: CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS
#
#  Sets inter component dependencies if listed with
#  :variable:`CPACK_COMPONENT_<compName>_DEPENDS` variables.
#
#  * Mandatory : NO
#  * Default   : -
153
#
154
# .. variable:: CPACK_DEBIAN_PACKAGE_MAINTAINER
155
#
156 157
#  The Debian package maintainer
#
158
#  * Mandatory : YES
159
#  * Default   : :code:`CPACK_PACKAGE_CONTACT`
160
#
161
# .. variable:: CPACK_DEBIAN_PACKAGE_DESCRIPTION
162
#               CPACK_COMPONENT_<COMPONENT>_DESCRIPTION
163
#
164
#  The Debian package description
165
#
166
#  * Mandatory : YES
167
#  * Default   :
168
#
169 170 171
#    - :variable:`CPACK_DEBIAN_PACKAGE_DESCRIPTION` if set or
#    - :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`
#
172
#
173
# .. variable:: CPACK_DEBIAN_PACKAGE_SECTION
174
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_SECTION
175
#
176 177
#  Set Section control field e.g. admin, devel, doc, ...
#
178
#  * Mandatory : YES
179
#  * Default   : "devel"
180
#
181 182
#  See https://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections
#
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
# .. variable:: CPACK_DEBIAN_ARCHIVE_TYPE
#
#  The archive format used for creating the Debian package.
#
#  * Mandatory : YES
#  * Default   : "paxr"
#
#  Possible values are:
#
#  - paxr
#  - gnutar
#
#  .. note::
#
#    Default pax archive format is the most portable format and generates
#    packages that do not treat sparse files specially.
#    GNU tar format on the other hand supports longer filenames.
#
201 202
# .. variable:: CPACK_DEBIAN_COMPRESSION_TYPE
#
203 204
#  The compression used for creating the Debian package.
#
205
#  * Mandatory : YES
206
#  * Default   : "gzip"
207
#
208 209 210 211 212 213
#  Possible values are:
#
#  - lzma
#  - xz
#  - bzip2
#  - gzip
214
#
215
# .. variable:: CPACK_DEBIAN_PACKAGE_PRIORITY
216
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_PRIORITY
217
#
218 219
#  Set Priority control field e.g. required, important, standard, optional,
#  extra
220
#
221
#  * Mandatory : YES
222
#  * Default   : "optional"
223
#
224 225
#  See https://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities
#
226
# .. variable:: CPACK_DEBIAN_PACKAGE_HOMEPAGE
227
#
228 229 230
#  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.
231 232 233 234 235 236 237 238 239
#
#  * Mandatory : NO
#  * Default   : -
#
#  .. note::
#
#    The content of this field is a simple URL without any surrounding
#    characters such as <>.
#
240
# .. variable:: CPACK_DEBIAN_PACKAGE_SHLIBDEPS
241
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS
242
#
243
#  May be set to ON in order to use :code:`dpkg-shlibdeps` to generate
244
#  better package dependency list.
245 246 247 248 249 250 251 252 253 254 255 256
#
#  * 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.
257
#    See https://cmake.org/Wiki/CMake_RPATH_handling.
258
#
259
# .. variable:: CPACK_DEBIAN_PACKAGE_DEBUG
260
#
261 262
#  May be set when invoking cpack in order to trace debug information
#  during CPackDeb run.
263
#
264 265 266
#  * Mandatory : NO
#  * Default   : -
#
267
# .. variable:: CPACK_DEBIAN_PACKAGE_PREDEPENDS
268
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS
269
#
270 271 272 273 274 275
#  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.
#
276
#  * Mandatory : NO
277 278 279 280 281
#  * Default   :
#
#    - An empty string for non-component based installations
#    - :variable:`CPACK_DEBIAN_PACKAGE_PREDEPENDS` for component-based
#      installations.
282
#
283
#  See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
284
#
285
# .. variable:: CPACK_DEBIAN_PACKAGE_ENHANCES
286
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES
287
#
288 289 290 291 292
#  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.
#
293
#  * Mandatory : NO
294 295 296 297 298
#  * Default   :
#
#    - An empty string for non-component based installations
#    - :variable:`CPACK_DEBIAN_PACKAGE_ENHANCES` for component-based
#      installations.
299
#
300
#  See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
301
#
302
# .. variable:: CPACK_DEBIAN_PACKAGE_BREAKS
303
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS
304
#
305 306 307 308 309 310 311 312
#  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.
#
313
#  * Mandatory : NO
314 315 316 317 318
#  * Default   :
#
#    - An empty string for non-component based installations
#    - :variable:`CPACK_DEBIAN_PACKAGE_BREAKS` for component-based
#      installations.
319
#
320 321
#  See https://www.debian.org/doc/debian-policy/ch-relationships.html#s-breaks
#
322
# .. variable:: CPACK_DEBIAN_PACKAGE_CONFLICTS
323
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS
324
#
325 326 327 328 329
#  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.
#
330
#  * Mandatory : NO
331 332 333 334 335
#  * Default   :
#
#    - An empty string for non-component based installations
#    - :variable:`CPACK_DEBIAN_PACKAGE_CONFLICTS` for component-based
#      installations.
336
#
337 338 339 340 341 342 343 344 345
#  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.
346
#
347
# .. variable:: CPACK_DEBIAN_PACKAGE_PROVIDES
348
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES
349
#
350 351 352 353
#  Sets the `Provides` field of the Debian package.
#  A virtual package is one which appears in the `Provides` control field of
#  another package.
#
354
#  * Mandatory : NO
355 356 357 358 359
#  * Default   :
#
#    - An empty string for non-component based installations
#    - :variable:`CPACK_DEBIAN_PACKAGE_PROVIDES` for component-based
#      installations.
360
#
361 362
#  See https://www.debian.org/doc/debian-policy/ch-relationships.html#s-virtual
#
363
# .. variable:: CPACK_DEBIAN_PACKAGE_REPLACES
364
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES
365
#
366 367 368 369
#  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.
#
370
#  * Mandatory : NO
371 372 373 374 375
#  * Default   :
#
#    - An empty string for non-component based installations
#    - :variable:`CPACK_DEBIAN_PACKAGE_REPLACES` for component-based
#      installations.
376
#
377 378
#  See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
#
379
# .. variable:: CPACK_DEBIAN_PACKAGE_RECOMMENDS
380
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS
381
#
382 383 384 385
#  Sets the `Recommends` field of the Debian package.
#  Allows packages to declare a strong, but not absolute, dependency on other
#  packages.
#
386
#  * Mandatory : NO
387 388 389 390 391
#  * Default   :
#
#    - An empty string for non-component based installations
#    - :variable:`CPACK_DEBIAN_PACKAGE_RECOMMENDS` for component-based
#      installations.
392
#
393 394
#  See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
#
395
# .. variable:: CPACK_DEBIAN_PACKAGE_SUGGESTS
396
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS
397
#
398 399 400
#  Sets the `Suggests` field of the Debian package.
#  Allows packages to declare a suggested package install grouping.
#
401
#  * Mandatory : NO
402 403 404 405 406
#  * Default   :
#
#    - An empty string for non-component based installations
#    - :variable:`CPACK_DEBIAN_PACKAGE_SUGGESTS` for component-based
#      installations.
407
#
408 409
#  See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
#
410 411 412 413 414 415
# .. variable:: CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS
#
#  * Mandatory : NO
#  * Default   : OFF
#
#  Allows to generate shlibs control file automatically. Compatibility is defined by
416
#  :variable:`CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY` variable value.
417 418 419 420 421 422 423 424 425
#
#  .. note::
#
#    Libraries are only considered if they have both library name and version
#    set. This can be done by setting SOVERSION property with
#    :command:`set_target_properties` command.
#
# .. variable:: CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY
#
426 427
#  Compatibility policy for auto-generated shlibs control file.
#
428 429 430 431 432 433 434 435
#  * Mandatory : NO
#  * Default   : "="
#
#  Defines compatibility policy for auto-generated shlibs control file.
#  Possible values: "=", ">="
#
#  See https://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-shlibdeps
#
436
# .. variable:: CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
437
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_EXTRA
438
#
439 440 441 442
#  This variable allow advanced user to add custom script to the
#  control.tar.gz.
#  Typical usage is for conffiles, postinst, postrm, prerm.
#
443 444
#  * Mandatory : NO
#  * Default   : -
445
#
446
#  Usage::
447
#
448 449
#   set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
#       "${CMAKE_CURRENT_SOURCE_DIR/prerm;${CMAKE_CURRENT_SOURCE_DIR}/postrm")
450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477
#
#  .. 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
#
478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499
# .. variable:: CPACK_DEBIAN_PACKAGE_SOURCE
#               CPACK_DEBIAN_<COMPONENT>_PACKAGE_SOURCE
#
#  Sets the ``Source`` field of the binary Debian package.
#  When the binary package name is not the same as the source package name
#  (in particular when several components/binaries are generated from one
#  source) the source from which the binary has been generated should be
#  indicated with the field ``Source``.
#
#  * Mandatory : NO
#  * Default   :
#
#    - An empty string for non-component based installations
#    - :variable:`CPACK_DEBIAN_PACKAGE_SOURCE` for component-based
#      installations.
#
#  See https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Source
#
#  .. note::
#
#    This value is not interpreted. It is possible to pass an optional
#    revision number of the referenced source package as well.
500 501 502 503 504 505

# CPack script for creating Debian package
# Author: Mathieu Malaterre
#
# http://wiki.debian.org/HowToPackageForDebian

506 507
if(CMAKE_BINARY_DIR)
  message(FATAL_ERROR "CPackDeb.cmake may only be used by CPack internally.")
508
endif()
509

510 511
if(NOT UNIX)
  message(FATAL_ERROR "CPackDeb.cmake may only be used under UNIX.")
512
endif()
513

514 515 516 517 518 519 520 521 522 523 524
function(cpack_deb_variable_fallback OUTPUT_VAR_NAME)
  set(FALLBACK_VAR_NAMES ${ARGN})

  foreach(variable_name IN LISTS FALLBACK_VAR_NAMES)
    if(${variable_name})
      set(${OUTPUT_VAR_NAME} "${${variable_name}}" PARENT_SCOPE)
      break()
    endif()
  endforeach()
endfunction()

525 526 527 528 529 530 531 532 533 534 535
function(get_component_package_name var component)
  string(TOUPPER "${component}" component_upcase)
  if(CPACK_DEBIAN_${component_upcase}_PACKAGE_NAME)
    string(TOLOWER "${CPACK_DEBIAN_${component_upcase}_PACKAGE_NAME}" package_name)
  else()
    string(TOLOWER "${CPACK_DEBIAN_PACKAGE_NAME}-${component}" package_name)
  endif()

  set("${var}" "${package_name}" PARENT_SCOPE)
endfunction()

536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556
#extract library name and version for given shared object
function(extract_so_info shared_object libname version)
  if(READELF_EXECUTABLE)
    execute_process(COMMAND "${READELF_EXECUTABLE}" -d "${shared_object}"
      WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
      RESULT_VARIABLE result
      OUTPUT_VARIABLE output
      ERROR_QUIET
      OUTPUT_STRIP_TRAILING_WHITESPACE)
    if(result EQUAL 0)
      string(REGEX MATCH "\\(SONAME\\)[^\n]*\\[([^\n]+)\\.so\\.([^\n]*)\\]" soname "${output}")
      set(${libname} "${CMAKE_MATCH_1}" PARENT_SCOPE)
      set(${version} "${CMAKE_MATCH_2}" PARENT_SCOPE)
    else()
      message(WARNING "Error running readelf for \"${shared_object}\"")
    endif()
  else()
    message(FATAL_ERROR "Readelf utility is not available.")
  endif()
endfunction()

557 558 559 560 561 562
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()
563

564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580
  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()

581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613
  if(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OR CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS)
    # Generating binary list - Get type of all install files
    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_}"
        WORKING_DIRECTORY "${WDIR}"
        OUTPUT_VARIABLE INSTALL_FILE_)
      list(APPEND CPACK_DEB_INSTALL_FILES "${INSTALL_FILE_}")
    endforeach()

    # Only dynamically linked ELF files are included
    # Extract only file name infront of ":"
    foreach(_FILE IN LISTS 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)
      endif()
      if(_FILE MATCHES "ELF.*shared object")
        string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}")
        list(APPEND CPACK_DEB_SHARED_OBJECT_FILES "${CMAKE_MATCH_1}")
      endif()
    endforeach()
  endif()

614 615 616 617 618
  if(CPACK_DEBIAN_PACKAGE_SHLIBDEPS)
    # dpkg-shlibdeps is a Debian utility for generating dependency list
    find_program(SHLIBDEPS_EXECUTABLE dpkg-shlibdeps)

    if(SHLIBDEPS_EXECUTABLE)
619
      # Check version of the dpkg-shlibdeps tool using CPackRPM method
620 621 622 623
      execute_process(COMMAND env LC_ALL=C ${SHLIBDEPS_EXECUTABLE} --version
        OUTPUT_VARIABLE _TMP_VERSION
        ERROR_QUIET
        OUTPUT_STRIP_TRAILING_WHITESPACE)
624 625 626 627 628
      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()
629

630
      if(CPACK_DEBIAN_PACKAGE_DEBUG)
631 632
        message("CPackDeb Debug: dpkg-shlibdeps --version output is '${_TMP_VERSION}'")
        message("CPackDeb Debug: dpkg-shlibdeps version is <${SHLIBDEPS_EXECUTABLE_VERSION}>")
633
      endif()
634

635 636
      if(CONTAINS_EXECUTABLE_FILES_)
        message("CPackDeb: - Generating dependency list")
637

638 639 640 641 642
        # 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 "")
643

644 645 646
        # Create a DEBIAN directory so that dpkg-shlibdeps can find the package dir when resolving $ORIGIN.
        file(MAKE_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}/DEBIAN")

647 648 649 650 651 652
        # Add --ignore-missing-info if the tool supports it
        execute_process(COMMAND env LC_ALL=C ${SHLIBDEPS_EXECUTABLE} --help
          OUTPUT_VARIABLE _TMP_HELP
          ERROR_QUIET
          OUTPUT_STRIP_TRAILING_WHITESPACE)
        if(_TMP_HELP MATCHES "--ignore-missing-info")
653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678
          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}
          WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
          OUTPUT_VARIABLE SHLIBDEPS_OUTPUT
          RESULT_VARIABLE SHLIBDEPS_RESULT
          ERROR_VARIABLE SHLIBDEPS_ERROR
          OUTPUT_STRIP_TRAILING_WHITESPACE )
        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"
              "executed command: '${SHLIBDEPS_EXECUTABLE} ${IGNORE_MISSING_INFO_FLAG} -O ${CPACK_DEB_BINARY_FILES}';\n"
              "found files: '${INSTALL_FILE_}';\n"
              "files info: '${CPACK_DEB_INSTALL_FILES}';\n"
              "binary files: '${CPACK_DEB_BINARY_FILES}'")
        endif()

        #Get rid of prefix generated by dpkg-shlibdeps
        string(REGEX REPLACE "^.*Depends=" "" CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS "${SHLIBDEPS_OUTPUT}")
679

680
        if(CPACK_DEBIAN_PACKAGE_DEBUG)
681
          message("CPackDeb Debug: Found dependency: ${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS} from output ${SHLIBDEPS_OUTPUT}")
682
        endif()
683

684 685 686
        # Remove blank control file
        # Might not be safe if package actual contain file or directory named debian
        file(REMOVE_RECURSE "${CPACK_TEMPORARY_DIRECTORY}/debian")
687 688 689

        # remove temporary directory that was created only for dpkg-shlibdeps execution
        file(REMOVE_RECURSE "${CPACK_TEMPORARY_DIRECTORY}/DEBIAN")
690 691
      else()
        if(CPACK_DEBIAN_PACKAGE_DEBUG)
692
          message(AUTHOR_WARNING "CPackDeb Debug: Using only user-provided depends because package does not contain executable files that link to shared libraries.")
693 694 695
        endif()
      endif()
    else()
696
      message("CPackDeb: Using only user-provided dependencies because dpkg-shlibdeps is not found.")
697
    endif()
698

699
  else()
700
    if(CPACK_DEBIAN_PACKAGE_DEBUG)
701
      message("CPackDeb Debug: Using only user-provided dependencies")
702 703
    endif()
  endif()
704

705
  # Let's define the control file found in debian package:
706

707 708
  # Binary package:
  # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-binarycontrolfiles
709

710 711 712 713 714
  # 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)
715
  endif()
716

717 718 719 720 721 722
  # 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})
723
  endif()
724

725
  # Architecture: (mandatory)
726 727 728
  if(CPACK_DEB_PACKAGE_COMPONENT AND CPACK_DEBIAN_${_local_component_name}_PACKAGE_ARCHITECTURE)
    set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${CPACK_DEBIAN_${_local_component_name}_PACKAGE_ARCHITECTURE}")
  elseif(NOT CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
729 730 731 732 733 734 735 736 737 738 739 740
    # 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
      OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE
      OUTPUT_STRIP_TRAILING_WHITESPACE
      )
  endif()
741

742 743 744 745 746 747 748 749 750
  # Source: (optional)
  # in case several packages are constructed from a unique source
  # (multipackaging), the source may be indicated as well.
  # The source might contain a version if the generated package
  # version is different from the source version
  if(NOT CPACK_DEBIAN_PACKAGE_SOURCE)
    set(CPACK_DEBIAN_PACKAGE_SOURCE "")
  endif()

751 752 753 754 755
  # 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'
756

757
  # if per-component variable, overrides the global CPACK_DEBIAN_PACKAGE_${variable_type_}
758 759
  # automatic dependency discovery will be performed afterwards.
  if(CPACK_DEB_PACKAGE_COMPONENT)
760
    foreach(value_type_ DEPENDS RECOMMENDS SUGGESTS PREDEPENDS ENHANCES BREAKS CONFLICTS PROVIDES REPLACES SOURCE SECTION PRIORITY NAME)
761
      set(_component_var "CPACK_DEBIAN_${_local_component_name}_PACKAGE_${value_type_}")
762

763
      # if set, overrides the global variable
764
      if(DEFINED ${_component_var})
765
        set(CPACK_DEBIAN_PACKAGE_${value_type_} "${${_component_var}}")
766
        if(CPACK_DEBIAN_PACKAGE_DEBUG)
767 768
          message("CPackDeb Debug: component '${_local_component_name}' ${value_type_} "
            "value set to '${CPACK_DEBIAN_PACKAGE_${value_type_}}'")
769
        endif()
770
      endif()
771
    endforeach()
772 773 774 775 776 777 778 779 780 781 782

    if(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS)
      set(COMPONENT_DEPENDS "")
      foreach (_PACK ${CPACK_COMPONENT_${_local_component_name}_DEPENDS})
        get_component_package_name(_PACK_NAME "${_PACK}")
        if(COMPONENT_DEPENDS)
          set(COMPONENT_DEPENDS "${_PACK_NAME} (= ${CPACK_DEBIAN_PACKAGE_VERSION}), ${COMPONENT_DEPENDS}")
        else()
          set(COMPONENT_DEPENDS "${_PACK_NAME} (= ${CPACK_DEBIAN_PACKAGE_VERSION})")
        endif()
      endforeach()
783
      if(COMPONENT_DEPENDS)
784 785 786 787 788
        if(CPACK_DEBIAN_PACKAGE_DEPENDS)
          set(CPACK_DEBIAN_PACKAGE_DEPENDS "${COMPONENT_DEPENDS}, ${CPACK_DEBIAN_PACKAGE_DEPENDS}")
        else()
          set(CPACK_DEBIAN_PACKAGE_DEPENDS "${COMPONENT_DEPENDS}")
        endif()
789 790
      endif()
    endif()
791 792 793 794 795 796 797
  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)
798
      set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}, ${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}")
799 800 801 802 803
    else ()
      set (CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_AUTO_DEPENDS}")
    endif ()
  endif()

804 805
  if(NOT CPACK_DEBIAN_PACKAGE_DEPENDS)
    message(STATUS "CPACK_DEBIAN_PACKAGE_DEPENDS not set, the package will have no dependencies.")
806
  endif()
807

808 809 810 811 812 813
  # 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})
814
  endif()
815

816
  # Description: (mandatory)
817 818 819 820 821 822
  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})
823
    endif()
824 825 826 827 828 829 830 831 832 833 834
  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})
835 836
    endif()
  endif()
837

838 839 840 841
  # Section: (recommended)
  if(NOT CPACK_DEBIAN_PACKAGE_SECTION)
    set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
  endif()
842

843 844 845 846
  # Priority: (recommended)
  if(NOT CPACK_DEBIAN_PACKAGE_PRIORITY)
    set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
  endif()
847

848 849 850 851 852 853 854 855 856 857 858 859 860
  if(CPACK_DEBIAN_ARCHIVE_TYPE)
    set(archive_types_ "paxr;gnutar")
    cmake_policy(PUSH)
      cmake_policy(SET CMP0057 NEW)
      if(NOT CPACK_DEBIAN_ARCHIVE_TYPE IN_LIST archive_types_)
        message(FATAL_ERROR "CPACK_DEBIAN_ARCHIVE_TYPE set to unsupported"
          "type ${CPACK_DEBIAN_ARCHIVE_TYPE}")
      endif()
    cmake_policy(POP)
  else()
    set(CPACK_DEBIAN_ARCHIVE_TYPE "paxr")
  endif()

861 862 863 864
  # Compression: (recommended)
  if(NOT CPACK_DEBIAN_COMPRESSION_TYPE)
    set(CPACK_DEBIAN_COMPRESSION_TYPE "gzip")
  endif()
865

866 867 868 869 870 871 872 873 874 875 876 877
  # 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
878
  # - prerm
879 880 881 882 883 884
  # 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)
885
    # override values with per component version if set
886
    foreach(VAR_NAME_ "PACKAGE_CONTROL_EXTRA" "PACKAGE_CONTROL_STRICT_PERMISSION")
887 888 889 890
      if(CPACK_DEBIAN_${_local_component_name}_${VAR_NAME_})
        set(CPACK_DEBIAN_${VAR_NAME_} "${CPACK_DEBIAN_${_local_component_name}_${VAR_NAME_}}")
      endif()
    endforeach()
891
    get_component_package_name(CPACK_DEBIAN_PACKAGE_NAME ${_local_component_name})
892
  endif()
893

894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920
  set(CPACK_DEBIAN_PACKAGE_SHLIBS_LIST "")

  if (NOT CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY)
    set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY "=")
  endif()

  find_program(READELF_EXECUTABLE NAMES readelf)

  if(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS)
    if(READELF_EXECUTABLE)
      foreach(_FILE IN LISTS CPACK_DEB_SHARED_OBJECT_FILES)
        extract_so_info("${_FILE}" libname soversion)
        if(libname AND soversion)
          list(APPEND CPACK_DEBIAN_PACKAGE_SHLIBS_LIST
               "${libname} ${soversion} ${CPACK_DEBIAN_PACKAGE_NAME} (${CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY} ${CPACK_PACKAGE_VERSION})")
        else()
          message(AUTHOR_WARNING "Shared library '${_FILE}' is missing soname or soversion. Library will not be added to DEBIAN/shlibs control file.")
        endif()
      endforeach()
      if (CPACK_DEBIAN_PACKAGE_SHLIBS_LIST)
        string(REPLACE ";" "\n" CPACK_DEBIAN_PACKAGE_SHLIBS_LIST "${CPACK_DEBIAN_PACKAGE_SHLIBS_LIST}")
      endif()
    else()
      message(FATAL_ERROR "Readelf utility is not available. CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS option is not available.")
    endif()
  endif()

921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947
  # add ldconfig call in default postrm and postint
  set(CPACK_ADD_LDCONFIG_CALL 0)
  foreach(_FILE ${CPACK_DEB_SHARED_OBJECT_FILES})
    get_filename_component(_DIR ${_FILE} DIRECTORY)
    # all files in CPACK_DEB_SHARED_OBJECT_FILES have dot at the beginning
    if(_DIR STREQUAL "./lib" OR _DIR STREQUAL "./usr/lib")
      set(CPACK_ADD_LDCONFIG_CALL 1)
    endif()
  endforeach()

  if(CPACK_ADD_LDCONFIG_CALL)
    set(CPACK_DEBIAN_GENERATE_POSTINST 1)
    set(CPACK_DEBIAN_GENERATE_POSTRM 1)
    foreach(f ${PACKAGE_CONTROL_EXTRA})
      get_filename_component(n "${f}" NAME)
      if("${n}" STREQUAL "postinst")
        set(CPACK_DEBIAN_GENERATE_POSTINST 0)
      endif()
      if("${n}" STREQUAL "postrm")
        set(CPACK_DEBIAN_GENERATE_POSTRM 0)
      endif()
    endforeach()
  else()
    set(CPACK_DEBIAN_GENERATE_POSTINST 0)
    set(CPACK_DEBIAN_GENERATE_POSTRM 0)
  endif()

948 949 950 951
  if(NOT CPACK_DEBIAN_PACKAGE_RELEASE)
    set(CPACK_DEBIAN_PACKAGE_RELEASE 1)
  endif()

952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977

  cpack_deb_variable_fallback("CPACK_DEBIAN_FILE_NAME"
    "CPACK_DEBIAN_${_local_component_name}_FILE_NAME"
    "CPACK_DEBIAN_FILE_NAME")
  if(CPACK_DEBIAN_FILE_NAME)
    if(CPACK_DEBIAN_FILE_NAME STREQUAL "DEB-DEFAULT")
      # Patch package file name to be in corrent debian format:
      # <foo>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
      set(CPACK_OUTPUT_FILE_NAME
        "${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb")
    else()
      cmake_policy(PUSH)
        cmake_policy(SET CMP0010 NEW)
        if(NOT CPACK_DEBIAN_FILE_NAME MATCHES ".*\\.deb")
      cmake_policy(POP)
          message(FATAL_ERROR "'${CPACK_DEBIAN_FILE_NAME}' is not a valid DEB package file name as it must end with '.deb'!")
        endif()
      cmake_policy(POP)

      set(CPACK_OUTPUT_FILE_NAME "${CPACK_DEBIAN_FILE_NAME}")
    endif()

    set(CPACK_TEMPORARY_PACKAGE_FILE_NAME "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_OUTPUT_FILE_NAME}")
    get_filename_component(BINARY_DIR "${CPACK_OUTPUT_FILE_PATH}" DIRECTORY)
    set(CPACK_OUTPUT_FILE_PATH "${BINARY_DIR}/${CPACK_OUTPUT_FILE_NAME}")
  endif() # else() back compatibility - don't change the name
978

979 980
  # Print out some debug information if we were asked for that
  if(CPACK_DEBIAN_PACKAGE_DEBUG)
981 982 983 984 985 986 987 988 989
     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}'")
     message("CPackDeb:Debug: CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION = '${CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION}'")
990
     message("CPackDeb:Debug: CPACK_DEBIAN_PACKAGE_SOURCE       = '${CPACK_DEBIAN_PACKAGE_SOURCE}'")
991
  endif()
992

993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007
  # 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
1008 1009
  set(GEN_CPACK_OUTPUT_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}" PARENT_SCOPE)
  set(GEN_CPACK_TEMPORARY_PACKAGE_FILE_NAME "${CPACK_TEMPORARY_PACKAGE_FILE_NAME}" PARENT_SCOPE)
1010 1011 1012 1013 1014 1015 1016 1017
  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)
1018
  set(GEN_CPACK_DEBIAN_ARCHIVE_TYPE "${CPACK_DEBIAN_ARCHIVE_TYPE}" PARENT_SCOPE)
1019 1020 1021 1022 1023 1024 1025 1026 1027 1028
  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)
1029
  set(GEN_CPACK_DEBIAN_PACKAGE_SHLIBS "${CPACK_DEBIAN_PACKAGE_SHLIBS_LIST}" PARENT_SCOPE)
1030
  set(GEN_CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA}" PARENT_SCOPE)
1031 1032
  set(GEN_CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION
      "${CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION}" PARENT_SCOPE)
1033 1034
  set(GEN_CPACK_DEBIAN_PACKAGE_SOURCE
     "${CPACK_DEBIAN_PACKAGE_SOURCE}" PARENT_SCOPE)
1035 1036
  set(GEN_CPACK_DEBIAN_GENERATE_POSTINST "${CPACK_DEBIAN_GENERATE_POSTINST}" PARENT_SCOPE)
  set(GEN_CPACK_DEBIAN_GENERATE_POSTRM "${CPACK_DEBIAN_GENERATE_POSTRM}" PARENT_SCOPE)
1037 1038 1039 1040
  set(GEN_WDIR "${WDIR}" PARENT_SCOPE)
endfunction()

cpack_deb_prepare_package_vars()