| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- # CPack script for creating RPM package
- # Author: Eric Noulard with the help of Alexander Neundorf.
- # All variables used by CPackRPM begins with CPACK_RPM_ prefix
- #
- # Here comes the list of used variables:
- #
- IF(CMAKE_BINARY_DIR)
- MESSAGE(FATAL_ERROR "CPackRPM.cmake may only be used by CPack internally.")
- ENDIF(CMAKE_BINARY_DIR)
- IF(NOT UNIX)
- MESSAGE(FATAL_ERROR "CPackRPM.cmake may only be used under UNIX.")
- ENDIF(NOT UNIX)
- # rpmbuild is the basic command for building RPM package
- # it may be a simple (symbolic) link to rpmb command.
- FIND_PROGRAM(RPMBUILD_EXECUTABLE rpmbuild)
- IF(NOT RPMBUILD_EXECUTABLE)
- MESSAGE(FATAL_ERROR "RPM package requires rpmbuild executable")
- ENDIF(NOT RPMBUILD_EXECUTABLE)
- IF(CPACK_TOPLEVEL_DIRECTORY MATCHES ".* .*")
- MESSAGE(FATAL_ERROR "${RPMBUILD_EXECUTABLE} can't handle paths with spaces, use a build directory without spaces for building RPMs.")
- ENDIF(CPACK_TOPLEVEL_DIRECTORY MATCHES ".* .*")
- # If rpmbuild is found
- # we try to discover alien since we may be on non RPM distro like Debian.
- # In this case we may try to to use more advanced features
- # like generating RPM directly from DEB using alien.
- # FIXME feature not finished (yet)
- FIND_PROGRAM(ALIEN_EXECUTABLE alien)
- IF(ALIEN_EXECUTABLE)
- MESSAGE(STATUS "alien found, we may be on a Debian based distro.")
- ENDIF(ALIEN_EXECUTABLE)
- #
- # Use user-defined RPM specific variables value
- # or generate reasonable default value from
- # CPACK_xxx generic values.
- # The variables comes from the needed (mandatory or not)
- # values found in the RPM specification file aka ".spec" file.
- # The variables which may/should be defined are:
- #
- # CPACK_RPM_PACKAGE_SUMMARY (mandatory)
- IF(NOT CPACK_RPM_PACKAGE_SUMMARY)
- # if neither var is defined lets use the name as summary
- IF(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY)
- STRING(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_RPM_PACKAGE_SUMMARY)
- ELSE(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY)
- SET(CPACK_RPM_PACKAGE_SUMMARY ${CPACK_PACKAGE_DESCRIPTION_SUMMARY})
- ENDIF(NOT CPACK_PACKAGE_DESCRIPTION_SUMMARY)
- ENDIF(NOT CPACK_RPM_PACKAGE_SUMMARY)
-
- # CPACK_RPM_PACKAGE_NAME (mandatory)
- IF(NOT CPACK_RPM_PACKAGE_NAME)
- STRING(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_RPM_PACKAGE_NAME)
- ENDIF(NOT CPACK_RPM_PACKAGE_NAME)
- # CPACK_RPM_PACKAGE_VERSION (mandatory)
- IF(NOT CPACK_RPM_PACKAGE_VERSION)
- IF(NOT CPACK_PACKAGE_VERSION)
- MESSAGE(FATAL_ERROR "RPM package requires a package version")
- ENDIF(NOT CPACK_PACKAGE_VERSION)
- SET(CPACK_RPM_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
- ENDIF(NOT CPACK_RPM_PACKAGE_VERSION)
- # CPACK_RPM_PACKAGE_ARCHITECTURE (optional)
- IF(NOT CPACK_RPM_PACKAGE_ARCHITECTURE)
- # FIXME This should be obtained through 'arch' command
- # but is it --really necessary-- ?
- SET(CPACK_RPM_PACKAGE_ARCHITECTURE i386)
- ENDIF(NOT CPACK_RPM_PACKAGE_ARCHITECTURE)
- # CPACK_RPM_PACKAGE_RELEASE
- # The RPM release is the numbering of the RPM package ITSELF
- # this is the version of the PACKAGING and NOT the version
- # of the CONTENT of the package.
- # You may well need to generate a new RPM package release
- # without changing the version of the packaged software.
- # This is the case when the packaging is buggy (not) the software :=)
- # If not set, 1 is a good candidate
- IF(NOT CPACK_RPM_PACKAGE_RELEASE)
- SET(CPACK_RPM_PACKAGE_RELEASE 1)
- ENDIF(NOT CPACK_RPM_PACKAGE_RELEASE)
- # CPACK_RPM_PACKAGE_LICENSE
- IF(NOT CPACK_RPM_PACKAGE_LICENSE)
- SET(CPACK_RPM_PACKAGE_LICENSE "unknown")
- ENDIF(NOT CPACK_RPM_PACKAGE_LICENSE)
- # CPACK_RPM_PACKAGE_GROUP
- IF(NOT CPACK_RPM_PACKAGE_GROUP)
- SET(CPACK_RPM_PACKAGE_GROUP "unknown")
- ENDIF(NOT CPACK_RPM_PACKAGE_GROUP)
- # CPACK_RPM_PACKAGE_VENDOR
- IF(NOT CPACK_RPM_PACKAGE_VENDOR)
- IF(CPACK_PACKAGE_VENDOR)
- SET(CPACK_RPM_PACKAGE_VENDOR "${CPACK_PACKAGE_VENDOR}")
- ELSE(CPACK_PACKAGE_VENDOR)
- SET(CPACK_RPM_PACKAGE_VENDOR "unknown")
- ENDIF(CPACK_PACKAGE_VENDOR)
- ENDIF(NOT CPACK_RPM_PACKAGE_VENDOR)
- # CPACK_RPM_PACKAGE_SOURCE
- # The name of the source tarball in case we generate
- # a source RPM
- # CPACK_RPM_PACKAGE_DESCRIPTION
- # The variable content may be either
- # - explicitely given by tthe user or
- # - filled with the content of CPACK_PACKAGE_DESCRIPTION_FILE
- # if it is defined
- # - set to a default value
- #
- IF (NOT CPACK_RPM_PACKAGE_DESCRIPTION)
- IF (CPACK_PACKAGE_DESCRIPTION_FILE)
- FILE(READ ${CPACK_PACKAGE_DESCRIPTION_FILE} CPACK_RPM_PACKAGE_DESCRIPTION)
- ELSE (CPACK_PACKAGE_DESCRIPTION_FILE)
- SET(CPACK_RPM_PACKAGE_DESCRIPTION "no package description available")
- ENDIF (CPACK_PACKAGE_DESCRIPTION_FILE)
- ENDIF (NOT CPACK_RPM_PACKAGE_DESCRIPTION)
- # CPACK_RPM_USER_BINARY_SPECFILE
- # FIXME when this is set then CPack should us the
- # user provided file.
- # Now we may create the RPM build tree structure
- SET(CPACK_RPM_ROOTDIR "${CPACK_TOPLEVEL_DIRECTORY}")
- MESSAGE(STATUS "CPackRPM:: Using CPACK_RPM_ROOTDIR=${CPACK_RPM_ROOTDIR}")
- # Prepare RPM build tree
- FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR})
- FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/tmp)
- FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/BUILD)
- FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/RPMS)
- FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/SOURCES)
- FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/SPECS)
- FILE(MAKE_DIRECTORY ${CPACK_RPM_ROOTDIR}/SRPMS)
- #SET(CPACK_RPM_FILE_NAME "${CPACK_RPM_PACKAGE_NAME}-${CPACK_RPM_PACKAGE_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}-${CPACK_RPM_PACKAGE_ARCHITECTURE}.rpm")
- SET(CPACK_RPM_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}")
- # it seems rpmbuild can't handle spaces in the path
- # neither escaping (as below) nor putting quotes around the path seem to help
- #STRING(REGEX REPLACE " " "\\\\ " CPACK_RPM_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}")
- SET(CPACK_RPM_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}")
-
- SET(CPACK_RPM_BINARY_SPECFILE "${CPACK_RPM_ROOTDIR}/SPECS/${CPACK_RPM_PACKAGE_NAME}.spec")
- IF(CPACK_RPM_USER_BINARY_SPECFILE)
- # User may have specified SPECFILE just use it
- MESSAGE("CPackRPM: Will use user specified spec file: ${CPACK_RPM_USER_BINARY_SPECFILE}")
- # Note that user provided file is processed for @var replacement
- CONFIGURE_FILE(${CPACK_RPM_USER_BINARY_SPECFILE} ${CPACK_RPM_BINARY_SPECFILE} @ONLY)
- ELSE(CPACK_RPM_USER_BINARY_SPECFILE)
- # No User specified spec file generate a valid one using var values
- IF(CPACK_RPM_PACKAGE_DEBUG)
- MESSAGE("CPackRPM:: CPACK_TOPLEVEL_DIRECTORY = ${CPACK_TOPLEVEL_DIRECTORY}")
- MESSAGE("CPackRPM:: CPACK_TOPLEVEL_TAG = ${CPACK_TOPLEVEL_TAG}")
- MESSAGE("CPackRPM:: CPACK_TEMPORARY_DIRECTORY= ${PACK_TEMPORARY_DIRECTORY}")
- MESSAGE("CPackRPM:: CPACK_OUTPUT_FILE_NAME = ${CPACK_OUTPUT_FILE_NAME}")
- MESSAGE("CPackRPM:: CPACK_OUTPUT_FILE_PATH = ${CPACK_OUTPUT_FILE_PATH}")
- MESSAGE("CPackRPM:: CPACK_PACKAGE_FILE_NAME = ${CPACK_PACKAGE_FILE_NAME}")
- MESSAGE("CPackRPM:: CPACK_RPM_BINARY_SPECFILE = ${CPACK_RPM_BINARY_SPECFILE}")
- MESSAGE("CPackRPM:: CPACK_PACKAGE_INSTALL_DIRECTORY = ${PACK_PACKAGE_INSTALL_DIRECTORY}")
- MESSAGE("CPackRPM ::CPACK_TEMPORARY_PACKAGE_FILE_NAME = ${CPACK_TEMPORARY_PACKAGE_FILE_NAME}")
- ENDIF(CPACK_RPM_PACKAGE_DEBUG)
- FILE(WRITE ${CPACK_RPM_BINARY_SPECFILE}
- "# -*- rpm-spec -*-
- Buildroot: ${CPACK_RPM_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}
- Summary: ${CPACK_RPM_PACKAGE_SUMMARY}
- Name: ${CPACK_RPM_PACKAGE_NAME}
- Version: ${CPACK_RPM_PACKAGE_VERSION}
- Release: ${CPACK_RPM_PACKAGE_RELEASE}
- License: ${CPACK_RPM_PACKAGE_LICENSE}
- Group: ${CPACK_RPM_PACKAGE_GROUP}
- Vendor: ${CPACK_RPM_PACKAGE_VENDOR}
- #%define prefix ${CMAKE_INSTALL_PREFIX}
- %define _rpmdir ${CPACK_RPM_DIRECTORY}
- %define _rpmfilename ${CPACK_RPM_FILE_NAME}
- %define _unpackaged_files_terminate_build 0
- %define _topdir ${CPACK_RPM_DIRECTORY}
- %description
- ${CPACK_RPM_PACKAGE_DESCRIPTION}
- # This is a shortcutted spec file
- # generated by CMake RPM generator
- # we skip the _prepn _build and _install
- # steps because CPack does that for us
- #%prep
- #%build
-
- #%install
- %clean
- %files
- %defattr(-,root,root,-)
- #%dir %{prefix}
- #%{prefix}/*
- /*
- %changelog
- * Tue Aug 16 2007 Erk <[email protected]>
- Generated by CPack RPM Generator and associated macros
- ")
- ENDIF(CPACK_RPM_USER_BINARY_SPECFILE)
- IF(RPMBUILD_EXECUTABLE)
- # Now call rpmbuild using the SPECFILE
- EXECUTE_PROCESS(
- COMMAND "${RPMBUILD_EXECUTABLE}" -bb "${CPACK_RPM_BINARY_SPECFILE}"
- WORKING_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}"
- ERROR_FILE "${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild.err"
- OUTPUT_FILE "${CPACK_TOPLEVEL_DIRECTORY}/rpmbuild.out")
- ELSE(RPMBUILD_EXECUTABLE)
- IF(ALIEN_EXECUTABLE)
- MESSAGE(FATAL_ERROR "RPM packaging through alien not done (yet)")
- ENDIF(ALIEN_EXECUTABLE)
- ENDIF(RPMBUILD_EXECUTABLE)
|