From ac5207cf7d44f27960813ce5cde91f67bba48ccc Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Fri, 10 Feb 2017 14:46:50 +0100 Subject: [PATCH] fix rpm debug packages on older systems without SHA checksum in the binaries --- CMakeLists.txt | 3 ++- Installation/rpm/arangodb.spec.in | 2 +- cmake/InstallMacros.cmake | 42 ++++++++++++++++++++++++------- cmake/packages/client/nsis.txt | 2 +- cmake/packages/rpm.cmake | 8 +++++- 5 files changed, 44 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8dd33ebc71..35e2fec3e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -489,7 +489,9 @@ if (USE_MAINTAINER_MODE) find_program(AWK_EXECUTABLE awk) endif () +include(ArangoDBInstall) find_program(FILE_EXECUTABLE file) +detect_binary_id_type(CMAKE_DEBUG_FILENAMES_SHA_SUM) ################################################################################ ## FAILURE TESTS @@ -820,7 +822,6 @@ if (MSVC) include(generate_product_version) endif() -include(ArangoDBInstall) if (NOT(SKIP_PACKAGING)) include(packages/packages) endif() diff --git a/Installation/rpm/arangodb.spec.in b/Installation/rpm/arangodb.spec.in index e847623654..ffa9d59a8c 100644 --- a/Installation/rpm/arangodb.spec.in +++ b/Installation/rpm/arangodb.spec.in @@ -190,7 +190,7 @@ mkdir -p %{buildroot}%{_piddir} %{_datadir}/arangodb3/js/node %files debuginfo -/usr/lib*/debug/.build-id/* +@CPACK_DEBUG_DIRECTORY_PATTERN@ ## ----------------------------------------------------------------------------- ## --SECTION-- post diff --git a/cmake/InstallMacros.cmake b/cmake/InstallMacros.cmake index b91f696304..f0ca20ac26 100644 --- a/cmake/InstallMacros.cmake +++ b/cmake/InstallMacros.cmake @@ -110,9 +110,9 @@ if (INSTALL_MACROS_NO_TARGET_INSTALL) OUTPUT ${name} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$/${alias}${CMAKE_EXECUTABLE_SUFFIX}) + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$/${alias}${CMAKE_EXECUTABLE_SUFFIX}) install( - PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$/${alias}${CMAKE_EXECUTABLE_SUFFIX} + PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$/${alias}${CMAKE_EXECUTABLE_SUFFIX} DESTINATION ${where}) else () add_custom_command( @@ -132,9 +132,9 @@ else () TARGET ${name} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$/${alias}${CMAKE_EXECUTABLE_SUFFIX}) + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$/${alias}${CMAKE_EXECUTABLE_SUFFIX}) install( - PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$/${alias}${CMAKE_EXECUTABLE_SUFFIX} + PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$/${alias}${CMAKE_EXECUTABLE_SUFFIX} DESTINATION ${where}) else () add_custom_command( @@ -181,17 +181,41 @@ macro(install_debinfo FILE_CHECKSUM ${FILE_RESULT} ) - - if (NOT ${FILE_CHECKSUM} STREQUAL "") + string(LENGTH ${FILE_CHECKSUM} FILE_CHECKSUM_LEN) + + if (FILE_CHECKSUM_LEN EQUAL 40) string(SUBSTRING ${FILE_CHECKSUM} 0 2 SUB_DIR) string(SUBSTRING ${FILE_CHECKSUM} 2 -1 STRIP_FILE) set(SUB_DEBINFO_DIR .build-id/${SUB_DIR}) set(STRIP_FILE "${STRIP_FILE}.debug") + else () + set(STRIP_FILE ${USER_STRIP_FILE}) endif() execute_process(COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${FILE} ${STRIP_DIR}/${STRIP_FILE}) set(FILE ${STRIP_DIR}/${STRIP_FILE}) + install( + PROGRAMS ${FILE} + DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${SUB_DEBINFO_DIR}) + endif() +endmacro() + + +# Detect whether this system has SHA checksums +macro(detect_binary_id_type sourceVar) + set(${sourceVar} false) + if (NOT MSVC AND CMAKE_STRIP AND FILE_EXECUTABLE) + execute_process( + COMMAND ${FILE_EXECUTABLE} ${FILE_EXECUTABLE} + OUTPUT_VARIABLE FILE_RESULT) + + string(REGEX + REPLACE ".*=([a-z0-9]*),.*" "\\1" + FILE_CHECKSUM + ${FILE_RESULT} + ) + string(LENGTH ${FILE_CHECKSUM} FILE_CHECKSUM_LEN) + if (FILE_CHECKSUM_LEN EQUAL 40) + set(${sourceVar} true) + endif() endif() - install( - PROGRAMS ${FILE} - DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${SUB_DEBINFO_DIR}) endmacro() diff --git a/cmake/packages/client/nsis.txt b/cmake/packages/client/nsis.txt index 56831e75f9..4617a7a1dc 100644 --- a/cmake/packages/client/nsis.txt +++ b/cmake/packages/client/nsis.txt @@ -10,7 +10,7 @@ cmake_minimum_required(VERSION 2.8) ################################################################################ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "@CMAKE_BINARY_DIR@/bin") -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_X "@CMAKE_BINARY_DIR@/bin/$/") +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_X "@CMAKE_BINARY_DIR@/bin/$/") set(CMAKE_BUILD_TYPE @CMAKE_BUILD_TYPE@) diff --git a/cmake/packages/rpm.cmake b/cmake/packages/rpm.cmake index 58e04d0752..70f0ce723a 100644 --- a/cmake/packages/rpm.cmake +++ b/cmake/packages/rpm.cmake @@ -1,6 +1,12 @@ # -*- mode: CMAKE; -*- set(CPACK_GENERATOR "RPM") +if (CMAKE_DEBUG_FILENAMES_SHA_SUM) + message("IFFF!") + set(CPACK_DEBUG_DIRECTORY_PATTERN "/usr/lib*/debug/.build-id/*") +else() + set(CPACK_DEBUG_DIRECTORY_PATTERN "/usr/lib*/debug/*") +endif() configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Installation/rpm/arangodb.spec.in" "${CMAKE_CURRENT_BINARY_DIR}/arangodb.spec" @ONLY IMMEDIATE) set(CPACK_RPM_USER_BINARY_SPECFILE "${CMAKE_CURRENT_BINARY_DIR}/arangodb.spec") @@ -47,7 +53,7 @@ include(arangod/dbg.cmake) add_custom_target(package-arongodb-server COMMAND ${CMAKE_COMMAND} . COMMAND ${CMAKE_CPACK_COMMAND} -G RPM - COMMAND cp "${CPACK_TEMPORARY_DIRECTORY}/${CPACK_CLIENT_PACKAGE_FILE_NAME}.rpm" "${PROJECT_BINARY_DIR}" + COMMAND cp "${CPACK_TEMPORARY_DIRECTORY}/*.rpm" "${PROJECT_BINARY_DIR}" WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) list(APPEND PACKAGES_LIST package-arongodb-server)