diff --git a/CMakeLists.txt b/CMakeLists.txt index f49eb809c1..ad5a22d336 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -489,6 +489,8 @@ if (USE_MAINTAINER_MODE) find_program(AWK_EXECUTABLE awk) endif () +find_program(FILE_EXECUTABLE file) + ################################################################################ ## FAILURE TESTS ################################################################################ diff --git a/arangod/dbg.cmake b/arangod/dbg.cmake index d81497f0b0..763351e0d1 100644 --- a/arangod/dbg.cmake +++ b/arangod/dbg.cmake @@ -1,17 +1,12 @@ # -*- mode: CMAKE; -*- # these are the install targets for the client package. # we can't use RUNTIME DESTINATION here. +# include(/tmp/dump_vars.cmake) +message( "CMAKE_PROJECT_NAME ${CMAKE_PROJECT_NAME}/ CMAKE_INSTALL_SBINDIR ${CMAKE_INSTALL_SBINDIR}") -set(STRIP_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/strip") -execute_process(COMMAND mkdir -p ${STRIP_DIR}) - -set(FILE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGOD}${CMAKE_EXECUTABLE_SUFFIX}) -set(STRIP_FILE ${STRIP_DIR}/${BIN_ARANGOD}${CMAKE_EXECUTABLE_SUFFIX}) -if (NOT MSVC AND CMAKE_STRIP) - execute_process(COMMAND "rm" -f ${STRIP_FILE}) - execute_process(COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${FILE} ${STRIP_FILE}) - set(FILE ${STRIP_FILE}) -endif() -install( - PROGRAMS ${FILE} - DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${CMAKE_INSTALL_SBINDIR}) +install_debinfo( + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/strip" + "${CMAKE_PROJECT_NAME}/${CMAKE_INSTALL_SBINDIR}" + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGOD}${CMAKE_EXECUTABLE_SUFFIX}" + "${STRIP_DIR}/${BIN_ARANGOD}${CMAKE_EXECUTABLE_SUFFIX}" + ) diff --git a/arangosh/dbg.cmake b/arangosh/dbg.cmake index 641e35f2ad..aea97a5800 100644 --- a/arangosh/dbg.cmake +++ b/arangosh/dbg.cmake @@ -2,63 +2,30 @@ # these are the install targets for the client package. # we can't use RUNTIME DESTINATION here. -set(STRIP_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/strip") -execute_process(COMMAND mkdir -p ${STRIP_DIR}) -set(FILE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGOBENCH}${CMAKE_EXECUTABLE_SUFFIX}) -set(STRIP_FILE ${STRIP_DIR}/${BIN_ARANGOBENCH}${CMAKE_EXECUTABLE_SUFFIX}) -if (NOT MSVC AND CMAKE_STRIP) - execute_process(COMMAND "rm" -f ${STRIP_FILE}) - execute_process(COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${FILE} ${STRIP_FILE}) - set(FILE ${STRIP_FILE}) -endif() - -install( - PROGRAMS ${FILE} - DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${CMAKE_INSTALL_BINDIR}) - - -set(FILE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGODUMP}${CMAKE_EXECUTABLE_SUFFIX}) -set(STRIP_FILE ${STRIP_DIR}/${BIN_ARANGODUMP}${CMAKE_EXECUTABLE_SUFFIX}) -if (NOT MSVC AND CMAKE_STRIP) - execute_process(COMMAND "rm" -f ${STRIP_FILE}) - execute_process(COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${FILE} ${STRIP_FILE}) - set(FILE ${STRIP_FILE}) -endif() -install( - PROGRAMS ${FILE} - DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${CMAKE_INSTALL_BINDIR}) - -set(FILE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGOIMP}${CMAKE_EXECUTABLE_SUFFIX}) -set(STRIP_FILE ${STRIP_DIR}/${BIN_ARANGOIMP}${CMAKE_EXECUTABLE_SUFFIX}) -if (NOT MSVC AND CMAKE_STRIP) - execute_process(COMMAND "rm" -f ${STRIP_FILE}) - execute_process(COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${FILE} ${STRIP_FILE}) - set(FILE ${STRIP_FILE}) -endif() -install( - PROGRAMS ${FILE} - DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${CMAKE_INSTALL_BINDIR}) - -set(FILE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGORESTORE}${CMAKE_EXECUTABLE_SUFFIX}) -set(STRIP_FILE ${STRIP_DIR}/${BIN_ARANGORESTORE}${CMAKE_EXECUTABLE_SUFFIX}) -if (NOT MSVC AND CMAKE_STRIP) - execute_process(COMMAND "rm" -f ${STRIP_FILE}) - execute_process(COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${FILE} ${STRIP_FILE}) - set(FILE ${STRIP_FILE}) -endif() -install( - PROGRAMS ${FILE} - DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${CMAKE_INSTALL_BINDIR}) - -set(FILE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGOSH}${CMAKE_EXECUTABLE_SUFFIX}) -set(STRIP_FILE ${STRIP_DIR}/${BIN_ARANGOSH}${CMAKE_EXECUTABLE_SUFFIX}) -if (NOT MSVC AND CMAKE_STRIP) - execute_process(COMMAND "rm" -f ${STRIP_FILE}) - execute_process(COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${FILE} ${STRIP_FILE}) - set(FILE ${STRIP_FILE}) -endif() -install( - PROGRAMS ${FILE} - DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${CMAKE_INSTALL_BINDIR}) +install_debinfo( + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/strip" + "${CMAKE_PROJECT_NAME}/${CMAKE_INSTALL_BINDIR}" + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGOBENCH}${CMAKE_EXECUTABLE_SUFFIX}" + "${STRIP_DIR}/${BIN_ARANGOBENCH}${CMAKE_EXECUTABLE_SUFFIX}") +install_debinfo( + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/strip" + "${CMAKE_PROJECT_NAME}/${CMAKE_INSTALL_BINDIR}" + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGODUMP}${CMAKE_EXECUTABLE_SUFFIX}" + "${STRIP_DIR}/${BIN_ARANGODUMP}${CMAKE_EXECUTABLE_SUFFIX}") +install_debinfo( + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/strip" + "${CMAKE_PROJECT_NAME}/${CMAKE_INSTALL_BINDIR}" + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGOIMP}${CMAKE_EXECUTABLE_SUFFIX}" + "${STRIP_DIR}/${BIN_ARANGOIMP}${CMAKE_EXECUTABLE_SUFFIX}") +install_debinfo( + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/strip" + "${CMAKE_PROJECT_NAME}/${CMAKE_INSTALL_BINDIR}" + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGORESTORE}${CMAKE_EXECUTABLE_SUFFIX}" + "${STRIP_DIR}/${BIN_ARANGORESTORE}${CMAKE_EXECUTABLE_SUFFIX}") +install_debinfo( + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/strip" + "${CMAKE_PROJECT_NAME}/${CMAKE_INSTALL_BINDIR}" + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGOSH}${CMAKE_EXECUTABLE_SUFFIX}" + "${STRIP_DIR}/${BIN_ARANGOSH}${CMAKE_EXECUTABLE_SUFFIX}") diff --git a/cmake/ArangoDBInstall.cmake b/cmake/ArangoDBInstall.cmake index 75f9eee60e..171f43dcf1 100644 --- a/cmake/ArangoDBInstall.cmake +++ b/cmake/ArangoDBInstall.cmake @@ -19,9 +19,9 @@ endif() # debug info directory: if (${CMAKE_INSTALL_LIBDIR} STREQUAL "usr/lib64") # some systems have weird places for usr/lib: - set(CMAKE_INSTALL_DEBINFO_DIR "usr/lib/debug/${CMAKE_PROJECT_NAME}") + set(CMAKE_INSTALL_DEBINFO_DIR "usr/lib/debug/") else () - set(CMAKE_INSTALL_DEBINFO_DIR "${CMAKE_INSTALL_LIBDIR}/debug/${CMAKE_PROJECT_NAME}") + set(CMAKE_INSTALL_DEBINFO_DIR "${CMAKE_INSTALL_LIBDIR}/debug/") endif () set(CMAKE_INSTALL_SYSCONFDIR_ARANGO "${CMAKE_INSTALL_SYSCONFDIR}/${CMAKE_PROJECT_NAME}") diff --git a/cmake/InstallMacros.cmake b/cmake/InstallMacros.cmake index 03f8f7eac0..2f59bae529 100644 --- a/cmake/InstallMacros.cmake +++ b/cmake/InstallMacros.cmake @@ -157,3 +157,39 @@ macro(to_native_path sourceVarName) endif() set("INC_${sourceVarName}" ${myVar}) endmacro() + +macro(install_debinfo + STRIP_DIR + USER_SUB_DEBINFO_DIR + USER_FILE + USER_STRIP_FILE) + + set(SUB_DEBINFO_DIR ${USER_SUB_DEBINFO_DIR}) + set(FILE ${USER_FILE}) + set(STRIP_FILE ${USER_STRIP_FILE}) + execute_process(COMMAND mkdir -p ${STRIP_DIR}) + if (NOT MSVC AND CMAKE_STRIP) + execute_process(COMMAND "rm" -f ${STRIP_FILE}) + + execute_process( + COMMAND ${FILE_EXECUTABLE} ${FILE} + OUTPUT_VARIABLE FILE_RESULT) + + string(REGEX + REPLACE ".*=([a-z0-9]*),.*" "\\1" + FILE_CHECKSUM + ${FILE_RESULT} + ) + + if (NOT ${FILE_CHECKSUM} STREQUAL "") + string(SUBSTRING ${FILE_CHECKSUM} 0 2 SUB_DIR) + string(SUBSTRING ${FILE_CHECKSUM} 2 -1 STRIP_FILE) + set(SUB_DEBINFO_DIR .build-id/${SUB_DIR}) + endif() + execute_process(COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${FILE} ${STRIP_FILE}) + set(FILE ${STRIP_FILE}) + endif() + install( + PROGRAMS ${FILE} + DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${SUB_DEBINFO_DIR}) +endmacro() diff --git a/cmake/packages/dbg/deb.txt b/cmake/packages/dbg/deb.txt index 5efe953f33..a3b5ad71a2 100644 --- a/cmake/packages/dbg/deb.txt +++ b/cmake/packages/dbg/deb.txt @@ -1,7 +1,7 @@ ################################################################################ # the client package is a complete cmake sub package. ################################################################################ -project(PACKAGE-DBG) +project(@CMAKE_PROJECT_NAME@) cmake_minimum_required(VERSION 2.8) ################################################################################ @@ -15,6 +15,9 @@ set(CROSS_COMPILING @CROSS_COMPILING@) set(CMAKE_INSTALL_BINDIR @CMAKE_INSTALL_BINDIR@) set(CMAKE_INSTALL_FULL_BINDIR @CMAKE_INSTALL_FULL_BINDIR@) +set(CMAKE_INSTALL_SBINDIR @CMAKE_INSTALL_SBINDIR@) +set(CMAKE_INSTALL_FULL_SBINDIR @CMAKE_INSTALL_FULL_SBINDIR@) + set(CMAKE_INSTALL_DATAROOTDIR @CMAKE_INSTALL_DATAROOTDIR@) set(CMAKE_INSTALL_DATAROOTDIR_ARANGO @CMAKE_INSTALL_DATAROOTDIR_ARANGO@) set(CMAKE_INSTALL_FULL_DATAROOTDIR_ARANGO @CMAKE_INSTALL_FULL_DATAROOTDIR_ARANGO@)