You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

UseRPMTools.cmake 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. #
  2. # - Find tools needed for building RPM Packages
  3. # on Linux systems and defines macro that helps to
  4. # build source or binary RPM, the MACRO assumes
  5. # CMake 2.4.x which includes CPack support.
  6. # CPack is used to build tar.gz source tarball
  7. # which may be used by a custom user-made spec file.
  8. #
  9. # - Define RPMTools_ADD_RPM_TARGETS which defines
  10. # two (top-level) CUSTOM targets for building
  11. # source and binary RPMs
  12. #
  13. # Those CMake macros are provided by the TSP Developer Team
  14. # https://savannah.nongnu.org/projects/tsp
  15. #
  16. IF (WIN32)
  17. MESSAGE(STATUS "RPM tools not available on Win32 systems")
  18. ENDIF(WIN32)
  19. IF (UNIX)
  20. # Look for RPM builder executable
  21. FIND_PROGRAM(RPMTools_RPMBUILD_EXECUTABLE
  22. NAMES rpmbuild
  23. PATHS "/usr/bin;/usr/lib/rpm"
  24. PATH_SUFFIXES bin
  25. DOC "The RPM builder tool")
  26. IF (RPMTools_RPMBUILD_EXECUTABLE)
  27. MESSAGE(STATUS "Looking for RPMTools... - found rpmuild is ${RPMTools_RPMBUILD_EXECUTABLE}")
  28. SET(RPMTools_RPMBUILD_FOUND "YES")
  29. GET_FILENAME_COMPONENT(RPMTools_BINARY_DIRS ${RPMTools_RPMBUILD_EXECUTABLE} PATH)
  30. ELSE (RPMTools_RPMBUILD_EXECUTABLE)
  31. SET(RPMTools_RPMBUILD_FOUND "NO")
  32. MESSAGE(STATUS "Looking for RPMTools... - rpmbuild NOT FOUND")
  33. ENDIF (RPMTools_RPMBUILD_EXECUTABLE)
  34. # Detect if CPack was included or not
  35. IF (NOT DEFINED "CPACK_PACKAGE_NAME")
  36. MESSAGE(FATAL_ERROR "CPack was not included, you should include CPack before Using RPMTools")
  37. ENDIF (NOT DEFINED "CPACK_PACKAGE_NAME")
  38. IF (RPMTools_RPMBUILD_FOUND)
  39. SET(RPMTools_FOUND TRUE)
  40. #
  41. # - first arg (ARGV0) is RPM name
  42. # - second arg (ARGV1) is the RPM spec file path [optional]
  43. # - third arg (ARGV2) is the RPM ROOT DIRECTORY used to build RPMs [optional]
  44. #
  45. MACRO(RPMTools_ADD_RPM_TARGETS RPMNAME)
  46. #
  47. # If no spec file is provided create a minimal one
  48. #
  49. IF ("${ARGV1}" STREQUAL "")
  50. SET(SPECFILE_PATH "${CMAKE_BINARY_DIR}/${RPMNAME}.spec")
  51. ELSE ("${ARGV1}" STREQUAL "")
  52. SET(SPECFILE_PATH "${ARGV1}")
  53. ENDIF("${ARGV1}" STREQUAL "")
  54. # Verify whether if RPM_ROOTDIR was provided or not
  55. IF("${ARGV2}" STREQUAL "")
  56. SET(RPM_ROOTDIR ${CMAKE_BINARY_DIR}/RPM)
  57. ELSE ("${ARGV2}" STREQUAL "")
  58. SET(RPM_ROOTDIR "${ARGV2}")
  59. ENDIF("${ARGV2}" STREQUAL "")
  60. MESSAGE(STATUS "RPMTools:: Using RPM_ROOTDIR=${RPM_ROOTDIR}")
  61. # Prepare RPM build tree
  62. FILE(MAKE_DIRECTORY ${RPM_ROOTDIR})
  63. FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/tmp)
  64. FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/BUILD)
  65. FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/RPMS)
  66. FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/SOURCES)
  67. FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/SPECS)
  68. FILE(MAKE_DIRECTORY ${RPM_ROOTDIR}/SRPMS)
  69. #
  70. # We check whether if the provided spec file is
  71. # to be configure or not.
  72. #
  73. IF ("${ARGV1}" STREQUAL "")
  74. SET(SPECFILE_PATH "${RPM_ROOTDIR}/SPECS/${RPMNAME}.spec")
  75. SET(SPECFILE_NAME "${RPMNAME}.spec")
  76. MESSAGE(STATUS "No Spec file given generate a minimal one --> ${RPM_ROOTDIR}/SPECS/${RPMNAME}.spec")
  77. FILE(WRITE ${RPM_ROOTDIR}/SPECS/${RPMNAME}.spec
  78. "# -*- rpm-spec -*-
  79. Summary: ${RPMNAME}
  80. Name: ${RPMNAME}
  81. Version: ${PACKAGE_VERSION}
  82. Release: 1
  83. License: Unknown
  84. Group: Unknown
  85. Source: ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz
  86. BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
  87. BuildRequires: cmake
  88. %define prefix /opt/${RPMNAME}-%{version}
  89. %define rpmprefix $RPM_BUILD_ROOT%{prefix}
  90. %define srcdirname %{name}-%{version}-Source
  91. %description
  92. ${RPMNAME} : No description for now
  93. %prep
  94. %setup -q -n %{srcdirname}
  95. %build
  96. cd ..
  97. rm -rf build_tree
  98. mkdir build_tree
  99. cd build_tree
  100. cmake -DCMAKE_INSTALL_PREFIX=%{rpmprefix} ../%{srcdirname}
  101. make
  102. %install
  103. cd ../build_tree
  104. make install
  105. %clean
  106. rm -rf %{srcdirname}
  107. rm -rf build_tree
  108. %files
  109. %defattr(-,root,root,-)
  110. %dir %{prefix}
  111. %{prefix}/*
  112. %changelog
  113. * Wed Feb 28 2007 Erk <eric.noulard@gmail.com>
  114. Generated by CMake UseRPMTools macros"
  115. )
  116. ELSE ("${ARGV1}" STREQUAL "")
  117. SET(SPECFILE_PATH "${ARGV1}")
  118. GET_FILENAME_COMPONENT(SPECFILE_EXT ${SPECFILE_PATH} EXT)
  119. IF ("${SPECFILE_EXT}" STREQUAL ".spec")
  120. # This is a 'ready-to-use' spec file which does not need to be CONFIGURED
  121. GET_FILENAME_COMPONENT(SPECFILE_NAME ${SPECFILE_PATH} NAME)
  122. MESSAGE(STATUS "Simple copy spec file <${SPECFILE_PATH}> --> <${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}>")
  123. CONFIGURE_FILE(
  124. ${SPECFILE_PATH}
  125. ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}
  126. COPYONLY)
  127. ELSE ("${SPECFILE_EXT}" STREQUAL ".spec")
  128. # This is a to-be-configured spec file
  129. GET_FILENAME_COMPONENT(SPECFILE_NAME ${SPECFILE_PATH} NAME_WE)
  130. SET(SPECFILE_NAME "${SPECFILE_NAME}.spec")
  131. MESSAGE(STATUS "Configuring spec file <${SPECFILE_PATH}> --> <${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}>")
  132. CONFIGURE_FILE(
  133. ${SPECFILE_PATH}
  134. ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}
  135. @ONLY)
  136. ENDIF ("${SPECFILE_EXT}" STREQUAL ".spec")
  137. ENDIF("${ARGV1}" STREQUAL "")
  138. ADD_CUSTOM_TARGET(${RPMNAME}_srpm
  139. COMMAND cpack -G TGZ --config CPackSourceConfig.cmake
  140. COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz ${RPM_ROOTDIR}/SOURCES
  141. COMMAND ${RPMTools_RPMBUILD_EXECUTABLE} -bs --define=\"_topdir ${RPM_ROOTDIR}\" --buildroot=${RPM_ROOTDIR}/tmp ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}
  142. )
  143. ADD_CUSTOM_TARGET(${RPMNAME}_rpm
  144. COMMAND cpack -G TGZ --config CPackSourceConfig.cmake
  145. COMMAND ${CMAKE_COMMAND} -E copy ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz ${RPM_ROOTDIR}/SOURCES
  146. COMMAND ${RPMTools_RPMBUILD_EXECUTABLE} -bb --define=\"_topdir ${RPM_ROOTDIR}\" --buildroot=${RPM_ROOTDIR}/tmp ${RPM_ROOTDIR}/SPECS/${SPECFILE_NAME}
  147. )
  148. ENDMACRO(RPMTools_ADD_RPM_TARGETS)
  149. ELSE (RPMTools_RPMBUILD_FOUND)
  150. SET(RPMTools FALSE)
  151. ENDIF (RPMTools_RPMBUILD_FOUND)
  152. ENDIF (UNIX)