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