CPackRPM.cmake 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776
  1. # - The builtin (binary) CPack RPM generator (Unix only)
  2. # CPackRPM may be used to create RPM package using CPack.
  3. # CPackRPM is a CPack generator thus it uses the CPACK_XXX variables
  4. # used by CPack : http://www.cmake.org/Wiki/CMake:CPackConfiguration
  5. #
  6. # However CPackRPM has specific features which are controlled by
  7. # the specifics CPACK_RPM_XXX variables. CPackRPM is a component aware
  8. # generator so when CPACK_RPM_COMPONENT_INSTALL is ON some more
  9. # CPACK_RPM_<ComponentName>_XXXX variables may be used in order
  10. # to have component specific values. Note however that <componentName>
  11. # refers to the **grouping name**. This may be either a component name
  12. # or a component GROUP name.
  13. # Usually those vars correspond to RPM spec file entities, one may find
  14. # information about spec files here http://www.rpm.org/wiki/Docs.
  15. # You'll find a detailed usage of CPackRPM on the wiki:
  16. # http://www.cmake.org/Wiki/CMake:CPackPackageGenerators#RPM_.28Unix_Only.29
  17. # However as a handy reminder here comes the list of specific variables:
  18. #
  19. # CPACK_RPM_PACKAGE_SUMMARY
  20. # Mandatory : YES
  21. # Default : CPACK_PACKAGE_DESCRIPTION_SUMMARY
  22. # The RPM package summary
  23. # CPACK_RPM_PACKAGE_NAME
  24. # Mandatory : YES
  25. # Default : CPACK_PACKAGE_NAME
  26. # The RPM package name
  27. # CPACK_RPM_PACKAGE_VERSION
  28. # Mandatory : YES
  29. # Default : CPACK_PACKAGE_VERSION
  30. # The RPM package version
  31. # CPACK_RPM_PACKAGE_ARCHITECTURE
  32. # Mandatory : NO
  33. # Default : -
  34. # The RPM package architecture. This may be set to "noarch" if you
  35. # know you are building a noarch package.
  36. # CPACK_RPM_PACKAGE_RELEASE
  37. # Mandatory : YES
  38. # Default : 1
  39. # The RPM package release. This is the numbering of the RPM package
  40. # itself, i.e. the version of the packaging and not the version of the
  41. # content (see CPACK_RPM_PACKAGE_VERSION). One may change the default
  42. # value if the previous packaging was buggy and/or you want to put here
  43. # a fancy Linux distro specific numbering.
  44. # CPACK_RPM_PACKAGE_LICENSE
  45. # Mandatory : YES
  46. # Default : "unknown"
  47. # The RPM package license policy.
  48. # CPACK_RPM_PACKAGE_GROUP
  49. # Mandatory : YES
  50. # Default : "unknown"
  51. # The RPM package group.
  52. # CPACK_RPM_PACKAGE_VENDOR
  53. # Mandatory : YES
  54. # Default : CPACK_PACKAGE_VENDOR if set or "unknown"
  55. # The RPM package vendor.
  56. # CPACK_RPM_PACKAGE_URL
  57. # Mandatory : NO
  58. # Default : -
  59. # The projects URL.
  60. # CPACK_RPM_PACKAGE_DESCRIPTION
  61. # Mandatory : YES
  62. # Default : CPACK_PACKAGE_DESCRIPTION_FILE if set or "no package description available"
  63. # CPACK_RPM_COMPRESSION_TYPE
  64. # Mandatory : NO
  65. # Default : -
  66. # May be used to override RPM compression type to be used
  67. # to build the RPM. For example some Linux distribution now default
  68. # to lzma or xz compression whereas older cannot use such RPM.
  69. # Using this one can enforce compression type to be used.
  70. # Possible value are: lzma, xz, bzip2 and gzip.
  71. # CPACK_RPM_PACKAGE_REQUIRES
  72. # Mandatory : NO
  73. # Default : -
  74. # May be used to set RPM dependencies (requires).
  75. # Note that you must enclose the complete requires string between quotes,
  76. # for example:
  77. # set(CPACK_RPM_PACKAGE_REQUIRES "python >= 2.5.0, cmake >= 2.8")
  78. # The required package list of an RPM file could be printed with
  79. # rpm -qp --requires file.rpm
  80. # CPACK_RPM_PACKAGE_SUGGESTS
  81. # Mandatory : NO
  82. # Default : -
  83. # May be used to set weak RPM dependencies (suggests).
  84. # Note that you must enclose the complete requires string between quotes.
  85. # CPACK_RPM_PACKAGE_PROVIDES
  86. # Mandatory : NO
  87. # Default : -
  88. # May be used to set RPM dependencies (provides).
  89. # The provided package list of an RPM file could be printed with
  90. # rpm -qp --provides file.rpm
  91. # CPACK_RPM_PACKAGE_OBSOLETES
  92. # Mandatory : NO
  93. # Default : -
  94. # May be used to set RPM packages that are obsoleted by this one.
  95. # CPACK_RPM_PACKAGE_RELOCATABLE
  96. # Mandatory : NO
  97. # Default : CPACK_PACKAGE_RELOCATABLE
  98. # If this variable is set to TRUE or ON CPackRPM will try
  99. # to build a relocatable RPM package. A relocatable RPM may
  100. # be installed using rpm --prefix or --relocate in order to
  101. # install it at an alternate place see rpm(8).
  102. # Note that currently this may fail if CPACK_SET_DESTDIR is set to ON.
  103. # If CPACK_SET_DESTDIR is set then you will get a warning message
  104. # but if there is file installed with absolute path you'll get
  105. # unexpected behavior.
  106. # CPACK_RPM_SPEC_INSTALL_POST [deprecated]
  107. # Mandatory : NO
  108. # Default : -
  109. # This way of specifying post-install script is deprecated use
  110. # CPACK_RPM_POST_INSTALL_SCRIPT_FILE
  111. # May be used to set an RPM post-install command inside the spec file.
  112. # For example setting it to "/bin/true" may be used to prevent
  113. # rpmbuild to strip binaries.
  114. # CPACK_RPM_SPEC_MORE_DEFINE
  115. # Mandatory : NO
  116. # Default : -
  117. # May be used to add any %define lines to the generated spec file.
  118. # CPACK_RPM_PACKAGE_DEBUG
  119. # Mandatory : NO
  120. # Default : -
  121. # May be set when invoking cpack in order to trace debug information
  122. # during CPack RPM run. For example you may launch CPack like this
  123. # cpack -D CPACK_RPM_PACKAGE_DEBUG=1 -G RPM
  124. # CPACK_RPM_USER_BINARY_SPECFILE
  125. # Mandatory : NO
  126. # Default : -
  127. # May be set by the user in order to specify a USER binary spec file
  128. # to be used by CPackRPM instead of generating the file.
  129. # The specified file will be processed by CONFIGURE_FILE( @ONLY).
  130. # CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE
  131. # Mandatory : NO
  132. # Default : -
  133. # If set CPack will generate a template for USER specified binary
  134. # spec file and stop with an error. For example launch CPack like this
  135. # cpack -D CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE=1 -G RPM
  136. # The user may then use this file in order to hand-craft is own
  137. # binary spec file which may be used with CPACK_RPM_USER_BINARY_SPECFILE.
  138. # CPACK_RPM_PRE_INSTALL_SCRIPT_FILE
  139. # CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE
  140. # Mandatory : NO
  141. # Default : -
  142. # May be used to embed a pre (un)installation script in the spec file.
  143. # The refered script file(s) will be read and directly
  144. # put after the %pre or %preun section
  145. # If CPACK_RPM_COMPONENT_INSTALL is set to ON the (un)install script for
  146. # each component can be overriden with
  147. # CPACK_RPM_<COMPONENT>_PRE_INSTALL_SCRIPT_FILE and
  148. # CPACK_RPM_<COMPONENT>_PRE_UNINSTALL_SCRIPT_FILE
  149. # One may verify which scriptlet has been included with
  150. # rpm -qp --scripts package.rpm
  151. # CPACK_RPM_POST_INSTALL_SCRIPT_FILE
  152. # CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE
  153. # Mandatory : NO
  154. # Default : -
  155. # May be used to embed a post (un)installation script in the spec file.
  156. # The refered script file(s) will be read and directly
  157. # put after the %post or %postun section
  158. # If CPACK_RPM_COMPONENT_INSTALL is set to ON the (un)install script for
  159. # each component can be overriden with
  160. # CPACK_RPM_<COMPONENT>_POST_INSTALL_SCRIPT_FILE and
  161. # CPACK_RPM_<COMPONENT>_POST_UNINSTALL_SCRIPT_FILE
  162. # One may verify which scriptlet has been included with
  163. # rpm -qp --scripts package.rpm
  164. # CPACK_RPM_CHANGELOG_FILE
  165. # Mandatory : NO
  166. # Default : -
  167. # May be used to embed a changelog in the spec file.
  168. # The refered file will be read and directly put after the %changelog
  169. # section.
  170. #=============================================================================
  171. # Copyright 2007-2009 Kitware, Inc.
  172. #
  173. # Distributed under the OSI-approved BSD License (the "License");
  174. # see accompanying file Copyright.txt for details.
  175. #
  176. # This software is distributed WITHOUT ANY WARRANTY; without even the
  177. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  178. # See the License for more information.
  179. #=============================================================================
  180. # (To distribute this file outside of CMake, substitute the full
  181. # License text for the above reference.)
  182. # Author: Eric Noulard with the help of Alexander Neundorf.
  183. IF(CMAKE_BINARY_DIR)
  184. MESSAGE(FATAL_ERROR "CPackRPM.cmake may only be used by CPack internally.")
  185. ENDIF(CMAKE_BINARY_DIR)
  186. IF(NOT UNIX)
  187. MESSAGE(FATAL_ERROR "CPackRPM.cmake may only be used under UNIX.")
  188. ENDIF(NOT UNIX)
  189. # rpmbuild is the basic command for building RPM package
  190. # it may be a simple (symbolic) link to rpm command.
  191. FIND_PROGRAM(RPMBUILD_EXECUTABLE rpmbuild)
  192. # Check version of the rpmbuild tool this would be easier to
  193. # track bugs with users and CPackRPM debug mode.
  194. # We may use RPM version in order to check for available version dependent features
  195. IF(RPMBUILD_EXECUTABLE)
  196. execute_process(COMMAND ${RPMBUILD_EXECUTABLE} --version
  197. OUTPUT_VARIABLE _TMP_VERSION
  198. ERROR_QUIET
  199. OUTPUT_STRIP_TRAILING_WHITESPACE)
  200. string(REGEX REPLACE "^.*\ " ""
  201. RPMBUILD_EXECUTABLE_VERSION
  202. ${_TMP_VERSION})
  203. IF(CPACK_RPM_PACKAGE_DEBUG)
  204. MESSAGE("CPackRPM:Debug: rpmbuild version is <${RPMBUILD_EXECUTABLE_VERSION}>")
  205. ENDIF(CPACK_RPM_PACKAGE_DEBUG)
  206. ENDIF(RPMBUILD_EXECUTABLE)
  207. IF(NOT RPMBUILD_EXECUTABLE)
  208. MESSAGE(FATAL_ERROR "RPM package requires rpmbuild executable")
  209. ENDIF(NOT RPMBUILD_EXECUTABLE)
  210. # Display lsb_release output if DEBUG mode enable
  211. # This will help to diagnose problem with CPackRPM
  212. # because we will know on which kind of Linux we are
  213. IF(CPACK_RPM_PACKAGE_DEBUG)
  214. find_program(LSB_RELEASE_EXECUTABLE lsb_release)
  215. if(LSB_RELEASE_EXECUTABLE)
  216. execute_process(COMMAND ${LSB_RELEASE_EXECUTABLE} -a
  217. OUTPUT_VARIABLE _TMP_LSB_RELEASE_OUTPUT
  218. ERROR_QUIET
  219. OUTPUT_STRIP_TRAILING_WHITESPACE)
  220. string(REGEX REPLACE "\n" ", "
  221. LSB_RELEASE_OUTPUT
  222. ${_TMP_LSB_RELEASE_OUTPUT})
  223. else (LSB_RELEASE_EXECUTABLE)
  224. set(LSB_RELEASE_OUTPUT "lsb_release not installed/found!")
  225. endif(LSB_RELEASE_EXECUTABLE)
  226. MESSAGE("CPackRPM:Debug: LSB_RELEASE = ${LSB_RELEASE_OUTPUT}")
  227. ENDIF(CPACK_RPM_PACKAGE_DEBUG)
  228. # We may use RPM version in the future in order
  229. # to shut down warning about space in buildtree
  230. # some recent RPM version should support space in different places.
  231. # not checked [yet].
  232. IF(CPACK_TOPLEVEL_DIRECTORY MATCHES ".* .*")
  233. MESSAGE(FATAL_ERROR "${RPMBUILD_EXECUTABLE} can't handle paths with spaces, use a build directory without spaces for building RPMs.")
  234. ENDIF(CPACK_TOPLEVEL_DIRECTORY MATCHES ".* .*")
  235. # If rpmbuild is found
  236. # we try to discover alien since we may be on non RPM distro like Debian.
  237. # In this case we may try to to use more advanced features
  238. # like generating RPM directly from DEB using alien.
  239. # FIXME feature not finished (yet)
  240. FIND_PROGRAM(ALIEN_EXECUTABLE alien)
  241. IF(ALIEN_EXECUTABLE)
  242. MESSAGE(STATUS "alien found, we may be on a Debian based distro.")
  243. ENDIF(ALIEN_EXECUTABLE)
  244. # Are we packaging components ?
  245. IF(CPACK_RPM_PACKAGE_COMPONENT)
  246. SET(CPACK_RPM_PACKAGE_COMPONENT_PART_NAME "-${CPACK_RPM_PACKAGE_COMPONENT}")
  247. SET(CPACK_RPM_PACKAGE_COMPONENT_PART_PATH "/${CPACK_RPM_PACKAGE_COMPONENT}")
  248. SET(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}/${CPACK_RPM_PACKAGE_COMPONENT}")
  249. ELSE(CPACK_RPM_PACKAGE_COMPONENT)
  250. SET(CPACK_RPM_PACKAGE_COMPONENT_PART_NAME "")
  251. SET(CPACK_RPM_PACKAGE_COMPONENT_PART_PATH "")
  252. SET(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
  253. ENDIF(CPACK_RPM_PACKAGE_COMPONENT)
  254. #
  255. # Use user-defined RPM specific variables value
  256. # or generate reasonable default value from
  257. # CPACK_xxx generic values.
  258. # The variables comes from the needed (mandatory or not)
  259. # values found in the RPM specification file aka ".spec" file.
  260. # The variables which may/should be defined are:
  261. #
  262. # CPACK_RPM_PACKAGE_SUMMARY (mandatory)
  263. IF(NOT CPACK_RPM_PACKAGE_SUMMARY)
  264. # if neither var is defined lets use the name as summary
  265. IF(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY)
  266. STRING(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_RPM_PACKAGE_SUMMARY)
  267. ELSE(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY)
  268. SET(CPACK_RPM_PACKAGE_SUMMARY ${CPACK_PACKAGE_DESCRIPTION_SUMMARY})
  269. ENDIF(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY)
  270. ENDIF(NOT CPACK_RPM_PACKAGE_SUMMARY)
  271. # CPACK_RPM_PACKAGE_NAME (mandatory)
  272. IF(NOT CPACK_RPM_PACKAGE_NAME)
  273. STRING(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_RPM_PACKAGE_NAME)
  274. ENDIF(NOT CPACK_RPM_PACKAGE_NAME)
  275. # CPACK_RPM_PACKAGE_VERSION (mandatory)
  276. IF(NOT CPACK_RPM_PACKAGE_VERSION)
  277. IF(NOT CPACK_PACKAGE_VERSION)
  278. MESSAGE(FATAL_ERROR "RPM package requires a package version")
  279. ENDIF(NOT CPACK_PACKAGE_VERSION)
  280. SET(CPACK_RPM_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
  281. ENDIF(NOT CPACK_RPM_PACKAGE_VERSION)
  282. # Replace '-' in version with '_'
  283. # '-' character is an Illegal RPM version character
  284. # it is illegal because it is used to separate
  285. # RPM "Version" from RPM "Release"
  286. STRING(REPLACE "-" "_" CPACK_RPM_PACKAGE_VERSION ${CPACK_RPM_PACKAGE_VERSION})
  287. # CPACK_RPM_PACKAGE_ARCHITECTURE (optional)
  288. IF(CPACK_RPM_PACKAGE_ARCHITECTURE)
  289. SET(TMP_RPM_BUILDARCH "Buildarch: ${CPACK_RPM_PACKAGE_ARCHITECTURE}")
  290. IF(CPACK_RPM_PACKAGE_DEBUG)
  291. MESSAGE("CPackRPM:Debug: using user-specified build arch = ${CPACK_RPM_PACKAGE_ARCHITECTURE}")
  292. ENDIF(CPACK_RPM_PACKAGE_DEBUG)
  293. ELSE(CPACK_RPM_PACKAGE_ARCHITECTURE)
  294. SET(TMP_RPM_BUILDARCH "")
  295. ENDIF(CPACK_RPM_PACKAGE_ARCHITECTURE)
  296. # CPACK_RPM_PACKAGE_RELEASE
  297. # The RPM release is the numbering of the RPM package ITSELF
  298. # this is the version of the PACKAGING and NOT the version
  299. # of the CONTENT of the package.
  300. # You may well need to generate a new RPM package release
  301. # without changing the version of the packaged software.
  302. # This is the case when the packaging is buggy (not) the software :=)
  303. # If not set, 1 is a good candidate
  304. IF(NOT CPACK_RPM_PACKAGE_RELEASE)
  305. SET(CPACK_RPM_PACKAGE_RELEASE 1)
  306. ENDIF(NOT CPACK_RPM_PACKAGE_RELEASE)
  307. # CPACK_RPM_PACKAGE_LICENSE
  308. IF(NOT CPACK_RPM_PACKAGE_LICENSE)
  309. SET(CPACK_RPM_PACKAGE_LICENSE "unknown")
  310. ENDIF(NOT CPACK_RPM_PACKAGE_LICENSE)
  311. # CPACK_RPM_PACKAGE_GROUP
  312. IF(NOT CPACK_RPM_PACKAGE_GROUP)
  313. SET(CPACK_RPM_PACKAGE_GROUP "unknown")
  314. ENDIF(NOT CPACK_RPM_PACKAGE_GROUP)
  315. # CPACK_RPM_PACKAGE_VENDOR
  316. IF(NOT CPACK_RPM_PACKAGE_VENDOR)
  317. IF(CPACK_PACKAGE_VENDOR)
  318. SET(CPACK_RPM_PACKAGE_VENDOR "${CPACK_PACKAGE_VENDOR}")
  319. ELSE(CPACK_PACKAGE_VENDOR)
  320. SET(CPACK_RPM_PACKAGE_VENDOR "unknown")
  321. ENDIF(CPACK_PACKAGE_VENDOR)
  322. ENDIF(NOT CPACK_RPM_PACKAGE_VENDOR)
  323. # CPACK_RPM_PACKAGE_SOURCE
  324. # The name of the source tarball in case we generate a source RPM
  325. # CPACK_RPM_PACKAGE_DESCRIPTION
  326. # The variable content may be either
  327. # - explicitly given by the user or
  328. # - filled with the content of CPACK_PACKAGE_DESCRIPTION_FILE
  329. # if it is defined
  330. # - set to a default value
  331. #
  332. IF (NOT CPACK_RPM_PACKAGE_DESCRIPTION)
  333. IF (CPACK_PACKAGE_DESCRIPTION_FILE)
  334. FILE(READ ${CPACK_PACKAGE_DESCRIPTION_FILE} CPACK_RPM_PACKAGE_DESCRIPTION)
  335. ELSE (CPACK_PACKAGE_DESCRIPTION_FILE)
  336. SET(CPACK_RPM_PACKAGE_DESCRIPTION "no package description available")
  337. ENDIF (CPACK_PACKAGE_DESCRIPTION_FILE)
  338. ENDIF (NOT CPACK_RPM_PACKAGE_DESCRIPTION)
  339. # CPACK_RPM_COMPRESSION_TYPE
  340. #
  341. IF (CPACK_RPM_COMPRESSION_TYPE)
  342. IF(CPACK_RPM_PACKAGE_DEBUG)
  343. MESSAGE("CPackRPM:Debug: User Specified RPM compression type: ${CPACK_RPM_COMPRESSION_TYPE}")
  344. ENDIF(CPACK_RPM_PACKAGE_DEBUG)
  345. IF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "lzma")
  346. SET(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w9.lzdio")
  347. ENDIF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "lzma")
  348. IF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "xz")
  349. SET(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w7.xzdio")
  350. ENDIF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "xz")
  351. IF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "bzip2")
  352. SET(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w9.bzdio")
  353. ENDIF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "bzip2")
  354. IF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "gzip")
  355. SET(CPACK_RPM_COMPRESSION_TYPE_TMP "%define _binary_payload w9.gzdio")
  356. ENDIF(CPACK_RPM_COMPRESSION_TYPE STREQUAL "gzip")
  357. ELSE(CPACK_RPM_COMPRESSION_TYPE)
  358. SET(CPACK_RPM_COMPRESSION_TYPE_TMP "")
  359. ENDIF(CPACK_RPM_COMPRESSION_TYPE)
  360. if(CPACK_PACKAGE_RELOCATABLE)
  361. set(CPACK_RPM_PACKAGE_RELOCATABLE TRUE)
  362. endif(CPACK_PACKAGE_RELOCATABLE)
  363. if(CPACK_RPM_PACKAGE_RELOCATABLE)
  364. if(CPACK_RPM_PACKAGE_DEBUG)
  365. message("CPackRPM:Debug: Trying to build a relocatable package")
  366. endif(CPACK_RPM_PACKAGE_DEBUG)
  367. if(CPACK_SET_DESTDIR AND (NOT CPACK_SET_DESTDIR STREQUAL "I_ON"))
  368. message("CPackRPM:Warning: CPACK_SET_DESTDIR is set (=${CPACK_SET_DESTDIR}) while requesting a relocatable package (CPACK_RPM_PACKAGE_RELOCATABLE is set): this is not supported, the package won't be relocatable.")
  369. else(CPACK_SET_DESTDIR AND (NOT CPACK_SET_DESTDIR STREQUAL "I_ON"))
  370. set(CPACK_RPM_PACKAGE_PREFIX ${CPACK_PACKAGING_INSTALL_PREFIX})
  371. endif(CPACK_SET_DESTDIR AND (NOT CPACK_SET_DESTDIR STREQUAL "I_ON"))
  372. endif(CPACK_RPM_PACKAGE_RELOCATABLE)
  373. # Check if additional fields for RPM spec header are given
  374. # There may be some COMPONENT specific variables as well
  375. FOREACH(_RPM_SPEC_HEADER URL REQUIRES SUGGESTS PROVIDES OBSOLETES PREFIX CONFLICTS AUTOPROV AUTOREQ AUTOREQPROV)
  376. IF(CPACK_RPM_PACKAGE_DEBUG)
  377. message("CPackRPM:Debug: processing ${_RPM_SPEC_HEADER}")
  378. ENDIF(CPACK_RPM_PACKAGE_DEBUG)
  379. if(CPACK_RPM_PACKAGE_COMPONENT)
  380. if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${_RPM_SPEC_HEADER})
  381. IF(CPACK_RPM_PACKAGE_DEBUG)
  382. message("CPackRPM:Debug: using CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${_RPM_SPEC_HEADER}")
  383. ENDIF(CPACK_RPM_PACKAGE_DEBUG)
  384. set(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP ${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${_RPM_SPEC_HEADER}})
  385. else()
  386. IF(CPACK_RPM_PACKAGE_DEBUG)
  387. message("CPackRPM:Debug: CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PACKAGE_${_RPM_SPEC_HEADER} not defined")
  388. message("CPackRPM:Debug: using CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}")
  389. ENDIF(CPACK_RPM_PACKAGE_DEBUG)
  390. set(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP ${CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}})
  391. endif()
  392. else()
  393. IF(CPACK_RPM_PACKAGE_DEBUG)
  394. message("CPackRPM:Debug: using CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}")
  395. ENDIF(CPACK_RPM_PACKAGE_DEBUG)
  396. set(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP ${CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}})
  397. endif()
  398. IF(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP)
  399. STRING(LENGTH ${_RPM_SPEC_HEADER} _PACKAGE_HEADER_STRLENGTH)
  400. MATH(EXPR _PACKAGE_HEADER_STRLENGTH "${_PACKAGE_HEADER_STRLENGTH} - 1")
  401. STRING(SUBSTRING ${_RPM_SPEC_HEADER} 1 ${_PACKAGE_HEADER_STRLENGTH} _PACKAGE_HEADER_TAIL)
  402. STRING(TOLOWER "${_PACKAGE_HEADER_TAIL}" _PACKAGE_HEADER_TAIL)
  403. STRING(SUBSTRING ${_RPM_SPEC_HEADER} 0 1 _PACKAGE_HEADER_NAME)
  404. SET(_PACKAGE_HEADER_NAME "${_PACKAGE_HEADER_NAME}${_PACKAGE_HEADER_TAIL}")
  405. IF(CPACK_RPM_PACKAGE_DEBUG)
  406. MESSAGE("CPackRPM:Debug: User defined ${_PACKAGE_HEADER_NAME}:\n ${CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP}")
  407. ENDIF(CPACK_RPM_PACKAGE_DEBUG)
  408. SET(TMP_RPM_${_RPM_SPEC_HEADER} "${_PACKAGE_HEADER_NAME}: ${CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP}")
  409. ENDIF(CPACK_RPM_PACKAGE_${_RPM_SPEC_HEADER}_TMP)
  410. ENDFOREACH(_RPM_SPEC_HEADER)
  411. # CPACK_RPM_SPEC_INSTALL_POST
  412. # May be used to define a RPM post intallation script
  413. # for example setting it to "/bin/true" may prevent
  414. # rpmbuild from stripping binaries.
  415. IF(CPACK_RPM_SPEC_INSTALL_POST)
  416. IF(CPACK_RPM_PACKAGE_DEBUG)
  417. MESSAGE("CPackRPM:Debug: User defined CPACK_RPM_SPEC_INSTALL_POST = ${CPACK_RPM_SPEC_INSTALL_POST}")
  418. ENDIF(CPACK_RPM_PACKAGE_DEBUG)
  419. SET(TMP_RPM_SPEC_INSTALL_POST "%define __spec_install_post ${CPACK_RPM_SPEC_INSTALL_POST}")
  420. ENDIF(CPACK_RPM_SPEC_INSTALL_POST)
  421. # CPACK_RPM_POST_INSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_POST_INSTALL_SCRIPT_FILE)
  422. # CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_POST_UNINSTALL_SCRIPT_FILE)
  423. # May be used to embed a post (un)installation script in the spec file.
  424. # The refered script file(s) will be read and directly
  425. # put after the %post or %postun section
  426. if(CPACK_RPM_PACKAGE_COMPONENT)
  427. if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_POST_INSTALL_SCRIPT_FILE)
  428. set(CPACK_RPM_POST_INSTALL_READ_FILE ${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_POST_INSTALL_SCRIPT_FILE})
  429. else()
  430. set(CPACK_RPM_POST_INSTALL_READ_FILE ${CPACK_RPM_POST_INSTALL_SCRIPT_FILE})
  431. endif()
  432. if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_POST_UNINSTALL_SCRIPT_FILE)
  433. set(CPACK_RPM_POST_UNINSTALL_READ_FILE ${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_POST_UNINSTALL_SCRIPT_FILE})
  434. else(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_POST_UNINSTALL_SCRIPT_FILE)
  435. set(CPACK_RPM_POST_UNINSTALL_READ_FILE ${CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE})
  436. endif(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_POST_UNINSTALL_SCRIPT_FILE)
  437. else(CPACK_RPM_PACKAGE_COMPONENT)
  438. set(CPACK_RPM_POST_INSTALL_READ_FILE ${CPACK_RPM_POST_INSTALL_SCRIPT_FILE})
  439. set(CPACK_RPM_POST_UNINSTALL_READ_FILE ${CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE})
  440. endif(CPACK_RPM_PACKAGE_COMPONENT)
  441. # Handle post-install file if it has been specified
  442. if(CPACK_RPM_POST_INSTALL_READ_FILE)
  443. if(EXISTS ${CPACK_RPM_POST_INSTALL_READ_FILE})
  444. file(READ ${CPACK_RPM_POST_INSTALL_READ_FILE} CPACK_RPM_SPEC_POSTINSTALL)
  445. else(EXISTS ${CPACK_RPM_POST_INSTALL_READ_FILE})
  446. message("CPackRPM:Warning: CPACK_RPM_POST_INSTALL_SCRIPT_FILE <${CPACK_RPM_POST_INSTALL_READ_FILE}> does not exists - ignoring")
  447. endif(EXISTS ${CPACK_RPM_POST_INSTALL_READ_FILE})
  448. else(CPACK_RPM_POST_INSTALL_READ_FILE)
  449. # reset SPEC var value if no post install file has been specified
  450. # (either globally or component-wise)
  451. set(CPACK_RPM_SPEC_POSTINSTALL "")
  452. endif(CPACK_RPM_POST_INSTALL_READ_FILE)
  453. # Handle post-uninstall file if it has been specified
  454. if(CPACK_RPM_POST_UNINSTALL_READ_FILE)
  455. if(EXISTS ${CPACK_RPM_POST_UNINSTALL_READ_FILE})
  456. file(READ ${CPACK_RPM_POST_UNINSTALL_READ_FILE} CPACK_RPM_SPEC_POSTUNINSTALL)
  457. else(EXISTS ${CPACK_RPM_POST_UNINSTALL_READ_FILE})
  458. message("CPackRPM:Warning: CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE <${CPACK_RPM_POST_UNINSTALL_READ_FILE}> does not exists - ignoring")
  459. endif(EXISTS ${CPACK_RPM_POST_UNINSTALL_READ_FILE})
  460. else(CPACK_RPM_POST_UNINSTALL_READ_FILE)
  461. # reset SPEC var value if no post uninstall file has been specified
  462. # (either globally or component-wise)
  463. set(CPACK_RPM_SPEC_POSTUNINSTALL "")
  464. endif(CPACK_RPM_POST_UNINSTALL_READ_FILE)
  465. # CPACK_RPM_PRE_INSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_PRE_INSTALL_SCRIPT_FILE)
  466. # CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE (or CPACK_RPM_<COMPONENT>_PRE_UNINSTALL_SCRIPT_FILE)
  467. # May be used to embed a pre (un)installation script in the spec file.
  468. # The refered script file(s) will be read and directly
  469. # put after the %pre or %preun section
  470. if(CPACK_RPM_PACKAGE_COMPONENT)
  471. if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_INSTALL_SCRIPT_FILE)
  472. set(CPACK_RPM_PRE_INSTALL_READ_FILE ${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_INSTALL_SCRIPT_FILE})
  473. else(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_INSTALL_SCRIPT_FILE)
  474. set(CPACK_RPM_PRE_INSTALL_READ_FILE ${CPACK_RPM_PRE_INSTALL_SCRIPT_FILE})
  475. endif(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_INSTALL_SCRIPT_FILE)
  476. if(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_UNINSTALL_SCRIPT_FILE)
  477. set(CPACK_RPM_PRE_UNINSTALL_READ_FILE ${CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_UNINSTALL_SCRIPT_FILE})
  478. else(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_UNINSTALL_SCRIPT_FILE)
  479. set(CPACK_RPM_PRE_UNINSTALL_READ_FILE ${CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE})
  480. endif(CPACK_RPM_${CPACK_RPM_PACKAGE_COMPONENT}_PRE_UNINSTALL_SCRIPT_FILE)
  481. else(CPACK_RPM_PACKAGE_COMPONENT)
  482. set(CPACK_RPM_PRE_INSTALL_READ_FILE ${CPACK_RPM_PRE_INSTALL_SCRIPT_FILE})
  483. set(CPACK_RPM_PRE_UNINSTALL_READ_FILE ${CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE})
  484. endif(CPACK_RPM_PACKAGE_COMPONENT)
  485. # Handle pre-install file if it has been specified
  486. if(CPACK_RPM_PRE_INSTALL_READ_FILE)
  487. if(EXISTS ${CPACK_RPM_PRE_INSTALL_READ_FILE})
  488. file(READ ${CPACK_RPM_PRE_INSTALL_READ_FILE} CPACK_RPM_SPEC_PREINSTALL)
  489. else(EXISTS ${CPACK_RPM_PRE_INSTALL_READ_FILE})
  490. message("CPackRPM:Warning: CPACK_RPM_PRE_INSTALL_SCRIPT_FILE <${CPACK_RPM_PRE_INSTALL_READ_FILE}> does not exists - ignoring")
  491. endif(EXISTS ${CPACK_RPM_PRE_INSTALL_READ_FILE})
  492. else(CPACK_RPM_PRE_INSTALL_READ_FILE)
  493. # reset SPEC var value if no pre-install file has been specified
  494. # (either globally or component-wise)
  495. set(CPACK_RPM_SPEC_PREINSTALL "")
  496. endif(CPACK_RPM_PRE_INSTALL_READ_FILE)
  497. # Handle pre-uninstall file if it has been specified
  498. if(CPACK_RPM_PRE_UNINSTALL_READ_FILE)
  499. if(EXISTS ${CPACK_RPM_PRE_UNINSTALL_READ_FILE})
  500. file(READ ${CPACK_RPM_PRE_UNINSTALL_READ_FILE} CPACK_RPM_SPEC_PREUNINSTALL)
  501. else(EXISTS ${CPACK_RPM_PRE_UNINSTALL_READ_FILE})
  502. message("CPackRPM:Warning: CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE <${CPACK_RPM_PRE_UNINSTALL_READ_FILE}> does not exists - ignoring")
  503. endif(EXISTS ${CPACK_RPM_PRE_UNINSTALL_READ_FILE})
  504. else(CPACK_RPM_PRE_UNINSTALL_READ_FILE)
  505. # reset SPEC var value if no pre-uninstall file has been specified
  506. # (either globally or component-wise)
  507. set(CPACK_RPM_SPEC_PREUNINSTALL "")
  508. endif(CPACK_RPM_PRE_UNINSTALL_READ_FILE)
  509. # CPACK_RPM_CHANGELOG_FILE
  510. # May be used to embed a changelog in the spec file.
  511. # The refered file will be read and directly put after the %changelog section
  512. if(CPACK_RPM_CHANGELOG_FILE)
  513. if(EXISTS ${CPACK_RPM_CHANGELOG_FILE})
  514. file(READ ${CPACK_RPM_CHANGELOG_FILE} CPACK_RPM_SPEC_CHANGELOG)
  515. else(EXISTS ${CPACK_RPM_CHANGELOG_FILE})
  516. message(SEND_ERROR "CPackRPM:Warning: CPACK_RPM_CHANGELOG_FILE <${CPACK_RPM_CHANGELOG_FILE}> does not exists - ignoring")
  517. endif(EXISTS ${CPACK_RPM_CHANGELOG_FILE})
  518. else(CPACK_RPM_CHANGELOG_FILE)
  519. set(CPACK_RPM_SPEC_CHANGELOG "* Sun Jul 4 2010 Erk <[email protected]>\n Generated by CPack RPM (no Changelog file were provided)")
  520. endif(CPACK_RPM_CHANGELOG_FILE)
  521. # CPACK_RPM_SPEC_MORE_DEFINE
  522. # This is a generated spec rpm file spaceholder
  523. IF(CPACK_RPM_SPEC_MORE_DEFINE)
  524. IF(CPACK_RPM_PACKAGE_DEBUG)
  525. MESSAGE("CPackRPM:Debug: User defined more define spec line specified:\n ${CPACK_RPM_SPEC_MORE_DEFINE}")
  526. ENDIF(CPACK_RPM_PACKAGE_DEBUG)
  527. ENDIF(CPACK_RPM_SPEC_MORE_DEFINE)
  528. # Now we may create the RPM build tree structure
  529. SET(CPACK_RPM_ROOTDIR "${CPACK_TOPLEVEL_DIRECTORY}")
  530. MESSAGE(STATUS "CPackRPM:Debug: Using CPACK_RPM_ROOTDIR=${CPACK_RPM_ROOTDIR}")
  531. # Prepare RPM build tree
  532. FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR})
  533. FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/tmp)
  534. FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/BUILD)
  535. FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/RPMS)
  536. FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/SOURCES)
  537. FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/SPECS)
  538. FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/SRPMS)
  539. #SET(CPACK_RPM_FILE_NAME "${CPACK_RPM_PACKAGE_NAME}-${CPACK_RPM_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}-${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm")
  540. SET(CPACK_RPM_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}")
  541. # it seems rpmbuild can't handle spaces in the path
  542. # neither escaping (as below) nor putting quotes around the path seem to help
  543. #STRING(REGEX REPLACE " " "\\\\ " CPACK_RPM_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}")
  544. SET(CPACK_RPM_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}")
  545. # Use files tree to construct files command (spec file)
  546. # We should not forget to include symlinks (thus -o -type l)
  547. # We should include directory as well (thus -type d)
  548. # but not the main local dir "." (thus -a -not -name ".")
  549. # We must remove the './' due to the local search and escape the
  550. # file name by enclosing it between double quotes (thus the sed)
  551. # Then we must authorize any man pages extension (adding * at the end)
  552. # because rpmbuild may automatically compress those files
  553. EXECUTE_PROCESS(COMMAND find . -type f -o -type l -o (-type d -a -not -name ".")
  554. COMMAND sed s:.*/man.*/.*:&*:
  555. COMMAND sed s/\\.\\\(.*\\\)/\"\\1\"/
  556. WORKING_DIRECTORY "${WDIR}"
  557. OUTPUT_VARIABLE CPACK_RPM_INSTALL_FILES)
  558. # In component case, replace CPACK_ABSOLUTE_DESTINATION_FILES
  559. # with the content of CPACK_ABSOLUTE_DESTINATION_FILES_<COMPONENT>
  560. # This must be done BEFORE the CPACK_ABSOLUTE_DESTINATION_FILES handling
  561. if(CPACK_RPM_PACKAGE_COMPONENT)
  562. if(CPACK_ABSOLUTE_DESTINATION_FILES)
  563. set(COMPONENT_FILES_TAG "CPACK_ABSOLUTE_DESTINATION_FILES_${CPACK_RPM_PACKAGE_COMPONENT}")
  564. set(CPACK_ABSOLUTE_DESTINATION_FILES "${${COMPONENT_FILES_TAG}}")
  565. if(CPACK_RPM_PACKAGE_DEBUG)
  566. message("CPackRPM:Debug: Handling Absolute Destination Files ${CPACK_ABSOLUTE_DESTINATION_FILES}")
  567. message("CPackRPM:Debug: in component = ${CPACK_RPM_PACKAGE_COMPONENT}")
  568. endif(CPACK_RPM_PACKAGE_DEBUG)
  569. endif()
  570. endif()
  571. if (CPACK_ABSOLUTE_DESTINATION_FILES)
  572. IF(CPACK_RPM_PACKAGE_DEBUG)
  573. message("CPackRPM:Debug: Handling Absolute Destination Files: ${CPACK_ABSOLUTE_DESTINATION_FILES}")
  574. ENDIF(CPACK_RPM_PACKAGE_DEBUG)
  575. # Remove trailing space
  576. string(STRIP "${CPACK_RPM_INSTALL_FILES}" CPACK_RPM_INSTALL_FILES_LIST)
  577. # Transform endline separated - string into CMake List
  578. string(REPLACE "\n" ";" CPACK_RPM_INSTALL_FILES_LIST "${CPACK_RPM_INSTALL_FILES_LIST}")
  579. # Remove unecessary quotes
  580. string(REPLACE "\"" "" CPACK_RPM_INSTALL_FILES_LIST "${CPACK_RPM_INSTALL_FILES_LIST}")
  581. # Remove ABSOLUTE install file from INSTALL FILE LIST
  582. list(REMOVE_ITEM CPACK_RPM_INSTALL_FILES_LIST ${CPACK_ABSOLUTE_DESTINATION_FILES})
  583. # Rebuild INSTALL_FILES
  584. set(CPACK_RPM_INSTALL_FILES "")
  585. foreach(F IN LISTS CPACK_RPM_INSTALL_FILES_LIST)
  586. set(CPACK_RPM_INSTALL_FILES "${CPACK_RPM_INSTALL_FILES}\"${F}\"\n")
  587. endforeach(F)
  588. # Build ABSOLUTE_INSTALL_FILES
  589. set(CPACK_RPM_ABSOLUTE_INSTALL_FILES "")
  590. foreach(F IN LISTS CPACK_ABSOLUTE_DESTINATION_FILES)
  591. set(CPACK_RPM_ABSOLUTE_INSTALL_FILES "${CPACK_RPM_ABSOLUTE_INSTALL_FILES}%config \"${F}\"\n")
  592. endforeach(F)
  593. IF(CPACK_RPM_PACKAGE_DEBUG)
  594. message("CPackRPM:Debug: CPACK_RPM_ABSOLUTE_INSTALL_FILES=${CPACK_RPM_ABSOLUTE_INSTALL_FILES}")
  595. message("CPackRPM:Debug: CPACK_RPM_INSTALL_FILES=${CPACK_RPM_INSTALL_FILES}")
  596. ENDIF(CPACK_RPM_PACKAGE_DEBUG)
  597. endif(CPACK_ABSOLUTE_DESTINATION_FILES)
  598. # The name of the final spec file to be used by rpmbuild
  599. SET(CPACK_RPM_BINARY_SPECFILE "${CPACK_RPM_ROOTDIR}/SPECS/${CPACK_RPM_PACKAGE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_NAME}.spec")
  600. # Print out some debug information if we were asked for that
  601. IF(CPACK_RPM_PACKAGE_DEBUG)
  602. MESSAGE("CPackRPM:Debug: CPACK_TOPLEVEL_DIRECTORY = ${CPACK_TOPLEVEL_DIRECTORY}")
  603. MESSAGE("CPackRPM:Debug: CPACK_TOPLEVEL_TAG = ${CPACK_TOPLEVEL_TAG}")
  604. MESSAGE("CPackRPM:Debug: CPACK_TEMPORARY_DIRECTORY = ${CPACK_TEMPORARY_DIRECTORY}")
  605. MESSAGE("CPackRPM:Debug: CPACK_OUTPUT_FILE_NAME = ${CPACK_OUTPUT_FILE_NAME}")
  606. MESSAGE("CPackRPM:Debug: CPACK_OUTPUT_FILE_PATH = ${CPACK_OUTPUT_FILE_PATH}")
  607. MESSAGE("CPackRPM:Debug: CPACK_PACKAGE_FILE_NAME = ${CPACK_PACKAGE_FILE_NAME}")
  608. MESSAGE("CPackRPM:Debug: CPACK_RPM_BINARY_SPECFILE = ${CPACK_RPM_BINARY_SPECFILE}")
  609. MESSAGE("CPackRPM:Debug: CPACK_PACKAGE_INSTALL_DIRECTORY = ${CPACK_PACKAGE_INSTALL_DIRECTORY}")
  610. MESSAGE("CPackRPM:Debug: CPACK_TEMPORARY_PACKAGE_FILE_NAME = ${CPACK_TEMPORARY_PACKAGE_FILE_NAME}")
  611. ENDIF(CPACK_RPM_PACKAGE_DEBUG)
  612. # USER generated spec file handling.
  613. # We should generate a spec file template:
  614. # - either because the user asked for it : CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE
  615. # - or the user did not provide one : NOT CPACK_RPM_USER_BINARY_SPECFILE
  616. #
  617. IF(CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE OR NOT CPACK_RPM_USER_BINARY_SPECFILE)
  618. FILE(WRITE ${CPACK_RPM_BINARY_SPECFILE}.in
  619. "# -*- rpm-spec -*-
  620. BuildRoot: \@CPACK_RPM_DIRECTORY\@/\@CPACK_PACKAGE_FILE_NAME\@\@CPACK_RPM_PACKAGE_COMPONENT_PART_PATH\@
  621. Summary: \@CPACK_RPM_PACKAGE_SUMMARY\@
  622. Name: \@CPACK_RPM_PACKAGE_NAME\@\@CPACK_RPM_PACKAGE_COMPONENT_PART_NAME\@
  623. Version: \@CPACK_RPM_PACKAGE_VERSION\@
  624. Release: \@CPACK_RPM_PACKAGE_RELEASE\@
  625. License: \@CPACK_RPM_PACKAGE_LICENSE\@
  626. Group: \@CPACK_RPM_PACKAGE_GROUP\@
  627. Vendor: \@CPACK_RPM_PACKAGE_VENDOR\@
  628. \@TMP_RPM_URL\@
  629. \@TMP_RPM_REQUIRES\@
  630. \@TMP_RPM_PROVIDES\@
  631. \@TMP_RPM_OBSOLETES\@
  632. \@TMP_RPM_CONFLICTS\@
  633. \@TMP_RPM_AUTOPROV\@
  634. \@TMP_RPM_AUTOREQ\@
  635. \@TMP_RPM_AUTOREQPROV\@
  636. \@TMP_RPM_BUILDARCH\@
  637. \@TMP_RPM_PREFIX\@
  638. %define _rpmdir \@CPACK_RPM_DIRECTORY\@
  639. %define _rpmfilename \@CPACK_RPM_FILE_NAME\@
  640. %define _unpackaged_files_terminate_build 0
  641. %define _topdir \@CPACK_RPM_DIRECTORY\@
  642. \@TMP_RPM_SPEC_INSTALL_POST\@
  643. \@CPACK_RPM_SPEC_MORE_DEFINE\@
  644. \@CPACK_RPM_COMPRESSION_TYPE_TMP\@
  645. %description
  646. \@CPACK_RPM_PACKAGE_DESCRIPTION\@
  647. # This is a shortcutted spec file generated by CMake RPM generator
  648. # we skip _install step because CPack does that for us.
  649. # We do only save CPack installed tree in _prepr
  650. # and then restore it in build.
  651. %prep
  652. mv $RPM_BUILD_ROOT \"\@CPACK_TOPLEVEL_DIRECTORY\@/tmpBBroot\"
  653. #p build
  654. %install
  655. if [ -e $RPM_BUILD_ROOT ];
  656. then
  657. rm -rf $RPM_BUILD_ROOT
  658. fi
  659. mv \"\@CPACK_TOPLEVEL_DIRECTORY\@/tmpBBroot\" $RPM_BUILD_ROOT
  660. %clean
  661. %post
  662. \@CPACK_RPM_SPEC_POSTINSTALL\@
  663. %postun
  664. \@CPACK_RPM_SPEC_POSTUNINSTALL\@
  665. %pre
  666. \@CPACK_RPM_SPEC_PREINSTALL\@
  667. %preun
  668. \@CPACK_RPM_SPEC_PREUNINSTALL\@
  669. %files
  670. %defattr(-,root,root,-)
  671. ${CPACK_RPM_INSTALL_FILES}
  672. ${CPACK_RPM_ABSOLUTE_INSTALL_FILES}
  673. %changelog
  674. \@CPACK_RPM_SPEC_CHANGELOG\@
  675. ")
  676. # Stop here if we were asked to only generate a template USER spec file
  677. # The generated file may then be used as a template by user who wants
  678. # to customize their own spec file.
  679. IF(CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE)
  680. MESSAGE(FATAL_ERROR "CPackRPM: STOP here Generated USER binary spec file templare is: ${CPACK_RPM_BINARY_SPECFILE}.in")
  681. ENDIF(CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE)
  682. ENDIF(CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE OR NOT CPACK_RPM_USER_BINARY_SPECFILE)
  683. # After that we may either use a user provided spec file
  684. # or generate one using appropriate variables value.
  685. IF(CPACK_RPM_USER_BINARY_SPECFILE)
  686. # User may have specified SPECFILE just use it
  687. MESSAGE("CPackRPM: Will use USER specified spec file: ${CPACK_RPM_USER_BINARY_SPECFILE}")
  688. # The user provided file is processed for @var replacement
  689. CONFIGURE_FILE(${CPACK_RPM_USER_BINARY_SPECFILE} ${CPACK_RPM_BINARY_SPECFILE} @ONLY)
  690. ELSE(CPACK_RPM_USER_BINARY_SPECFILE)
  691. # No User specified spec file, will use the generated spec file
  692. MESSAGE("CPackRPM: Will use GENERATED spec file: ${CPACK_RPM_BINARY_SPECFILE}")
  693. # Note the just created file is processed for @var replacement
  694. CONFIGURE_FILE(${CPACK_RPM_BINARY_SPECFILE}.in ${CPACK_RPM_BINARY_SPECFILE} @ONLY)
  695. ENDIF(CPACK_RPM_USER_BINARY_SPECFILE)
  696. IF(RPMBUILD_EXECUTABLE)
  697. # Now call rpmbuild using the SPECFILE
  698. EXECUTE_PROCESS(
  699. COMMAND "${RPMBUILD_EXECUTABLE}" -bb
  700. --buildroot "${CPACK_RPM_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}"
  701. "${CPACK_RPM_BINARY_SPECFILE}"
  702. WORKING_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_RPM_PACKAGE_COMPONENT_PART_PATH}"
  703. RESULT_VARIABLE CPACK_RPMBUILD_EXEC_RESULT
  704. ERROR_FILE "${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_COMPONENT_PART_NAME}.err"
  705. OUTPUT_FILE "${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_COMPONENT_PART_NAME}.out")
  706. IF(CPACK_RPM_PACKAGE_DEBUG OR CPACK_RPMBUILD_EXEC_RESULT)
  707. FILE(READ ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_COMPONENT_PART_NAME}.err RPMBUILDERR)
  708. FILE(READ ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_COMPONENT_PART_NAME}.out RPMBUILDOUT)
  709. MESSAGE("CPackRPM:Debug: You may consult rpmbuild logs in: ")
  710. MESSAGE("CPackRPM:Debug: - ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_COMPONENT_PART_NAME}.err")
  711. MESSAGE("CPackRPM:Debug: *** ${RPMBUILDERR} ***")
  712. MESSAGE("CPackRPM:Debug: - ${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild${CPACK_RPM_PACKAGE_COMPONENT_PART_NAME}.out")
  713. MESSAGE("CPackRPM:Debug: *** ${RPMBUILDERR} ***")
  714. ENDIF(CPACK_RPM_PACKAGE_DEBUG OR CPACK_RPMBUILD_EXEC_RESULT)
  715. ELSE(RPMBUILD_EXECUTABLE)
  716. IF(ALIEN_EXECUTABLE)
  717. MESSAGE(FATAL_ERROR "RPM packaging through alien not done (yet)")
  718. ENDIF(ALIEN_EXECUTABLE)
  719. ENDIF(RPMBUILD_EXECUTABLE)