CPackDeb.cmake 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #=============================================================================
  2. # Copyright 2007-2009 Kitware, Inc.
  3. #
  4. # Distributed under the OSI-approved BSD License (the "License");
  5. # see accompanying file Copyright.txt for details.
  6. #
  7. # This software is distributed WITHOUT ANY WARRANTY; without even the
  8. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  9. # See the License for more information.
  10. #=============================================================================
  11. # (To distributed this file outside of CMake, substitute the full
  12. # License text for the above reference.)
  13. # CPack script for creating Debian package
  14. # Author: Mathieu Malaterre
  15. #
  16. # http://wiki.debian.org/HowToPackageForDebian
  17. IF(CMAKE_BINARY_DIR)
  18. MESSAGE(FATAL_ERROR "CPackDeb.cmake may only be used by CPack internally.")
  19. ENDIF(CMAKE_BINARY_DIR)
  20. IF(NOT UNIX)
  21. MESSAGE(FATAL_ERROR "CPackDeb.cmake may only be used under UNIX.")
  22. ENDIF(NOT UNIX)
  23. # Let's define the control file found in debian package:
  24. # Binary package:
  25. # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-binarycontrolfiles
  26. # DEBIAN/control
  27. # debian policy enforce lower case for package name
  28. # Package: (mandatory)
  29. IF(NOT CPACK_DEBIAN_PACKAGE_NAME)
  30. STRING(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_DEBIAN_PACKAGE_NAME)
  31. ENDIF(NOT CPACK_DEBIAN_PACKAGE_NAME)
  32. # Version: (mandatory)
  33. IF(NOT CPACK_DEBIAN_PACKAGE_VERSION)
  34. IF(NOT CPACK_PACKAGE_VERSION)
  35. MESSAGE(FATAL_ERROR "Debian package requires a package version")
  36. ENDIF(NOT CPACK_PACKAGE_VERSION)
  37. SET(CPACK_DEBIAN_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
  38. ENDIF(NOT CPACK_DEBIAN_PACKAGE_VERSION)
  39. # Architecture: (mandatory)
  40. IF(NOT CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
  41. # There is no such thing as i686 architecture on debian, you should use i386 instead
  42. # $ dpkg --print-architecture
  43. FIND_PROGRAM(DPKG_CMD dpkg)
  44. IF(NOT DPKG_CMD)
  45. MESSAGE(STATUS "Can not find dpkg in your path, default to i386.")
  46. SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE i386)
  47. ENDIF(NOT DPKG_CMD)
  48. EXECUTE_PROCESS(COMMAND "${DPKG_CMD}" --print-architecture
  49. OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE
  50. OUTPUT_STRIP_TRAILING_WHITESPACE
  51. )
  52. ENDIF(NOT CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
  53. # have a look at GET_PROPERTY(result GLOBAL PROPERTY ENABLED_FEATURES),
  54. # this returns the successful FIND_PACKAGE() calls, maybe this can help
  55. # Depends:
  56. # You should set: DEBIAN_PACKAGE_DEPENDS
  57. # TODO: automate 'objdump -p | grep NEEDED'
  58. IF(NOT CPACK_DEBIAN_PACKAGE_DEPENDS)
  59. MESSAGE(STATUS "CPACK_DEBIAN_PACKAGE_DEPENDS not set, the package will have no dependencies.")
  60. ENDIF(NOT CPACK_DEBIAN_PACKAGE_DEPENDS)
  61. # Maintainer: (mandatory)
  62. IF(NOT CPACK_DEBIAN_PACKAGE_MAINTAINER)
  63. IF(NOT CPACK_PACKAGE_CONTACT)
  64. MESSAGE(FATAL_ERROR "Debian package requires a maintainer for a package, set CPACK_PACKAGE_CONTACT or CPACK_DEBIAN_PACKAGE_MAINTAINER")
  65. ENDIF(NOT CPACK_PACKAGE_CONTACT)
  66. SET(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_CONTACT})
  67. ENDIF(NOT CPACK_DEBIAN_PACKAGE_MAINTAINER)
  68. # Description: (mandatory)
  69. IF(NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION)
  70. IF(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY)
  71. MESSAGE(FATAL_ERROR "Debian package requires a summary for a package, set CPACK_PACKAGE_DESCRIPTION_SUMMARY or CPACK_DEBIAN_PACKAGE_DESCRIPTION")
  72. ENDIF(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY)
  73. SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION_SUMMARY})
  74. ENDIF(NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION)
  75. # Section: (recommended)
  76. IF(NOT CPACK_DEBIAN_PACKAGE_SECTION)
  77. SET(CPACK_DEBIAN_PACKAGE_SECTION "devel")
  78. ENDIF(NOT CPACK_DEBIAN_PACKAGE_SECTION)
  79. # Priority: (recommended)
  80. IF(NOT CPACK_DEBIAN_PACKAGE_PRIORITY)
  81. SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
  82. ENDIF(NOT CPACK_DEBIAN_PACKAGE_PRIORITY )
  83. # Recommends:
  84. # You should set: CPACK_DEBIAN_PACKAGE_RECOMMENDS
  85. # Suggests:
  86. # You should set: CPACK_DEBIAN_PACKAGE_SUGGESTS
  87. # CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
  88. # This variable allow advanced user to add custom script to the control.tar.gz (inside the .deb archive)
  89. # Typical examples are:
  90. # - conffiles
  91. # - postinst
  92. # - postrm
  93. # - prerm"
  94. # Usage:
  95. # SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
  96. # "${CMAKE_CURRENT_SOURCE_DIR/prerm;${CMAKE_CURRENT_SOURCE_DIR}/postrm")
  97. # For debian source packages:
  98. # debian/control
  99. # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-sourcecontrolfiles
  100. # .dsc
  101. # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-debiansourcecontrolfiles
  102. # Builds-Depends:
  103. #IF(NOT CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS)
  104. # SET(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS
  105. # "debhelper (>> 5.0.0), libncurses5-dev, tcl8.4"
  106. # )
  107. #ENDIF(NOT CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS)