From 122576b6e4bc1d1b2208d3fc08f4b9d43fbaf3cb Mon Sep 17 00:00:00 2001
From: Rashad Kanavath <rashad.kanavath@c-s.fr>
Date: Tue, 26 Apr 2016 13:42:43 +0200
Subject: [PATCH] PKG: sync macro code in package helper for otb

---
 CMake/MinGWPackage.cmake  |  83 ++++-------
 CMake/PackageHelper.cmake | 306 +++++++++++++++++++++++++++++++-------
 CMakeLists.txt            |  20 +--
 3 files changed, 286 insertions(+), 123 deletions(-)

diff --git a/CMake/MinGWPackage.cmake b/CMake/MinGWPackage.cmake
index 5636325a1e..abd6ca5af8 100644
--- a/CMake/MinGWPackage.cmake
+++ b/CMake/MinGWPackage.cmake
@@ -1,14 +1,23 @@
 macro(package_mingw)
   cmake_parse_arguments(PKG  "" "STAGE_DIR;ARCH;MXEROOT" "SEARCHDIRS" ${ARGN} )
-  if("${PKG_ARCH}" STREQUAL "x86")
-    set(DEPENDENCIES_INSTALL_DIR "${PKG_MXEROOT}/usr/i686-w64-mingw32.shared")
-    set(MXE_OBJDUMP "${PKG_MXEROOT}/usr/bin/i686-w64-mingw32.shared-objdump")
-  elseif("${PKG_ARCH}" STREQUAL "x64")
-    set(DEPENDENCIES_INSTALL_DIR "${PKG_MXEROOT}/usr/x86_64-w64-mingw32.shared")
-    set(MXE_OBJDUMP "${PKG_MXEROOT}/usr/bin/x86_64-w64-mingw32.shared-objdump")
+
+  set(loader_program_PATHS)
+  if(WIN32 OR CMAKE_CROSSCOMPILING)
+      set(loader_program_names "${PKG_ARCH}-w64-mingw32.shared-objdump")
+      set(loader_program_PATHS "${PKG_MXEROOT}/usr/bin")
+      set(DEPENDENCIES_INSTALL_DIR "${PKG_MXEROOT}/usr/${PKG_ARCH}-w64-mingw32.shared")
+      set(LOADER_PROGRAM_ARGS "-p")
+  else()
+    set(loader_program_PATHS /usr/bin) # a path that is already listed in default path on unix
+  endif()
+
+  find_program(LOADER_PROGRAM "${loader_program_names}" PATHS ${loader_program_PATHS})
+  if(NOT EXISTS ${LOADER_PROGRAM})
+    message(FATAL_ERROR "${loader_program_names} not found in ${loader_program_PATHS}. please check LOADER_PROGRAM variable is set correctly")
   endif()
 
-#  message()
+  include(GetPrerequisites)
+
   #guess install directory from OTB_MODULES_DIR
   set(OTB_INSTALL_DIR ${OTB_MODULES_DIR}/../../../..)
   set(OTB_APPLICATIONS_DIR ${OTB_MODULES_DIR}/../../../otb/applications)
@@ -32,55 +41,15 @@ macro(package_mingw)
 endmacro(package_mingw)
 
 
-function(process_deps infile)
-
-  get_filename_component(bn ${infile} NAME)
-
-  list_contains(contains "${bn}" "${alldlls}")
-  if(NOT contains)
-    set(DLL_FOUND FALSE)
-    foreach(SEARCHDIR ${PKG_SEARCHDIRS})
-      if(NOT DLL_FOUND)
-        if(EXISTS ${SEARCHDIR}/${infile})
-          set(DLL_FOUND TRUE)
-        else()
-          string(TOLOWER ${infile} infile_lower)
-          if(EXISTS ${SEARCHDIR}/${infile_lower})
-            set(DLL_FOUND TRUE)
-            set(infile ${infile_lower})
-          endif()
-        endif()
-        if(DLL_FOUND)
-          message(STATUS "Processing ${SEARCHDIR}/${infile}")
-          if(NOT "${infile}" MATCHES "otbapp")
-            install(FILES "${SEARCHDIR}/${infile}"
-              DESTINATION ${PKG_STAGE_DIR}/bin)
-          else()
-            ##message(STATUS "skipping..${infile}")
-          endif()
-          if(NOT EXISTS ${MXE_OBJDUMP})
-            message(FATAL_ERROR "objdump executable not found. please check MXE_OBJDUMP is set to correct cross compiled executable")
-          endif()
-          execute_process(COMMAND ${MXE_OBJDUMP} "-p" "${SEARCHDIR}/${infile}"  OUTPUT_VARIABLE dlldeps)
-          string(REGEX MATCHALL "DLL.Name..[A-Za-z(0-9\\.0-9)+_\\-]*" OUT "${dlldeps}")
-          string(REGEX REPLACE "DLL.Name.." "" OUT "${OUT}")
-          foreach(o ${OUT})
-            process_deps(${o})
-          endforeach()
-        endif()
-      endif(NOT DLL_FOUND)
-    endforeach()
-
-    if(NOT DLL_FOUND)
-      is_system_dll(iss "${infile}")
-      if(NOT iss)
-        set(notfound_dlls "${notfound_dlls};${infile}")
-      endif()
-    else(NOT DLL_FOUND)
+function(install_xdk_files)
+  install(DIRECTORY ${DEPENDENCIES_INSTALL_DIR}/share
+    DESTINATION ${PKG_STAGE_DIR})
 
-      set( alldlls "${alldlls};${bn}" PARENT_SCOPE )
-    endif(NOT DLL_FOUND)
+  install(DIRECTORY ${DEPENDENCIES_INSTALL_DIR}/include
+    DESTINATION ${PKG_STAGE_DIR}
+    PATTERN "include/OTB*" EXCLUDE )
 
-    set(notfound_dlls "${notfound_dlls}" PARENT_SCOPE )
-   endif()
-endfunction()
\ No newline at end of file
+  install(DIRECTORY ${DEPENDENCIES_INSTALL_DIR}/lib/cmake
+    DESTINATION ${PKG_STAGE_DIR}/lib/
+    PATTERN "lib/cmake/OTB*" EXCLUDE)
+endfunction()
diff --git a/CMake/PackageHelper.cmake b/CMake/PackageHelper.cmake
index af313361b2..0f64de4d31 100644
--- a/CMake/PackageHelper.cmake
+++ b/CMake/PackageHelper.cmake
@@ -4,24 +4,23 @@ set(WINDOWS_SYSTEM_DLLS
   gdi32.dll
   shell32.dll
   kernel32.dll
-  advapi32.dll
-  crypt32.dll
   ws2_32.dll
   wldap32.dll
   ole32.dll
-  opengl32.dll
-  glu32.dll
   comdlg32.dll
-  imm32.dll
-  oleaut32.dll
-  comctl32.dll
-  winmm.dll
   shfolder.dll
   secur32.dll
   wsock32.dll
+  advapi32.dll
+  crypt32.dll
+  imm32.dll
+  oleaut32.dll
+  winmm.dll
+  opengl32.dll
+  glu32.dll
   winspool.drv)
 
-SET(UNIX_SYSTEM_DLLS
+set(LINUX_SYSTEM_DLLS
   libm.so
   libc.so
   libstdc*
@@ -41,18 +40,42 @@ SET(UNIX_SYSTEM_DLLS
   libGL.so*
   libGLU.so*
   )
-set(SYSTEM_DLLS "${UNIX_SYSTEM_DLLS}")
+
+# libgcc_s.*dylib and other *.framework are dragged by QT
+set(APPLE_SYSTEM_DLLS
+  libSystem.*dylib
+  libiconv.*dylib
+  libc\\+\\+.*dylib
+  libstdc.*dylib
+  libobjc.*dylib
+  ApplicationServices.framework
+  CoreFoundation.framework
+  CoreServices.framework
+  Security.framework
+  Carbon.framework
+  AppKit.framework
+  Foundation.framework
+  AGL.framework
+  OpenGL.framework
+  libgcc_s.*dylib
+  )
+
 if(WIN32 OR CMAKE_CROSSCOMPILING)
   set(SYSTEM_DLLS "${WINDOWS_SYSTEM_DLLS}")
-endif()
+else() #case for unixes
+  if(APPLE)
+    set(SYSTEM_DLLS "${APPLE_SYSTEM_DLLS}")
+  else()
+    set(SYSTEM_DLLS "${LINUX_SYSTEM_DLLS}")
+  endif()
+endif(WIN32 OR CMAKE_CROSSCOMPILING)
 
-## http://www.cmake.org/Wiki/CMakeMacroListOperations
 macro(is_system_dll matched value)
   set(${matched})
   string(TOLOWER ${value} value_)
   foreach (pattern ${SYSTEM_DLLS})
     string(TOLOWER ${pattern} pattern_)
-    if(${value_} MATCHES ${pattern_})
+    if("${value_}" MATCHES "${pattern_}")
       set(${matched} TRUE)
     endif()
   endforeach()
@@ -122,23 +145,20 @@ function(install_common include_mvd)
   # one for debugging..
   # install(CODE "message(\"CMake/PackageHelper.cmake:install_common(${outdir})\n${vars}\n\")")
 
+  set(PKG_OTB_SHARE_SOURCE_DIR "${PKG_SHARE_SOURCE_DIR}")
+
+  #For Unixes we make them in the *pkgsetup.in
   ##################### install environment source ##########################
   if(WIN32 OR CMAKE_CROSSCOMPILING)
-    set(ENV_SOURCE_FILES
-      "${PACKAGE_SUPPORT_FILES_DIR}/otbenv.cmd"
-      "${PACKAGE_SUPPORT_FILES_DIR}/otbenv.profile"
-      )
-
-  elseif(UNIX)
-    set(ENV_SOURCE_FILES "${PACKAGE_SUPPORT_FILES_DIR}/otbenv.profile")
+    foreach(ENV_SOURCE_FILE
+        "${PACKAGE_SUPPORT_FILES_DIR}/otbenv.cmd"
+        "${PACKAGE_SUPPORT_FILES_DIR}/otbenv.profile")
+      if(EXISTS ${ENV_SOURCE_FILE})
+        install(FILES ${ENV_SOURCE_FILE} DESTINATION ${PKG_STAGE_DIR})
+      endif()
+    endforeach()
+    set(PKG_OTB_SHARE_SOURCE_DIR "${CMAKE_INSTALL_PREFIX}/share")
   endif()
-
-  foreach(ENV_SOURCE_FILE ${ENV_SOURCE_FILES})
-    if(EXISTS ${ENV_SOURCE_FILE})
-      install(FILES ${ENV_SOURCE_FILE} DESTINATION ${PKG_STAGE_DIR})
-    endif()
-  endforeach()
-
   ####################### install cli and gui scripts ###########################
   file(GLOB PKG_APP_SCRIPTS
     ${OTB_INSTALL_DIR}/bin/otbcli*
@@ -150,10 +170,13 @@ function(install_common include_mvd)
   endif()
 
   ##################### install cli and gui scripts #######################
-  install(FILES ${PKG_APP_SCRIPTS}  DESTINATION ${PKG_STAGE_BIN_DIR})
+  install(PROGRAMS ${PKG_APP_SCRIPTS}  DESTINATION ${PKG_STAGE_BIN_DIR})
 
   if(include_mvd)
     install_monteverdi_files()
+    if(NOT EXISTS "${PKG_OTB_SHARE_SOURCE_DIR}/otb/i18n")
+      message(FATAL_ERROR "error ${PKG_OTB_SHARE_SOURCE_DIR}/otb not exists")
+    endif()
   endif()
 
   ####################### install GDAL data ############################
@@ -164,15 +187,31 @@ function(install_common include_mvd)
 
   install(DIRECTORY ${GDAL_DATA} DESTINATION ${PKG_SHARE_DEST_DIR})
 
-  ####################### install GeoTIFF data ###########################
+  ####################### install GeoTIFF data ########################
   install(DIRECTORY ${PKG_SHARE_SOURCE_DIR}/epsg_csv DESTINATION ${PKG_SHARE_DEST_DIR})
 
-  ####################### install OSSIM data ###########################
+  ####################### install OSSIM data ##########################
   install(DIRECTORY ${PKG_SHARE_SOURCE_DIR}/ossim DESTINATION ${PKG_SHARE_DEST_DIR})
 
-  ####################### Install otb applications ######################
+  ####################### install otb share ###########################
+  install(DIRECTORY ${PKG_OTB_SHARE_SOURCE_DIR}/otb DESTINATION ${PKG_SHARE_DEST_DIR})
+
+  ####################### install proj share ##########################
+  if(EXISTS ${PKG_SHARE_SOURCE_DIR}/proj)
+    install(DIRECTORY ${PKG_SHARE_SOURCE_DIR}/proj DESTINATION ${PKG_SHARE_DEST_DIR})
+  endif()
+
+  ####################### Install otb applications ####################
   install(DIRECTORY "${OTB_APPLICATIONS_DIR}"  DESTINATION ${PKG_OTBLIBS_DIR})
 
+  ####################### Install copyrights ##########################
+  if(WIN32 OR CMAKE_CROSSCOMPILING)
+    #do install license for windows package
+  else()
+    install(DIRECTORY ${PKG_SHARE_SOURCE_DIR}/copyright DESTINATION ${PKG_SHARE_DEST_DIR})
+    install(FILES ${PKG_SHARE_SOURCE_DIR}/copyright/LICENSE DESTINATION ${PKG_STAGE_DIR})
+  endif()
+
 endfunction()
 
 function(install_monteverdi_files)
@@ -181,7 +220,7 @@ function(install_monteverdi_files)
   if(WIN32 OR CMAKE_CROSSCOMPILING)
     set(PKG_QTSQLITE_FILENAME "qsqlite4.dll")
   elseif(APPLE)
-    set(PKG_QTSQLITE_FILENAME "qsqlite.dylib")
+    set(PKG_QTSQLITE_FILENAME "libqsqlite.dylib")
   elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux" AND NOT CMAKE_CROSSCOMPILING)
     set(PKG_QTSQLITE_FILENAME "libqsqlite.so")
   else()
@@ -216,6 +255,12 @@ function(install_monteverdi_files)
     set(vars "${vars}  ${req}=[${${req}}]\n")
   endforeach(req)
 
+  #install icon file for .app file. Monteverdi and Mapla has same icon!
+  if(APPLE)
+    install(FILES ${Monteverdi_SOURCE_DIR}/Packaging/MacOS/Monteverdi.icns
+      DESTINATION ${PKG_STAGE_DIR})
+  endif()
+
   ####################### install mingw qt.conf ##########################
   if(EXISTS ${Monteverdi_SOURCE_DIR}/Packaging/Windows/mingw/qt.conf)
     install(FILES ${Monteverdi_SOURCE_DIR}/Packaging/Windows/mingw/qt.conf
@@ -248,10 +293,22 @@ macro(empty_package_staging_directory)
   execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_INSTALL_PREFIX}/${PKG_STAGE_DIR}")
 endmacro()
 
+#NOTE:
+# VAR_IN_PKGSETUP_CONFIGURE cmake variable is set below.
+# This is important and useful running configure_file()
+# over *pkgsetup.in
+
 function(configure_package)
-  set(EXE_EXT "")
-  set(LIB_EXT "*so")
-  set(SCR_EXT ".sh")
+  if(UNIX)
+    set(EXE_EXT "")
+    set(SCR_EXT ".sh")
+    if(APPLE)
+      set(LIB_EXT "*dylib")
+    else()
+      set(LIB_EXT "*so")
+    endif()
+  endif()
+
   if(WIN32 OR CMAKE_CROSSCOMPILING)
     set(EXE_EXT ".exe")
     set(LIB_EXT "*dll")
@@ -259,7 +316,7 @@ function(configure_package)
   endif()
 
   #This must exist in any OTB Installation minimal or full
-  set(PKG_BINARY_FILES "bin/otbApplicationLauncherCommandLine")
+  set(VAR_IN_PKGSETUP_CONFIGURE "bin/otbApplicationLauncherCommandLine")
   set(PKG_PEFILES "${OTB_INSTALL_DIR}/bin/otbApplicationLauncherCommandLine${EXE_EXT}")
   if(NOT EXISTS "${OTB_INSTALL_DIR}/bin/otbApplicationLauncherCommandLine${EXE_EXT}")
     message(FATAL_ERROR "${OTB_INSTALL_DIR}/bin/otbApplicationLauncherCommandLine${EXE_EXT} not found.")
@@ -269,8 +326,8 @@ function(configure_package)
       iceViewer
       otbTestDriver)
     if(EXISTS "${OTB_INSTALL_DIR}/bin/${EXE_FILE}${EXE_EXT}")
-      #see the first comment about PKG_BINARY_FILES
-      set(PKG_BINARY_FILES "${PKG_BINARY_FILES} bin/${EXE_FILE}${EXE_EXT}")
+      #see the first comment about VAR_IN_PKGSETUP_CONFIGURE
+      set(VAR_IN_PKGSETUP_CONFIGURE "${VAR_IN_PKGSETUP_CONFIGURE} bin/${EXE_FILE}${EXE_EXT}")
       list(APPEND PKG_PEFILES
         "${OTB_INSTALL_DIR}/bin/${EXE_FILE}${EXE_EXT}")
     endif()
@@ -279,31 +336,34 @@ function(configure_package)
   foreach(EXE_FILE monteverdi
       mapla)
     if(EXISTS "${CMAKE_INSTALL_PREFIX}/bin/${EXE_FILE}${EXE_EXT}")
-      #PKG_BINARY_FILES might seem a bit redundant variable if you
+      #VAR_IN_PKGSETUP_CONFIGURE might seem a bit redundant variable if you
       #consider PKG_PEFILES which also has same content.
-      #But PKG_BINARY_FILES goes into pkgsetup.in for Linux standalone binaries
+      #But VAR_IN_PKGSETUP_CONFIGURE goes into pkgsetup.in for Linux standalone binaries
       # and other one (PKG_PEFILES) is for dependency resolution in
       # process_deps() function
-      set(PKG_BINARY_FILES "${PKG_BINARY_FILES} bin/${EXE_FILE}${EXE_EXT}")
+      set(VAR_IN_PKGSETUP_CONFIGURE "${VAR_IN_PKGSETUP_CONFIGURE} bin/${EXE_FILE}${EXE_EXT}")
       list(APPEND PKG_PEFILES
         "${CMAKE_INSTALL_PREFIX}/bin/${EXE_FILE}${EXE_EXT}")
     endif()
-    if(DEFINED Monteverdi_SOURCE_DIR)
-      if(EXISTS ${Monteverdi_SOURCE_DIR}/Packaging/${EXE_FILE}${SCR_EXT})
-        install(PROGRAMS
-          ${Monteverdi_SOURCE_DIR}/Packaging/${EXE_FILE}${SCR_EXT}
-          DESTINATION
-          "${PKG_STAGE_DIR}")
+    #For Unixes we write the startup script in the *pkgsetup.in
+    if(WIN32 OR CMAKE_CROSSCOMPILING)
+      if(DEFINED Monteverdi_SOURCE_DIR)
+        if(EXISTS ${Monteverdi_SOURCE_DIR}/Packaging/${EXE_FILE}${SCR_EXT})
+          install(PROGRAMS
+            ${Monteverdi_SOURCE_DIR}/Packaging/${EXE_FILE}${SCR_EXT}
+            DESTINATION
+            "${PKG_STAGE_DIR}")
+        endif()
       endif()
-    endif()
+    endif(WIN32 OR CMAKE_CROSSCOMPILING)
   endforeach()
 
   file(GLOB OTB_APPS_LIST ${OTB_APPLICATIONS_DIR}/otbapp_${LIB_EXT}) # /lib/otb
 
-  #see the first comment about PKG_BINARY_FILES
+  #see the first comment about VAR_IN_PKGSETUP_CONFIGURE
   foreach(OTB_APP_SO ${OTB_APPS_LIST})
     get_filename_component(OTB_APP_SO_NAME ${OTB_APP_SO} NAME)
-    set(PKG_BINARY_FILES "${PKG_BINARY_FILES} lib/otb/applications/${OTB_APP_SO_NAME}")
+    set(VAR_IN_PKGSETUP_CONFIGURE "${VAR_IN_PKGSETUP_CONFIGURE} lib/otb/applications/${OTB_APP_SO_NAME}")
   endforeach()
 
   set(include_mvd 0)
@@ -327,20 +387,21 @@ function(configure_package)
 
   list(LENGTH notfound_dlls nos)
   if(${nos} GREATER 0)
-    STRING(REPLACE ".so;" ".so," notfound ${notfound_dlls})
-    message(FATAL_ERROR "Following dlls were not found: ${notfound_dlls}. Please consider adding their paths to SEARCHDIRS when calling superbuild_package macro.")
+    list(REMOVE_DUPLICATES notfound_dlls)
+    #string(REPLACE ";" "\r" notfound_dlls ${notfound_dlls})
+    message(FATAL_ERROR "Following dlls were not found: ${notfound_dlls}. Please consider adding their paths to PKG_SEARCHDIRS when calling superbuild_package macro.")
   endif()
 
   file(GLOB temp_files "${CMAKE_BINARY_DIR}/temp_so_names_dir/*") # /lib/otb
   foreach(temp_file ${temp_files})
     get_filename_component(basename_of_temp_file ${temp_file} NAME)
-    set(PKG_BINARY_FILES "${PKG_BINARY_FILES} lib/${basename_of_temp_file}")
+    set(VAR_IN_PKGSETUP_CONFIGURE "${VAR_IN_PKGSETUP_CONFIGURE} lib/${basename_of_temp_file}")
   endforeach()
 
   #remove this temporary directory
   execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_BINARY_DIR}/temp_so_names_dir")
 
-  set(PKG_BINARY_FILES "${PKG_BINARY_FILES}" PARENT_SCOPE)
+  set(VAR_IN_PKGSETUP_CONFIGURE "${VAR_IN_PKGSETUP_CONFIGURE}" PARENT_SCOPE)
 
 endfunction()
 
@@ -412,8 +473,15 @@ function(is_file_a_symbolic_link file result_var1 result_var2)
         set(${result_var1} 1 PARENT_SCOPE)
         #Now find where the symlink is linked to.
         #Do a regex replace
-        string(REGEX REPLACE "_file_full_*.*symbolic.link.to.."
-          "" symlinked_to ${file_ov})
+        if(UNIX)
+          if(APPLE)
+            string(REGEX REPLACE "_file_full_*.*symbolic.link.to."
+              "" symlinked_to ${file_ov})
+          else(APPLE)
+            string(REGEX REPLACE "_file_full_*.*symbolic.link.to.."
+              "" symlinked_to ${file_ov})
+          endif(APPLE)
+        endif(UNIX)
         #Take out last character which is a single quote
         string(REPLACE "'" "" symlinked_to "${symlinked_to}")
         #strip for our own sanity
@@ -428,3 +496,129 @@ function(is_file_a_symbolic_link file result_var1 result_var2)
     endif()
   endif()
 endfunction()
+
+
+
+function(process_deps infile)
+
+  if(APPLE)
+    if( "${infile}" MATCHES "@rpath")
+      string(REGEX REPLACE "@rpath." "" infile "${infile}")
+    endif()
+  endif()
+  if(WIN32 OR CMAKE_CROSSCOMPILING)
+    string(TOLOWER "${infile}" infile_lower )
+  endif()
+  get_filename_component(bn ${infile} NAME)
+
+  list_contains(contains "${bn}" "${alldlls}")
+  if(NOT contains)
+    set(DLL_FOUND FALSE)
+
+    foreach(SEARCHDIR ${PKG_SEARCHDIRS})
+      if(NOT DLL_FOUND)
+        if(WIN32 OR CMAKE_CROSSCOMPILING)
+          if(NOT EXISTS ${SEARCHDIR}/${infile} )
+            if(EXISTS ${SEARCHDIR}/${infile_lower} )
+              set(infile ${infile_lower})
+            endif()
+          endif()
+        endif()
+        if(EXISTS ${SEARCHDIR}/${infile})
+          set(DLL_FOUND TRUE)
+          message(STATUS "Processing ${SEARCHDIR}/${infile}")
+          is_file_executable("${SEARCHDIR}/${infile}" is_executable)
+          if(is_executable)
+              install(PROGRAMS "${SEARCHDIR}/${infile}"
+                DESTINATION ${PKG_STAGE_DIR}/bin)
+          else(is_executable)
+            get_filename_component(bn_we ${infile} NAME_WE)
+            file(GLOB sofiles "${SEARCHDIR}/${bn_we}*")
+            foreach(sofile ${sofiles})
+              get_filename_component(sofile_ext ${sofile} EXT)
+              set(is_valid TRUE)
+              if ("${sofile_ext}" MATCHES ".la"
+                  OR "${sofile_ext}" MATCHES ".prl"
+                  OR "${sofile_ext}" MATCHES ".a")
+                set(is_valid FALSE)
+              endif()
+
+              if(is_valid)
+                get_filename_component(basename_of_sofile ${sofile} NAME)
+                is_file_a_symbolic_link("${sofile}" is_symlink linked_to_file)
+                if(is_symlink)
+                  # NOTE: $OUT_DIR is set actually in pkgsetup.in. So don't try
+                  # any pre-mature optimization on that variable names
+                  file(APPEND
+                    ${CMAKE_BINARY_DIR}/make_symlinks
+                    "ln -sf $OUT_DIR/lib/${linked_to_file} $OUT_DIR/lib/${basename_of_sofile}\n"
+                    )
+                  #message("${sofile} is a symlink to ${linked_to_file}")
+                else() # is_symlink
+                  if("${basename_of_sofile}" MATCHES "otbapp_")
+                    if(NOT PKG_GENERATE_XDK)
+                      install(FILES "${sofile}" DESTINATION ${PKG_STAGE_DIR}/lib/otb/applications)
+                    endif()
+                  else() #if(.. MATCHES "otbapp_")
+                    #if we are making xdk. skill all those starting with libotb case insensitively
+                    if(PKG_GENERATE_XDK)
+                      string(TOLOWER "${basename_of_sofile}" sofile_lower )
+                      if(NOT "${sofile_lower}" MATCHES "libotb")
+                        install(FILES "${sofile}" DESTINATION ${PKG_STAGE_DIR}/lib)
+                      endif()
+                    else() #PKG_GENERATE_XDK
+                      #just install the so file to <staging-dir>/lib
+                      install(FILES "${sofile}" DESTINATION ${PKG_STAGE_DIR}/lib)
+                    endif() #PKG_GENERATE_XDK
+
+                    # Finally touch a file in temp directory for globbing later
+                    # message("touching ${basename_of_sofile}")
+                    execute_process(COMMAND ${CMAKE_COMMAND} -E touch "${CMAKE_BINARY_DIR}/temp_so_names_dir/${basename_of_sofile}")
+                  endif() #if(.. MATCHES "otbapp_")
+                endif() #is_symlink
+              endif() #is_valid
+            endforeach()
+          endif(is_executable)
+          execute_process(
+            COMMAND ${LOADER_PROGRAM} ${LOADER_PROGRAM_ARGS} "${SEARCHDIR}/${infile}"
+            RESULT_VARIABLE loader_rv
+            OUTPUT_VARIABLE loader_ov
+            ERROR_VARIABLE loader_ev
+            )
+          if(loader_rv)
+            message(FATAL_ERROR "loader_ev=${loader_ev}\n PACKAGE-OTB: result_variable is '${loader_rv}'")
+          endif()
+
+          if(WIN32 OR CMAKE_CROSSCOMPILING)
+            string(REGEX MATCHALL "DLL.Name..[A-Za-z(0-9\\.0-9)+_\\-]*" loader_ov "${loader_ov}")
+            string(REGEX REPLACE "DLL.Name.." "" needed_dlls "${loader_ov}")
+          else()  #case for unixes
+            if(APPLE)
+              string(REGEX REPLACE "[^\n]+cmd LC_LOAD_DYLIB\n[^\n]+\n[^\n]+name ([^\n]+).\\(offset[^\n]+\n" "rpath \\1\n" loader_ov "${loader_ov}")
+              string(REGEX MATCHALL "rpath [^\n]+" loader_ov "${loader_ov}")
+              string(REGEX REPLACE "rpath " "" needed_dlls "${loader_ov}")
+            else(APPLE)
+              string(REGEX MATCHALL "NEEDED\\ *[A-Za-z(0-9\\.0-9)+_\\-]*" loader_ov "${loader_ov}")
+              string(REGEX REPLACE "NEEDED" "" needed_dlls "${loader_ov}")
+            endif(APPLE)
+          endif()
+
+          foreach(needed_dll ${needed_dlls})
+            string(STRIP ${needed_dll} needed_dll)
+            process_deps(${needed_dll})
+          endforeach()
+        endif()
+      endif(NOT DLL_FOUND)
+    endforeach()
+
+    if(NOT DLL_FOUND)
+      is_system_dll(iss "${infile}")
+      if(NOT iss)
+        set(notfound_dlls "${notfound_dlls};${infile}")
+      endif()
+    else(NOT DLL_FOUND)
+      set( alldlls "${alldlls};${bn}" PARENT_SCOPE )
+    endif(NOT DLL_FOUND)
+    set(notfound_dlls "${notfound_dlls}" PARENT_SCOPE )
+  endif()
+endfunction()
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2423a7ba34..ecd58aa583 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -63,13 +63,13 @@ set(Monteverdi_UI_VERSION "1")
 set(
   Monteverdi_VERSION_STRING
   "${Monteverdi_VERSION_MAJOR}.${Monteverdi_VERSION_MINOR}.${Monteverdi_VERSION_PATCH}${Monteverdi_VERSION_SUFFIX}"
-)
+  )
 
 #----------------------------------------------------------------------------
 set(
   Monteverdi_DATA_VERSION_STRING
   "${Monteverdi_DATA_VERSION_MAJOR}.${Monteverdi_DATA_VERSION_MINOR}.${Monteverdi_DATA_VERSION_PATCH}"
-)
+  )
 
 #----------------------------------------------------------------------------
 set(Monteverdi_FLOATING_TYPE "float" CACHE STRING "The type of data in which input images are read (double/float)." )
@@ -234,12 +234,12 @@ set( Monteverdi_CONFIGURE_FILE "ConfigureMonteverdi.h" )
 configure_file(
   ${Monteverdi_SOURCE_DIR}/${Monteverdi_CONFIGURE_FILE}.in
   ${Monteverdi_BINARY_DIR}/${Monteverdi_CONFIGURE_FILE}
-)
+  )
 
 set(Monteverdi_LIBRARY_PROPERTIES
-    VERSION   "${Monteverdi_VERSION_MAJOR}.${Monteverdi_VERSION_MINOR}.${Monteverdi_VERSION_PATCH}"
-    SOVERSION "${Monteverdi_VERSION_MAJOR}.${Monteverdi_VERSION_MINOR}"
-)
+  VERSION   "${Monteverdi_VERSION_MAJOR}.${Monteverdi_VERSION_MINOR}.${Monteverdi_VERSION_PATCH}"
+  SOVERSION "${Monteverdi_VERSION_MAJOR}.${Monteverdi_VERSION_MINOR}"
+  )
 
 #----------------------------------------------------------------------------
 # Include the Packaging subdir after every other dir
@@ -291,9 +291,9 @@ endif()
 #and uses a custom target named packages.
 if(WIN32)
 
-# create_cpack_config()
+  # create_cpack_config()
 
-# stop generation of msvc packages for windows. 04-apr-2016. point OTB.
+  # stop generation of msvc packages for windows. 04-apr-2016. point OTB.
 
   #TODO: fix after 5.4.0 release.
   #set(PKG_NAME ${PROJECT_NAME})
@@ -314,10 +314,10 @@ if(WIN32)
 
     #define the name of final archive based on build architecture. win32 or win64?
     if(MXE_TARGET_DIR MATCHES "i686")
-      set(mxearch x86)
+      set(mxearch "i686")
       set(archive_name ${PKG_NAME}-${PACKAGE_VERSION_STRING}-win32)
     elseif(MXE_TARGET_DIR MATCHES "x86_64")
-      set(mxearch x64)
+      set(mxearch "x86_64")
       set(archive_name ${PKG_NAME}-${PACKAGE_VERSION_STRING}-win64)
     endif()
 
-- 
GitLab