1 # - The builtin (binary) CPack Deb generator (Unix only)
2 # CPackDeb may be used to create Deb package using CPack.
3 # CPackDeb is a CPack generator thus it uses the CPACK_XXX variables
4 # used by CPack : http://www.cmake.org/Wiki/CMake:CPackConfiguration
6 # However CPackRPM has specific features which are controlled by
7 # the specifics CPACK_RPM_XXX variables.You'll find a detailed usage on
9 # http://www.cmake.org/Wiki/CMake:CPackPackageGenerators#DEB_.28UNIX_only.29
10 # However as a handy reminder here comes the list of specific variables:
12 # CPACK_DEBIAN_PACKAGE_NAME
14 # Default : CPACK_PACKAGE_NAME (lower case)
15 # The debian package summary
16 # CPACK_DEBIAN_PACKAGE_VERSION
18 # Default : CPACK_PACKAGE_VERSION
19 # The debian package version
20 # CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
22 # Default : Output of dpkg --print-architecture or i386
23 # The debian package architecture
24 # CPACK_DEBIAN_PACKAGE_DEPENDS
27 # May be used to set deb dependencies.
28 # CPACK_DEBIAN_PACKAGE_MAINTAINER
30 # Default : CPACK_PACKAGE_CONTACT
31 # The debian package maintainer
32 # CPACK_DEBIAN_PACKAGE_DESCRIPTION
34 # Default : CPACK_PACKAGE_DESCRIPTION_SUMMARY
35 # The debian package description
36 # CPACK_DEBIAN_PACKAGE_SECTION
39 # The debian package section
40 # CPACK_DEBIAN_PACKAGE_PRIORITY
42 # Default : 'optional'
43 # The debian package priority
45 #=============================================================================
46 # Copyright 2007-2009 Kitware, Inc.
47 # Copyright 2007-2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
49 # Distributed under the OSI-approved BSD License (the "License");
50 # see accompanying file Copyright.txt for details.
52 # This software is distributed WITHOUT ANY WARRANTY; without even the
53 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
54 # See the License for more information.
55 #=============================================================================
56 # (To distributed this file outside of CMake, substitute the full
57 # License text for the above reference.)
59 # CPack script for creating Debian package
60 # Author: Mathieu Malaterre
62 # http://wiki.debian.org/HowToPackageForDebian
65 MESSAGE(FATAL_ERROR "CPackDeb.cmake may only be used by CPack internally.")
66 ENDIF(CMAKE_BINARY_DIR)
69 MESSAGE(FATAL_ERROR "CPackDeb.cmake may only be used under UNIX.")
72 # Let's define the control file found in debian package:
75 # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-binarycontrolfiles
78 # debian policy enforce lower case for package name
79 # Package: (mandatory)
80 IF(NOT CPACK_DEBIAN_PACKAGE_NAME)
81 STRING(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_DEBIAN_PACKAGE_NAME)
82 ENDIF(NOT CPACK_DEBIAN_PACKAGE_NAME)
84 # Version: (mandatory)
85 IF(NOT CPACK_DEBIAN_PACKAGE_VERSION)
86 IF(NOT CPACK_PACKAGE_VERSION)
87 MESSAGE(FATAL_ERROR "Debian package requires a package version")
88 ENDIF(NOT CPACK_PACKAGE_VERSION)
89 SET(CPACK_DEBIAN_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
90 ENDIF(NOT CPACK_DEBIAN_PACKAGE_VERSION)
92 # Architecture: (mandatory)
93 IF(NOT CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
94 # There is no such thing as i686 architecture on debian, you should use i386 instead
95 # $ dpkg --print-architecture
96 FIND_PROGRAM(DPKG_CMD dpkg)
98 MESSAGE(STATUS "Can not find dpkg in your path, default to i386.")
99 SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE i386)
101 EXECUTE_PROCESS(COMMAND "${DPKG_CMD}" --print-architecture
102 OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE
103 OUTPUT_STRIP_TRAILING_WHITESPACE
105 ENDIF(NOT CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
107 # have a look at GET_PROPERTY(result GLOBAL PROPERTY ENABLED_FEATURES),
108 # this returns the successful FIND_PACKAGE() calls, maybe this can help
110 # You should set: DEBIAN_PACKAGE_DEPENDS
111 # TODO: automate 'objdump -p | grep NEEDED'
112 IF(NOT CPACK_DEBIAN_PACKAGE_DEPENDS)
113 MESSAGE(STATUS "CPACK_DEBIAN_PACKAGE_DEPENDS not set, the package will have no dependencies.")
114 ENDIF(NOT CPACK_DEBIAN_PACKAGE_DEPENDS)
116 # Maintainer: (mandatory)
117 IF(NOT CPACK_DEBIAN_PACKAGE_MAINTAINER)
118 IF(NOT CPACK_PACKAGE_CONTACT)
119 MESSAGE(FATAL_ERROR "Debian package requires a maintainer for a package, set CPACK_PACKAGE_CONTACT or CPACK_DEBIAN_PACKAGE_MAINTAINER")
120 ENDIF(NOT CPACK_PACKAGE_CONTACT)
121 SET(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_CONTACT})
122 ENDIF(NOT CPACK_DEBIAN_PACKAGE_MAINTAINER)
124 # Description: (mandatory)
125 IF(NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION)
126 IF(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY)
127 MESSAGE(FATAL_ERROR "Debian package requires a summary for a package, set CPACK_PACKAGE_DESCRIPTION_SUMMARY or CPACK_DEBIAN_PACKAGE_DESCRIPTION")
128 ENDIF(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY)
129 SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION_SUMMARY})
130 ENDIF(NOT CPACK_DEBIAN_PACKAGE_DESCRIPTION)
132 # Section: (recommended)
133 IF(NOT CPACK_DEBIAN_PACKAGE_SECTION)
134 SET(CPACK_DEBIAN_PACKAGE_SECTION "devel")
135 ENDIF(NOT CPACK_DEBIAN_PACKAGE_SECTION)
137 # Priority: (recommended)
138 IF(NOT CPACK_DEBIAN_PACKAGE_PRIORITY)
139 SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
140 ENDIF(NOT CPACK_DEBIAN_PACKAGE_PRIORITY )
143 # You should set: CPACK_DEBIAN_PACKAGE_RECOMMENDS
146 # You should set: CPACK_DEBIAN_PACKAGE_SUGGESTS
148 # CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
149 # This variable allow advanced user to add custom script to the control.tar.gz (inside the .deb archive)
150 # Typical examples are:
156 # SET(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
157 # "${CMAKE_CURRENT_SOURCE_DIR/prerm;${CMAKE_CURRENT_SOURCE_DIR}/postrm")
160 # For debian source packages:
162 # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-sourcecontrolfiles
165 # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-debiansourcecontrolfiles
168 #IF(NOT CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS)
169 # SET(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS
170 # "debhelper (>> 5.0.0), libncurses5-dev, tcl8.4"
172 #ENDIF(NOT CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS)
174 # Description: (mandatory)
175 #if(NOT CPACK_SECTION)
176 # message(FATAL_ERROR "opkg package requires a package section")
177 #endif(NOT CPACK_SECTION)
180 FIND_PROGRAM(OPKG_CMD opkg-build)
181 if( ${OPKG_CMD} STREQUAL "OPKG_CMD-NOTFOUND" )
182 message("CPack: opkg-build not found. Skipping packaging")
183 else( ${OPKG_CMD} STREQUAL "OPKG_CMD-NOTFOUND" )
184 SET(CPACK_OPKG_ROOTDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
185 FILE(MAKE_DIRECTORY ${CPACK_OPKG_ROOTDIR}/CONTROL)
186 set(CPACK_OPKG_CONTROL_FILE "${CPACK_OPKG_ROOTDIR}/CONTROL/control")
188 FILE(WRITE ${CPACK_OPKG_CONTROL_FILE}
189 "Package: ${CPACK_PACKAGE_NAME}
190 Version: ${CPACK_PACKAGE_VERSION}
191 Description: ${CPACK_PACKAGE_DESCRIPTION_SUMMARY}
192 Architecture: ${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}
193 Section: ${CPACK_DEBIAN_PACKAGE_SECTION}
195 Maintainer: ${CPACK_DEBIAN_PACKAGE_MAINTAINER}
197 Provides: ${CPACK_DEBIAN_PACKAGE_PROVIDES}
198 Replaces: ${CPACK_DEBIAN_PACKAGE_REPLACES}
199 Conflicts: ${CPACK_DEBIAN_PACKAGE_CONFLICTS}
200 Source: https://github.com/intel-iot-devkit/maa
204 set(OPKG_FILE_NAME "${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")
206 COMMAND "${OPKG_CMD}" "-o" "0" "${CPACK_PACKAGE_FILE_NAME}" "."
207 RESULT_VARIABLE _result
208 OUTPUT_VARIABLE _res_output
209 ERROR_VARIABLE _res_error
210 WORKING_DIRECTORY ${CPACK_TOPLEVEL_DIRECTORY}
214 message("Result '${_result}'")
215 message("Output '${_res_output}'")
216 message("Error '${_res_error}'")
218 message("CPack: Package ${OPKG_FILE_NAME}.ipk generated.")
219 set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
220 file(RENAME ${CPACK_TOPLEVEL_DIRECTORY}/${OPKG_FILE_NAME}.ipk ${CPACK_BINARY_DIR}/${OPKG_FILE_NAME}.ipk)
222 endif( ${OPKG_CMD} STREQUAL "OPKG_CMD-NOTFOUND" )