Improve rpm detection and rpm package naming

Also don't build rpm packages on debian, even if rpm is installed.
This commit is contained in:
Rogier 2016-06-18 11:27:33 +02:00
parent a35ebed4ab
commit fade10aa1b

View File

@ -497,19 +497,52 @@ else(WIN32)
# .rpm settings
# RPM package building needs rpmbuild, but cpack doesn't check for it first...
find_program(RPM_AVAILABLE "rpmbuild")
if(RPM_AVAILABLE)
execute_process(COMMAND rpm -q rpm
RESULT_VARIABLE RPM_VERSION_EXIT
OUTPUT_VARIABLE RPMCOMMAND_PACKAGE_VERSION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(RPM_VERSION_EXIT)
if(NOT RPMCOMMAND_PACKAGE_VERSION STREQUAL "package rpm is not installed")
message(FATAL_ERROR "Could not determine version of installed rpm package")
endif(NOT RPMCOMMAND_PACKAGE_VERSION STREQUAL "package rpm is not installed")
endif(RPM_VERSION_EXIT)
if(RPM_AVAILABLE AND NOT RPM_VERSION_EXIT)
message(STATUS "rpmbuild found - enabling .rpm package generation")
set(CPACK_GENERATOR ${CPACK_GENERATOR} RPM)
set(CPACK_RPM_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-${CPACK_PACKAGE_VERSION_PATCH}-${PACKAGE_TARGET_ARCHITECTURE}")
if(RPM_VERSION_EXIT)
message(FATAL_ERROR "Could not determine version of installed rpm package")
else(RPM_VERSION_EXIT)
# Fedora sample: rpm-4.13.0-0.rc1.13.fc23.x86_64
# OpenSuse sample: rpm-4.12.0.1-13.1.x86_64
string(REGEX MATCH "(\\.((fc|el)[0-9]+))?\\.([^.]+)$" MATCH_RESULT "${RPMCOMMAND_PACKAGE_VERSION}")
if(CMAKE_MATCH_2 STREQUAL "")
set(CPACK_RPM_DIST "")
else(CMAKE_MATCH_2 STREQUAL "")
set(CPACK_RPM_DIST ".${CMAKE_MATCH_2}")
endif(CMAKE_MATCH_2 STREQUAL "")
set(RPM_PACKAGE_ARCHITECTURE "${CMAKE_MATCH_4}")
string(REGEX MATCH "${RPM_PACKAGE_ARCHITECTURE}" MATCH_RESULT "${PACKAGE_TARGET_ARCHITECTURE}")
if(NOT "${MATCH_RESULT}" STREQUAL "${RPM_PACKAGE_ARCHITECTURE}")
set(RPM_PACKAGE_ARCHITECTURE "${PACKAGE_TARGET_ARCHITECTURE}")
endif()
endif(RPM_VERSION_EXIT)
message(STATUS "Rpm distribution: ${CPACK_RPM_DIST}")
message(STATUS "Rpm package architecture: ${RPM_PACKAGE_ARCHITECTURE}")
string(REPLACE "-" "." RPM_VERSION_STRING "${VERSION_STRING}")
set(CPACK_RPM_PACKAGE_FILE_NAME "${PROJECT_NAME}-${RPM_VERSION_STRING}.${CPACK_PACKAGE_VERSION_PATCH}${CPACK_RPM_DIST}.${RPM_PACKAGE_ARCHITECTURE}")
message(STATUS "Rpm package name: ${CPACK_RPM_PACKAGE_FILE_NAME}.rpm")
set(CPACK_RPM_PACKAGE_VERSION "${VERSION_STRING}.${CPACK_PACKAGE_VERSION_PATCH}")
set(CPACK_RPM_PACKAGE_VERSION "${RPM_VERSION_STRING}.${CPACK_PACKAGE_VERSION_PATCH}${CPACK_RPM_DIST}")
set(CPACK_RPM_PACKAGE_GROUP "Amusements/Games")
set(CPACK_RPM_PACKAGE_LICENSE "GPLv2.1+")
set(CPACK_RPM_PACKAGE_URL "${CPACK_PACKAGE_URL}")
else(RPM_AVAILABLE)
elseif(RPM_VERSION_EXIT)
message(STATUS "rpm is installed, but not the native package manager - no .rpm package will be generated")
else(RPM_AVAILABLE AND NOT RPM_VERSION_EXIT)
message(STATUS "rpmbuild not found - no .rpm package will be generated")
endif(RPM_AVAILABLE)
endif(RPM_AVAILABLE AND NOT RPM_VERSION_EXIT)
unset(RPM_AVAILABLE CACHE)
else(CMAKE_INSTALL_PREFIX STREQUAL "/usr")
message(STATUS "Install prefix is not '/usr' - not building .deb / .rpm packages")