From 37068cbdf24e45513d3c2f05b47e326aa300af5d Mon Sep 17 00:00:00 2001
From: Rashad Kanavath <rashad.kanavath@c-s.fr>
Date: Tue, 5 Apr 2016 18:18:17 +0200
Subject: [PATCH] REFAC: cmake macros for mingw package

---
 CMake/MinGWPackage.cmake  | 117 +++-------------
 CMake/PackageHelper.cmake | 284 +++++++++++++++++++++++++++++---------
 CMakeLists.txt            |   4 +-
 3 files changed, 242 insertions(+), 163 deletions(-)

diff --git a/CMake/MinGWPackage.cmake b/CMake/MinGWPackage.cmake
index 9f305f236d..1519fb9463 100644
--- a/CMake/MinGWPackage.cmake
+++ b/CMake/MinGWPackage.cmake
@@ -1,109 +1,36 @@
 macro(package_mingw)
-  cmake_parse_arguments(PACKAGE  "" "PREFIX_DIR;ARCH;MXEROOT" "SEARCHDIRS;PEFILES" ${ARGN} )
-  if("${PACKAGE_ARCH}" STREQUAL "x86")
-    set(MXE_BIN_DIR "${PACKAGE_MXEROOT}/usr/i686-w64-mingw32.shared/bin")
-    set(MXE_OBJDUMP "${PACKAGE_MXEROOT}/usr/bin/i686-w64-mingw32.shared-objdump")
-  elseif("${PACKAGE_ARCH}" STREQUAL "x64")
-    set(MXE_BIN_DIR "${PACKAGE_MXEROOT}/usr/x86_64-w64-mingw32.shared/bin")
-    set(MXE_OBJDUMP "${PACKAGE_MXEROOT}/usr/bin/x86_64-w64-mingw32.shared-objdump")
+  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")
   endif()
 
+#  message()
   #guess install directory from OTB_MODULES_DIR
   set(OTB_INSTALL_DIR ${OTB_MODULES_DIR}/../../../..)
-  set(OTB_APPLICATIONS_DIR ${OTB_MODULES_DIR}/../../../../lib/otb/applications)
+  set(OTB_APPLICATIONS_DIR ${OTB_MODULES_DIR}/../../../otb/applications)
 
+  set(MXE_BIN_DIR "${DEPENDENCIES_INSTALL_DIR}/bin")
   file(GLOB MXE_GCC_LIB_DIR "${MXE_BIN_DIR}/gcc*")
-  list(APPEND PACKAGE_SEARCHDIRS ${MXE_GCC_LIB_DIR})
-  list(APPEND PACKAGE_SEARCHDIRS ${MXE_BIN_DIR})
-  list(APPEND PACKAGE_SEARCHDIRS "${MXE_BIN_DIR}/../qt/bin") #Qt
-  list(APPEND PACKAGE_SEARCHDIRS "${MXE_BIN_DIR}/../qt/lib") #Qwt
-  list(APPEND PACKAGE_SEARCHDIRS "${CMAKE_INSTALL_PREFIX}/bin") #mvd
-  list(APPEND PACKAGE_SEARCHDIRS "${OTB_APPLICATIONS_DIR}") #otb apps
-  list(APPEND PACKAGE_SEARCHDIRS "${OTB_INSTALL_DIR}/bin") #otbApplicationLauncher*.exe
+  list(APPEND PKG_SEARCHDIRS ${MXE_GCC_LIB_DIR})
+  list(APPEND PKG_SEARCHDIRS ${MXE_BIN_DIR})
+  list(APPEND PKG_SEARCHDIRS "${MXE_BIN_DIR}/../qt/bin") #Qt
+  list(APPEND PKG_SEARCHDIRS "${MXE_BIN_DIR}/../qt/lib") #Qwt
+  list(APPEND PKG_SEARCHDIRS "${CMAKE_INSTALL_PREFIX}/bin") #mvd
+  list(APPEND PKG_SEARCHDIRS "${OTB_APPLICATIONS_DIR}") #otb apps
+  list(APPEND PKG_SEARCHDIRS "${OTB_INSTALL_DIR}/bin") #otbApplicationLauncher*.exe
 
-  if(NOT PACKAGE_PEFILES)
-    list(APPEND PACKAGE_PEFILES "${CMAKE_INSTALL_PREFIX}/bin/monteverdi.exe")
-    list(APPEND PACKAGE_PEFILES "${CMAKE_INSTALL_PREFIX}/bin/mapla.exe")
-    list(APPEND PACKAGE_PEFILES "${OTB_INSTALL_DIR}/bin/otbApplicationLauncherCommandLine.exe")
-    list(APPEND PACKAGE_PEFILES "${OTB_INSTALL_DIR}/bin/otbApplicationLauncherQt.exe") #OTBQtWidget must exists when you are building OTB
+  clear_package_staging_directory()
 
-    if(EXISTS "${OTB_INSTALL_DIR}/bin/iceViewer.exe")
-      list(APPEND PACKAGE_PEFILES "${OTB_INSTALL_DIR}/bin/iceViewer.exe") #iceviewer
-    endif()
-  endif()
-
-  install_common(${PACKAGE_PREFIX_DIR})
-
-  #dependency resolution based on copydlldeps.sh from mxe by Timothy Gu
-  file(GLOB otbapps_list ${OTB_APPLICATIONS_DIR}/otbapp_*dll) # /lib/otb
-  list(APPEND PACKAGE_PEFILES ${otbapps_list})
-
-  set(alldlls)
-  set(notfound_dlls)
-  foreach(infile ${PACKAGE_PEFILES})
-    get_filename_component(bn ${infile} NAME)
-    process_deps(${bn})
-  endforeach()
-
-  list(LENGTH notfound_dlls nos)
-  if(${nos} GREATER 0)
-    string(REPLACE ".dll" ".dll," notfound ${notfound_dlls})
-    message(FATAL_ERROR "Following dlls were not found: ${notfound}
-                   Please consider adding their paths to SEARCHDIRS when calling package_mingw macro.")
-  endif()
+  set(PKG_PEFILES)
 
+  configure_package()
 
 endmacro(package_mingw)
 
-set(SYSTEM_DLLS
-  msvc.*dll
-  user32.dll
-  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
-  winspool.drv)
-
-## 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_})
-      set(${matched} TRUE)
-    endif()
-  endforeach()
-endmacro()
-
-macro(list_contains var value)
-  set(${var})
-  foreach(value2 ${ARGN})
-    if(${value} STREQUAL ${value2})
-      set(${var} TRUE)
-    else()
-      string(TOLOWER ${value} value_)
-      string(TOLOWER ${value2} value2_)
-      if(${value_} STREQUAL ${value2_})
-        set(${var} TRUE)
-      endif()
-    endif()
-  endforeach(value2)
-endmacro()
 
 function(process_deps infile)
 
@@ -112,7 +39,7 @@ function(process_deps infile)
   list_contains(contains "${bn}" "${alldlls}")
   if(NOT contains)
     set(DLL_FOUND FALSE)
-    foreach(SEARCHDIR ${PACKAGE_SEARCHDIRS})
+    foreach(SEARCHDIR ${PKG_SEARCHDIRS})
       if(NOT DLL_FOUND)
         if(EXISTS ${SEARCHDIR}/${infile})
           set(DLL_FOUND TRUE)
@@ -127,7 +54,7 @@ function(process_deps infile)
           message(STATUS "Processing ${SEARCHDIR}/${infile}")
           if(NOT "${infile}" MATCHES "otbapp")
             install(FILES "${SEARCHDIR}/${infile}"
-              DESTINATION ${PACKAGE_PREFIX_DIR}/bin)
+              DESTINATION ${PKG_STAGE_DIR}/bin)
           else()
             ##message(STATUS "skipping..${infile}")
           endif()
diff --git a/CMake/PackageHelper.cmake b/CMake/PackageHelper.cmake
index 6085b387b0..77f683f282 100644
--- a/CMake/PackageHelper.cmake
+++ b/CMake/PackageHelper.cmake
@@ -1,3 +1,72 @@
+set(WINDOWS_SYSTEM_DLLS
+  msvc.*dll
+  user32.dll
+  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
+  winspool.drv)
+
+SET(UNIX_SYSTEM_DLLS
+  libm.so
+  libc.so
+  libstdc*
+  libgcc_s.so
+  librt.so
+  libdl.so
+  libpthread.so
+  libidn.so
+  libgomp.so*
+  ld-linux-x86-64.so*
+  libX11.so*
+  libXext.so*
+  libXau.so*
+  libXdmcp.so*
+  libXxf86vm.so*
+  libdrm.so.2
+  libGL.so*
+  libGLU.so*
+  )
+set(SYSTEM_DLLS "${UNIX_SYSTEM_DLLS}")
+if(WIN32 OR CMAKE_CROSSCOMPILING)
+  set(SYSTEM_DLLS "${WINDOWS_SYSTEM_DLLS}")
+endif()
+
+## 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_})
+      set(${matched} TRUE)
+    endif()
+  endforeach()
+endmacro()
+
+macro(list_contains var value)
+  set(${var})
+  foreach(value2 ${ARGN})
+    if(${value} STREQUAL ${value2})
+      set(${var} TRUE)
+    endif()
+  endforeach(value2)
+endmacro()
+
 # Get the translation files coming with Qt, and install them in the bundle
 # They are loaded by Monteverdi.
 function(get_qt_translation_files RESULT)
@@ -15,53 +84,32 @@ function(get_qt_translation_files RESULT)
     set(${RESULT} ${translation_files} PARENT_SCOPE)
 endfunction()
 
-
-function(install_common outdir)
+function(install_common include_mvd)
 
   #a convenient cmake var for storing <prefix>
-  set(PKG_PREFIX_DIR "${outdir}")
+#  set(PKG_STAGE_DIR "${stage_dir}")
 
   #a convenient cmake var for storing <prefix>/bin
-  set(PKG_BIN_DIR "${PKG_PREFIX_DIR}/bin")
-
-  #name of qt's sqlite plugin. Varies with platform/OS
-  set(PKG_QTSQLITE_FILENAME "qsqlite4.dll")
-
-  #root folder where qt plugins are installed
-  set(PKG_QTPLUGINS_DIR "${PKG_PREFIX_DIR}/lib/qt4/plugins")
+  set(PKG_STAGE_BIN_DIR "${PKG_STAGE_DIR}/bin")
 
   #root folder where otb applications are installed
-  set(PKG_OTBLIBS_DIR "${PKG_PREFIX_DIR}/lib/otb")
-
-  #qt4's distributes some translation of common message string used in Qt.
-  #This are provided with any qt installation. We reuse them in otb package
-  #so as not to reinvent the wheels.
-  set(PKG_I18N_DIR "${PKG_PREFIX_DIR}/lib/qt4/translations")
-
-  #<prefix>/share for otb i18n directory. This is different from qt's i18N directory
-  #which is <prefix>/share/qt4/translations.
-  set(PKG_OTB_I18N_DIR "${PACKAGE_PREFIX_DIR}/${Monteverdi_INSTALL_DATA_DIR}/i18n")
+  set(PKG_OTBLIBS_DIR "${PKG_STAGE_DIR}/lib/otb")
 
   #<prefix>/share for gdal data files
-  set(PKG_DATA_DIR "${PKG_PREFIX_DIR}/share")
+  set(PKG_SHARE_DEST_DIR ${PKG_STAGE_DIR}/share)
 
-  #place to install where qt.conf
-  set(PKG_QTCONF_DIR  "${CMAKE_INSTALL_PREFIX}/${PKG_BIN_DIR}")
+  set(PKG_SHARE_SOURCE_DIR ${DEPENDENCIES_INSTALL_DIR}/share)
 
-  #a convenient cmake var to store the otb's install prefix
-  #guess install directory from OTB_MODULES_DIR
-  set(OTB_INSTALL_DIR ${OTB_MODULES_DIR}/../../../..)
+  if(NOT OTB_APPS_LIST)
+    message(FATAL_ERROR "you must set 'OTB_APPS_LIST' before calling this method")
+  endif()
 
   # Just check if required variables are defined.
   foreach(req
-      Monteverdi_SOURCE_DIR
-      Monteverdi_BINARY_DIR
-      MXE_BIN_DIR
-      OTB_MODULES_DIR
-      PACKAGE_PEFILES
-      QT_PLUGINS_DIR
+      DEPENDENCIES_INSTALL_DIR
+      OTB_APPLICATIONS_DIR
+      PKG_STAGE_DIR
       CMAKE_INSTALL_PREFIX
-      PKG_QTCONF_DIR
       OTB_INSTALL_DIR
       )
     if(NOT DEFINED ${req})
@@ -71,7 +119,7 @@ function(install_common outdir)
   endforeach(req)
 
   #one for debugging..
-  install(CODE "message(\"CMake/PackageHelper.cmake:install_common(${outdir})\n${vars}\n\")")
+#  install(CODE "message(\"CMake/PackageHelper.cmake:install_common(${outdir})\n${vars}\n\")")
 
   ####################### install cli and gui scripts ###########################
   file(GLOB PKG_APP_SCRIPTS
@@ -83,33 +131,85 @@ function(install_common outdir)
     message(WARNING "PKG_APP_SCRIPTS is empty: ${PKG_APP_SCRIPTS}")
   endif()
 
-  install(FILES ${PKG_APP_SCRIPTS}
-    DESTINATION ${PKG_BIN_DIR})
-
-  foreach(exe_file ${PACKAGE_PEFILES})
-    #check ext is .exe
-    get_filename_component(FILE_EXT ${exe_file} EXT)
-    string(TOLOWER ${FILE_EXT} file_ext)
-    if( ${file_ext} STREQUAL ".exe")
-      get_filename_component(base_name ${exe_file} NAME_WE)
-      #check if a .bat exists?
-      if(EXISTS ${Monteverdi_SOURCE_DIR}/Packaging/Windows/${base_name}.bat)
-        install(FILES ${Monteverdi_SOURCE_DIR}/Packaging/Windows/${base_name}.bat
-          DESTINATION ${PKG_BIN_DIR})
-      endif()
+  ##################### install cli and gui scripts #######################
+  install(FILES ${PKG_APP_SCRIPTS}  DESTINATION ${PKG_STAGE_BIN_DIR})
+
+  if(include_mvd)
+    install_monteverdi_files()
+  endif()
+
+  ####################### install GDAL data ############################
+  set(GDAL_DATA ${PKG_SHARE_SOURCE_DIR}/gdal)
+  if(NOT EXISTS "${GDAL_DATA}/epsg.wkt")
+    message(FATAL_ERROR "Cannot generate package without GDAL_DATA : ${GDAL_DATA} ${DEPENDENCIES_INSTALL_DIR}")
+  endif()
+
+  install(DIRECTORY ${GDAL_DATA} DESTINATION ${PKG_SHARE_DEST_DIR})
+
+  ####################### install GeoTIFF data ###########################
+  install(DIRECTORY ${PKG_SHARE_SOURCE_DIR}/epsg_csv DESTINATION ${PKG_SHARE_DEST_DIR})
+
+  ####################### install OSSIM data ###########################
+  install(DIRECTORY ${PKG_SHARE_SOURCE_DIR}/ossim DESTINATION ${PKG_SHARE_DEST_DIR})
+
+  ####################### Install otb applications ######################
+  install(DIRECTORY "${OTB_APPLICATIONS_DIR}"  DESTINATION ${PKG_OTBLIBS_DIR})
+
+endfunction()
+
+function(install_monteverdi_files)
+
+  #name/ext of qt's sqlite plugin. Varies with platform/OS
+  if(WIN32 OR CMAKE_CROSSCOMPILING)
+    set(PKG_QTSQLITE_FILENAME "qsqlite4.dll")
+  elseif(APPLE)
+    set(PKG_QTSQLITE_FILENAME "qsqlite.dylib")
+  elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux" AND NOT CMAKE_CROSSCOMPILING)
+    set(PKG_QTSQLITE_FILENAME "libqsqlite.so")
+  else()
+    message(FATAL_ERROR "install_monteverdi_files: Unknown OS/Platform")
+  endif()
+
+  #root folder where qt plugins are installed
+  set(PKG_QTPLUGINS_DIR "${PKG_STAGE_DIR}/lib/qt4/plugins")
+
+  #qt4's distributes some translation of common message string used in Qt.
+  #This are provided with any qt installation. We reuse them in otb package
+  #so as not to reinvent the wheels.
+  set(PKG_I18N_DIR "${PKG_STAGE_DIR}/lib/qt4/translations")
+
+  #<prefix>/share for otb i18n directory. This is different from qt's i18N directory
+  #which is <prefix>/share/qt4/translations.
+  set(PKG_OTB_I18N_DIR "${PKG_STAGE_DIR}/${Monteverdi_INSTALL_DATA_DIR}/i18n")
+
+  # Just check if required variables are defined.
+  foreach(req
+      Monteverdi_SOURCE_DIR
+      QT_PLUGINS_DIR
+      PKG_STAGE_BIN_DIR
+      PKG_QTSQLITE_FILENAME
+      PKG_QTPLUGINS_DIR
+      PKG_I18N_DIR
+      PKG_OTB_I18N_DIR
+      )
+    if(NOT DEFINED ${req} OR "${${req}}" STREQUAL "")
+      message(FATAL_ERROR "you must set ${req} before calling this method")
     endif()
-  endforeach()
+    set(vars "${vars}  ${req}=[${${req}}]\n")
+  endforeach(req)
+
+  #message("CMake/PackageHelper.cmake:install_common(${stage_dir})\n${vars}\n")
 
   ##################### install mingw otbenv.cmd ##########################
   if(EXISTS ${Monteverdi_SOURCE_DIR}/Packaging/Windows/mingw/otbenv.cmd)
     install(FILES ${Monteverdi_SOURCE_DIR}/Packaging/Windows/mingw/otbenv.cmd
-      DESTINATION ${PKG_PREFIX_DIR})
+      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
-      DESTINATION ${PKG_BIN_DIR})
+      DESTINATION ${PKG_STAGE_BIN_DIR})
   endif()
 
   ####################### install sqldriver plugin ########################
@@ -121,8 +221,7 @@ function(install_common outdir)
   get_qt_translation_files(QT_TRANSLATIONS_FILES)
 
   #install all files in ${QT_TRANSLATIONS_FILES}
-  install(FILES ${QT_TRANSLATIONS_FILES}
-    DESTINATION ${PKG_I18N_DIR})
+  install(FILES ${QT_TRANSLATIONS_FILES}  DESTINATION ${PKG_I18N_DIR})
 
   #translation of monteverdi specific strings
   file(GLOB APP_TS_FILES ${Monteverdi_SOURCE_DIR}/i18n/*.ts) # qm files
@@ -132,23 +231,74 @@ function(install_common outdir)
       DESTINATION ${PKG_OTB_I18N_DIR})
   endforeach()
 
-  ####################### install GDAL data ############################
-  set(GDAL_DATA ${MXE_BIN_DIR}/../share/gdal)
-  if(NOT EXISTS "${GDAL_DATA}/epsg.wkt")
-    message(FATAL_ERROR "Cannot generate package without GDAL_DATA : ${GDAL_DATA} ${MXE_BIN_DIR}")
+endfunction()
+
+macro(clear_package_staging_directory)
+  message(STATUS "Clearing package staging directory: ${CMAKE_INSTALL_PREFIX}/${PKG_STAGE_DIR}")
+  execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_INSTALL_PREFIX}/${PKG_STAGE_DIR}")
+endmacro()
+
+function(configure_package)
+
+  set(EXE_EXT "")
+  set(LIB_EXT "*so")
+  set(SCR_EXT ".sh")
+  if(WIN32 OR CMAKE_CROSSCOMPILING)
+    set(EXE_EXT ".exe")
+    set(LIB_EXT "*dll")
+    set(SCR_EXT ".bat")
+  endif()
+
+  foreach(EXE_FILE
+      monteverdi
+      mapla)
+    if(EXISTS "${CMAKE_INSTALL_PREFIX}/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/Windows/${EXE_FILE}${SCR_EXT})
+        install(FILES
+          ${Monteverdi_SOURCE_DIR}/Packaging/Windows/${EXE_FILE}${SCR_EXT}
+          DESTINATION
+          "${PKG_STAGE_DIR}/bin")
+    endif()
   endif()
 
-  install(DIRECTORY ${GDAL_DATA}
-    DESTINATION ${PKG_DATA_DIR})
+  endforeach()
 
-  ####################### Check otb applications ########################
-  file(GLOB OTB_APPS_LIST ${OTB_MODULES_DIR}/../../../otb/applications/otbapp_*dll) # /lib/otb
-  if(NOT OTB_APPS_LIST)
-    message(FATAL_ERROR "No OTB-applications detected")
+  foreach(EXE_FILE otbApplicationLauncherQt
+      iceViewer
+      otbTestDriver
+      otbApplicationLauncherCommandLine)
+    if(EXISTS "${OTB_INSTALL_DIR}/bin/${EXE_FILE}${EXE_EXT}")
+      list(APPEND PKG_PEFILES
+        "${OTB_INSTALL_DIR}/bin/${EXE_FILE}${EXE_EXT}")
+    endif()
+  endforeach()
+
+  file(GLOB OTB_APPS_LIST ${OTB_APPLICATIONS_DIR}/otbapp_${LIB_EXT}) # /lib/otb
+
+  set(include_mvd 0)
+  if(DEFINED Monteverdi_SOURCE_DIR)
+    set(include_mvd 1)
   endif()
 
-  ####################### Install otb applications ######################
-  install(DIRECTORY "${OTB_MODULES_DIR}/../../../otb/applications"
-    DESTINATION ${PKG_OTBLIBS_DIR})
+  install_common(${include_mvd})
 
-endfunction()
+  list(APPEND PKG_PEFILES ${OTB_APPS_LIST})
+
+  set(alldlls)
+  set(notfound_dlls)
+  foreach(infile ${PKG_PEFILES})
+    get_filename_component(bn ${infile} NAME)
+    process_deps(${bn})
+  endforeach()
+
+  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.")
+  endif()
+
+endfunction()
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 75fb331396..624dfef3d1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -331,9 +331,11 @@ if(WIN32)
     file(WRITE "${CMAKE_BINARY_DIR}/_mingw/CMakeLists.txt"
       "cmake_minimum_required(VERSION 2.6)
        include(CMakeParseArguments)
+       include(CMakeDetermineSystem)
        set(Monteverdi_SOURCE_DIR \"${Monteverdi_SOURCE_DIR}\")
        set(OTB_MODULES_DIR \"${OTB_MODULES_DIR}\")
        set(QT_PLUGINS_DIR \"${QT_PLUGINS_DIR}\")
+       set(CMAKE_CROSSCOMPILING ON)
        set(QT_TRANSLATIONS_DIR \"${QT_TRANSLATIONS_DIR}\")
        set(Monteverdi_BINARY_DIR \"${CMAKE_BINARY_DIR}\")
        set(CMAKE_INSTALL_PREFIX \"${CMAKE_INSTALL_PREFIX}\")
@@ -343,7 +345,7 @@ if(WIN32)
         package_mingw(
         ARCH \"${mxearch}\"
         MXEROOT \"${mxeroot}\"
-        PREFIX_DIR \"${archive_name}\"
+        STAGE_DIR \"${archive_name}\"
         SEARCHDIRS \"\")")
 
     add_custom_target(InstallProject
-- 
GitLab