From 84b8d3cfb92caf8a680de510545748cdcb4278fb Mon Sep 17 00:00:00 2001 From: Mathias Gug Date: Fri, 30 Dec 2016 16:27:21 -0800 Subject: [PATCH] Support rpm packages. --- CMakeLists.txt | 7 +++--- cmake/CPackConfig.cmake | 44 +++++++++++++++++++++++++++++++++++ cmake/CPackDebianConfig.cmake | 41 -------------------------------- 3 files changed, 48 insertions(+), 44 deletions(-) create mode 100644 cmake/CPackConfig.cmake delete mode 100644 cmake/CPackDebianConfig.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a1c4f8e8..22f230e8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,6 +76,7 @@ endfunction(add_dependency_defines) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) include(CheckCXXCompilerFlag) include(FindPackageHandleStandardArgs) +include(GNUInstallDirs) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") @@ -689,8 +690,8 @@ install(TARGETS osrm_store DESTINATION lib) # Setup exporting variables for pkgconfig and subproject # -if(BUILD_DEBIAN_PACKAGE) - include(CPackDebianConfig) +if(BUILD_PACKAGE) + include(CPackConfig) include(CPack) endif() @@ -728,7 +729,7 @@ JOIN("-I${DEPENDENCIES_INCLUDE_DIRS}" " -I" PKGCONFIG_OSRM_INCLUDE_FLAGS) JOIN("${ENGINE_LIBRARIES}" " " PKGCONFIG_OSRM_DEPENDENT_LIBRARIES) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/pkgconfig.in libosrm.pc @ONLY) -install(FILES ${PROJECT_BINARY_DIR}/libosrm.pc DESTINATION lib/pkgconfig) +install(FILES ${PROJECT_BINARY_DIR}/libosrm.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) # uninstall target configure_file( diff --git a/cmake/CPackConfig.cmake b/cmake/CPackConfig.cmake new file mode 100644 index 000000000..5d73cc3a1 --- /dev/null +++ b/cmake/CPackConfig.cmake @@ -0,0 +1,44 @@ +IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux") + MESSAGE(FATAL_ERROR "Cannot configure CPack to generate Debian/RPM packages on non-linux systems.") +ENDIF() +string(TOLOWER "${CMAKE_PROJECT_NAME}" CPACK_PACKAGE_NAME) +SET(CPACK_PACKAGE_VERSION_MAJOR ${OSRM_VERSION_MAJOR}) +SET(CPACK_PACKAGE_VERSION_MINOR ${OSRM_VERSION_MINOR}) +SET(CPACK_PACKAGE_VERSION_PATCH ${OSRM_VERSION_PATCH}) +SET(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") + +SET(CPACK_INCLUDE_TOPLEVEL_DIRECTORY "FALSE") +SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md") +SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Open Source Routing Machine (OSRM) is a high-performance routing engine. It combines sophisticated routing algorithms with the open and free data of the OpenStreetMap.") +SET(CPACK_PACKAGE_CONTACT "Dennis Luxen ") +SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENCE.TXT") + +SET(CPACK_STRIP_FILES "TRUE") +file(GLOB_RECURSE ProfileGlob ${CMAKE_SOURCE_DIR}/profiles/*) +install(FILES ${ProfileGlob} DESTINATION "share/doc/${CPACK_PACKAGE_NAME}/profiles") + +find_program(DPKG_PROGRAM dpkg DOC "dpkg program of Debian-based systems") +if(DPKG_PROGRAM) + SET(CPACK_GENERATOR "DEB") + execute_process( + COMMAND ${DPKG_PROGRAM} --print-architecture + OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}") + SET(CPACK_DEBIAN_PACKAGE_SHLIBDEPS "ON") +else(DPKG_PROGRAM) + find_program(RPM_PROGRAM rpm DOC "rpm RPM-based systems") + find_program(RPMBUILD_PROGRAM rpm DOC "rpm RPM-based systems") + if(RPMBUILD_PROGRAM) + SET(CPACK_GENERATOR "RPM") + execute_process( + COMMAND ${RPM_PROGRAM} --eval %{_arch} + OUTPUT_VARIABLE CPACK_RPM_PACKAGE_ARCHITECTURE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}.${CPACK_RPM_PACKAGE_ARCHITECTURE}") + # Exclude /usr/lib64/pkgconfig directory given that it is already owned by the pkg-config rpm package. + SET(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/usr/${CMAKE_INSTALL_LIBDIR}/pkgconfig") + endif(RPMBUILD_PROGRAM) +endif(DPKG_PROGRAM) diff --git a/cmake/CPackDebianConfig.cmake b/cmake/CPackDebianConfig.cmake deleted file mode 100644 index 13216dd2f..000000000 --- a/cmake/CPackDebianConfig.cmake +++ /dev/null @@ -1,41 +0,0 @@ -IF(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux") - MESSAGE(FATAL_ERROR "Cannot configure CPack to generate Debian packages on non-linux systems.") -ENDIF() - -INCLUDE(FindDebArch) - -SET(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md") -SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENCE.TXT") -SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CPACK_RESOURCE_FILE_README}") -SET(CPACK_PACKAGE_UPSTREAM_VERSION "${OSRM_VERSION_MAJOR}.${OSRM_VERSION_MINOR}.${OSRM_VERSION_PATCH}") -SET(CPACK_PACKAGE_DEBIAN_REVISION "1") -SET(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_UPSTREAM_VERSION}-${CPACK_PACKAGE_DEBIAN_REVISION}") - -string(TOLOWER "${CMAKE_PROJECT_NAME}" LOWER_PROJECT_NAME) -SET(CPACK_PACKAGE_FILE_NAME "${LOWER_PROJECT_NAME}_${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}") -SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${LOWER_PROJECT_NAME}_${CPACK_PACKAGE_UPSTREAM_VERSION}_orig") -SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Open Source Routing Machine (OSRM).") -SET(CPACK_PACKAGE_DESCRIPTION "Open Source Routing Machine (OSRM) is a routing engine.") - -# To create a proper Debian/Ubuntu package, the following CMake -# options should be used: - -SET(CPACK_STRIP_FILES "TRUE") -SET(CPACK_INCLUDE_TOPLEVEL_DIRECTORY "FALSE") -SET(CPACK_GENERATOR "DEB") - -SET(CPACK_DEBIAN_PACKAGE_NAME "${CPACK_PACKAGE_NAME}${VERSION_SUFFIX}") -SET(CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}") -SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Dennis Luxen ") -SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") -SET(CPACK_DEBIAN_PACKAGE_SECTION "devel") -SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION "Open Source Routing Machine (OSRM) is a high-performance routing engine. - It combines sophisticated routing algorithms with the open and free data of the OpenStreetMap." -) -SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6-dev, libbz2-1.0, libstxxl1, libxml2, libzip2, liblua5.1-0, libtbb2, libboost-all-dev") - -file(GLOB_RECURSE ProfileGlob ${CMAKE_SOURCE_DIR}/profiles/*) -install(FILES ${ProfileGlob} DESTINATION "share/doc/${LOWER_PROJECT_NAME}/profiles") -set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_BINARY_DIR}/copyright;") - -MESSAGE(STATUS "Debian Package: ${CPACK_DEBIAN_PACKAGE_NAME} (${CPACK_DEBIAN_PACKAGE_VERSION}) [${CPACK_PACKAGE_FILE_NAME}.deb]")