From 155777edabdfff2e08ee7d54ff2eb644afcac9f0 Mon Sep 17 00:00:00 2001 From: Andreas Schenk <andreas_schenk@hms.harvard.edu> Date: Fri, 14 Sep 2012 12:00:59 -0400 Subject: [PATCH] added working version of CPack tarball generator for Linux --- cmake_support/CopyDependencies.cmake | 93 ++++++++++++++++++++-------- deployment/linux/CMakeLists.txt | 1 - 2 files changed, 66 insertions(+), 28 deletions(-) diff --git a/cmake_support/CopyDependencies.cmake b/cmake_support/CopyDependencies.cmake index 31f8081e5..ce140114c 100644 --- a/cmake_support/CopyDependencies.cmake +++ b/cmake_support/CopyDependencies.cmake @@ -283,30 +283,6 @@ endfunction(resolve_embedded_item) -#============================================================================= -# function copy_resolved_item -#============================================================================= -function(copy_resolved_item resolved_item resolved_embedded_item) - if(WIN32) - # ignore case on Windows - string(TOLOWER "${resolved_item}" resolved_item_compare) - string(TOLOWER "${resolved_embedded_item}" resolved_embedded_item_compare) - else() - set(resolved_item_compare "${resolved_item}") - set(resolved_embedded_item_compare "${resolved_embedded_item}") - endif() - - if("${resolved_item_compare}" STREQUAL "${resolved_embedded_item_compare}") - message(STATUS "warning: resolved_item == resolved_embedded_item - not copying...") - else() - message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy ${resolved_item} ${resolved_embedded_item}") - execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${resolved_item}" "${resolved_embedded_item}") - if(UNIX AND NOT APPLE) - file(RPATH_REMOVE FILE "${resolved_embedded_item}") - endif(UNIX AND NOT APPLE) - endif() - -endfunction(copy_resolved_item) #============================================================================= @@ -654,6 +630,19 @@ function(is_system_lib item system_var) endif() endfunction(is_system_lib) +#============================================================================= +# function copy_resolved_item (OSX) +#============================================================================= +function(copy_resolved_item resolved_item resolved_embedded_item) + if("${resolved_item}" STREQUAL "${resolved_embedded_item}") + message(STATUS "warning: resolved_item == resolved_embedded_item - not copying...") + else() + message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy ${resolved_item} ${resolved_embedded_item}") + execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${resolved_item}" "${resolved_embedded_item}") + endif() + +endfunction(copy_resolved_item) + elseif(WIN32 AND NOT UNIX) @@ -708,8 +697,6 @@ function(get_rpath target rpath_var) message(FATAL_ERROR "get_rpath not implemented for Windows.") endfunction(get_rpath) -elseif(UNIX) - #============================================================================= # function is_system_lib (Windows) #============================================================================= @@ -726,6 +713,26 @@ function(is_system_lib item system_var) endif() endfunction(is_system_lib) +#============================================================================= +# function copy_resolved_item (Windows) +#============================================================================= +function(copy_resolved_item resolved_item resolved_embedded_item) + # ignore case on Windows + string(TOLOWER "${resolved_item}" resolved_item_compare) + string(TOLOWER "${resolved_embedded_item}" resolved_embedded_item_compare) + + if("${resolved_item_compare}" STREQUAL "${resolved_embedded_item_compare}") + message(STATUS "warning: resolved_item == resolved_embedded_item - not copying...") + else() + message(STATUS "copying COMMAND ${CMAKE_COMMAND} -E copy ${resolved_item} ${resolved_embedded_item}") + execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${resolved_item}" "${resolved_embedded_item}") + endif() + +endfunction(copy_resolved_item) + +elseif(UNIX) + + #============================================================================= #============================================================================= # Linux specific functions @@ -746,8 +753,10 @@ function(get_dependencies_for_item item list_var) message(FATAL_ERROR "Could not find ldd - cannot analyze dependencies.") return() endif(NOT ldd_cmd) - + set(old_ld_library_path $ENV{LD_LIBRARY_PATH}) + set(ENV{LD_LIBRARY_PATH} ${CMAKE_INSTALL_PREFIX}/${LIB_DIR}) execute_process( COMMAND ${ldd_cmd} ${item} OUTPUT_VARIABLE ldd_cmd_ov ERROR_VARIABLE ldd_cmd_ev RESULT_VARIABLE retcode) + set(ENV{LD_LIBRARY_PATH} ${old_ld_library_path}) if(retcode) if(${ldd_cmd_ov}) message(${ldd_cmd_ov}) @@ -833,6 +842,36 @@ else(APPLE) endif(APPLE) +#============================================================================= +# function copy_resolved_item (Linux) +#============================================================================= +function(copy_resolved_item resolved_item resolved_embedded_item) + get_filename_component(real_resolved_item "${resolved_item}" REALPATH) + get_filename_component(real_resolved_embedded_item "${resolved_embedded_item}" REALPATH) + + if("${real_resolved_item}" STREQUAL "${real_resolved_embedded_item}") + message(STATUS "warning: resolved_item == resolved_embedded_item - not copying...") + else() + message(STATUS "copying ${resolved_item} to ${resolved_embedded_item} including symlinks") + # determine all the symlinks pointing to the current item and copy them into the package + # along with the item + get_filename_component(external_path ${real_resolved_item} PATH) + get_filename_component(embedded_path ${real_resolved_embedded_item} PATH) + get_filename_component(external_name ${real_resolved_item} NAME) + string(REGEX REPLACE "([a-zA-Z]+).*" "\\1" name_base ${external_name}) + file(GLOB candidates "${external_path}/${name_base}*" ) + set(external_files) + foreach(candidate ${candidates}) + get_filename_component(real_candidate "${candidate}" REALPATH) + if(real_candidate STREQUAL ${real_resolved_item}) + list(APPEND external_files ${candidate}) + endif(real_candidate STREQUAL ${real_resolved_item}) + endforeach(candidate) + file(COPY ${external_files} DESTINATION ${embedded_path}) + file(RPATH_REMOVE FILE "${resolved_embedded_item}") + endif() + +endfunction(copy_resolved_item) diff --git a/deployment/linux/CMakeLists.txt b/deployment/linux/CMakeLists.txt index 90f880568..33914711e 100644 --- a/deployment/linux/CMakeLists.txt +++ b/deployment/linux/CMakeLists.txt @@ -43,7 +43,6 @@ else() list(APPEND OST_BINARIES \${qt_plugins}) copy_dependencies(\"\${OST_BINARIES}\") - message(FATAL_ERROR \"stop\") endif(NOT ${CMAKE_INSTALL_PREFIX} MATCHES \${CMAKE_INSTALL_PREFIX}) ") set(CPACK_GENERATOR "TGZ") -- GitLab