From 0887d40e2fa17d61879dc9d073b24a90e6479e4e Mon Sep 17 00:00:00 2001
From: Guillaume Pasero <guillaume.pasero@c-s.fr>
Date: Mon, 9 Mar 2015 18:37:35 +0100
Subject: [PATCH] ENH: add otbcli and otbgui, use the same scripts for build
 and install

---
 CMake/OTBApplicationMacros.cmake              | 14 ++++----
 CMake/otbcli.bat.buildtree.in                 | 23 ------------
 ...tbcli.bat.installtree.in => otbcli.bat.in} |  0
 CMake/otbcli.sh.buildtree.in                  | 29 ---------------
 ...{otbcli.sh.installtree.in => otbcli.sh.in} |  0
 CMake/otbgui.bat.buildtree.in                 | 25 -------------
 ...tbgui.bat.installtree.in => otbgui.bat.in} |  0
 CMake/otbgui.sh.buildtree.in                  | 32 -----------------
 ...{otbgui.sh.installtree.in => otbgui.sh.in} |  0
 .../Wrappers/CommandLine/src/CMakeLists.txt   | 35 ++++++++++++++++++
 Modules/Wrappers/QtWidget/src/CMakeLists.txt  | 36 +++++++++++++++++++
 11 files changed, 78 insertions(+), 116 deletions(-)
 delete mode 100644 CMake/otbcli.bat.buildtree.in
 rename CMake/{otbcli.bat.installtree.in => otbcli.bat.in} (100%)
 delete mode 100644 CMake/otbcli.sh.buildtree.in
 rename CMake/{otbcli.sh.installtree.in => otbcli.sh.in} (100%)
 delete mode 100644 CMake/otbgui.bat.buildtree.in
 rename CMake/{otbgui.bat.installtree.in => otbgui.bat.in} (100%)
 delete mode 100644 CMake/otbgui.sh.buildtree.in
 rename CMake/{otbgui.sh.installtree.in => otbgui.sh.in} (100%)

diff --git a/CMake/OTBApplicationMacros.cmake b/CMake/OTBApplicationMacros.cmake
index 9b8922c7bc..ce2141ce0a 100644
--- a/CMake/OTBApplicationMacros.cmake
+++ b/CMake/OTBApplicationMacros.cmake
@@ -13,7 +13,7 @@ macro(otb_create_application)
    # Do not output in the standard lib folder where all shared libs goes.
    # This is to avoid the application factory to look into each and every shared lib
    # for itkLoad symbol
-   set_property(TARGET ${APPLICATION_TARGET_NAME} PROPERTY LIBRARY_OUTPUT_DIRECTORY ${OTB_BINARY_DIR}/lib/otb/applications)
+   set_property(TARGET ${APPLICATION_TARGET_NAME} PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/otb/applications)
 
    # Remove the usual 'lib' prefix to make it clear it is a plugin
    # and not a shared library to link against
@@ -50,11 +50,11 @@ macro(otb_create_application)
       if (WIN32)
         set(SCRIPT_CLI_SOURCE ${OTB_SOURCE_DIR}/CMake/otbcli_app.bat.in)
         set(SCRIPT_CLI_INTERMEDIATE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbcli_${APPLICATION_NAME}.bat)
-        set(SCRIPT_CLI_INSTALLABLE ${APPLICATION_BINARY_PATH}/otbcli_${APPLICATION_NAME}.bat)
+        set(SCRIPT_CLI_INSTALLABLE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/otbcli_${APPLICATION_NAME}.bat)
       else()
         set(SCRIPT_CLI_SOURCE ${OTB_SOURCE_DIR}/CMake/otbcli_app.sh.in)
         set(SCRIPT_CLI_INTERMEDIATE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbcli_${APPLICATION_NAME})
-        set(SCRIPT_CLI_INSTALLABLE ${APPLICATION_BINARY_PATH}/otbcli_${APPLICATION_NAME})
+        set(SCRIPT_CLI_INSTALLABLE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/otbcli_${APPLICATION_NAME})
       endif()
 
       if (EXISTS ${SCRIPT_CLI_SOURCE})
@@ -65,7 +65,7 @@ macro(otb_create_application)
 
           # Copy it next to the application shared lib, and give executable rights
           file(COPY ${SCRIPT_CLI_INTERMEDIATE}
-               DESTINATION ${APPLICATION_BINARY_PATH}
+               DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
                FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
 
           # Install a version of this script if we are inside the OTB build
@@ -77,11 +77,11 @@ macro(otb_create_application)
       if (WIN32)
         set(SCRIPT_GUI_SOURCE ${OTB_SOURCE_DIR}/CMake/otbgui_app.bat.in)
         set(SCRIPT_GUI_INTERMEDIATE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbgui_${APPLICATION_NAME}.bat)
-        set(SCRIPT_GUI_INSTALLABLE ${APPLICATION_BINARY_PATH}/otbgui_${APPLICATION_NAME}.bat)
+        set(SCRIPT_GUI_INSTALLABLE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/otbgui_${APPLICATION_NAME}.bat)
       else()
         set(SCRIPT_GUI_SOURCE ${OTB_SOURCE_DIR}/CMake/otbgui_app.sh.in)
         set(SCRIPT_GUI_INTERMEDIATE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbgui_${APPLICATION_NAME})
-        set(SCRIPT_GUI_INSTALLABLE ${APPLICATION_BINARY_PATH}/otbgui_${APPLICATION_NAME})
+        set(SCRIPT_GUI_INSTALLABLE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/otbgui_${APPLICATION_NAME})
       endif()
 
       if (EXISTS ${SCRIPT_GUI_SOURCE})
@@ -92,7 +92,7 @@ macro(otb_create_application)
 
           # Copy it next to the application shared lib, and give executable rights
           file(COPY ${SCRIPT_GUI_INTERMEDIATE}
-               DESTINATION ${APPLICATION_BINARY_PATH}
+               DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
                FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
 
           # Install a version of this script if we are inside the OTB build
diff --git a/CMake/otbcli.bat.buildtree.in b/CMake/otbcli.bat.buildtree.in
deleted file mode 100644
index a5745e171f..0000000000
--- a/CMake/otbcli.bat.buildtree.in
+++ /dev/null
@@ -1,23 +0,0 @@
-@echo off
-::
-:: Autogenerated by OTB installation process
-:: DO NOT MODIFY
-::
-
-set CURRENT_SCRIPT_DIR=%~dp0
-
-if exist %CURRENT_SCRIPT_DIR%otbApplicationLauncherCommandLine.exe (
-  :: Prefer using the launcher inside the script dir
-  set OTB_CLI_LAUNCHER=%CURRENT_SCRIPT_DIR%otbApplicationLauncherCommandLine.exe
-) else (
-  :: Use the one from the PATH
-  set OTB_CLI_LAUNCHER=otbApplicationLauncherCommandLine.exe
-)
-
-:: works for build dir
-if exist @APPLICATION_BINARY_PATH@ (
-  set ITK_AUTOLOAD_PATH=@APPLICATION_BINARY_PATH@;%ITK_AUTOLOAD_PATH%
-)
-
-:: start the application
-%OTB_CLI_LAUNCHER% %*
diff --git a/CMake/otbcli.bat.installtree.in b/CMake/otbcli.bat.in
similarity index 100%
rename from CMake/otbcli.bat.installtree.in
rename to CMake/otbcli.bat.in
diff --git a/CMake/otbcli.sh.buildtree.in b/CMake/otbcli.sh.buildtree.in
deleted file mode 100644
index 847b707512..0000000000
--- a/CMake/otbcli.sh.buildtree.in
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/bash
-
-#
-# Autogenerated by OTB installation process
-# DO NOT MODIFY
-#
-
-CURRENT_SCRIPT_DIR=`dirname $0`
-
-if [ -e $CURRENT_SCRIPT_DIR/otbApplicationLauncherCommandLine ]
-then
-  # Prefer using the launcher inside the script dir
-  OTB_CLI_LAUNCHER=$CURRENT_SCRIPT_DIR/otbApplicationLauncherCommandLine
-else
-  # Use the one from the PATH
-  OTB_CLI_LAUNCHER=otbApplicationLauncherCommandLine
-fi
-
-# works for build dir
-if [ -d @APPLICATION_BINARY_PATH@ ]
-then
-  ITK_AUTOLOAD_PATH=@APPLICATION_BINARY_PATH@:$ITK_AUTOLOAD_PATH
-fi
-
-# export it to make it available to otbApplicationLauncherCommandLine environment
-export ITK_AUTOLOAD_PATH
-
-# start the application
-$OTB_CLI_LAUNCHER "$@"
diff --git a/CMake/otbcli.sh.installtree.in b/CMake/otbcli.sh.in
similarity index 100%
rename from CMake/otbcli.sh.installtree.in
rename to CMake/otbcli.sh.in
diff --git a/CMake/otbgui.bat.buildtree.in b/CMake/otbgui.bat.buildtree.in
deleted file mode 100644
index 351c156455..0000000000
--- a/CMake/otbgui.bat.buildtree.in
+++ /dev/null
@@ -1,25 +0,0 @@
-@echo off
-::
-:: Autogenerated by OTB installation process
-:: DO NOT MODIFY
-::
-
-set CURRENT_SCRIPT_DIR=%~dp0
-
-if exist %CURRENT_SCRIPT_DIR%otbApplicationLauncherQt.exe (
-  :: Prefer using the launcher inside the script dir
-  set OTB_GUI_LAUNCHER=%CURRENT_SCRIPT_DIR%otbApplicationLauncherQt.exe
-) else (
-  :: Use the one from the PATH
-  set OTB_GUI_LAUNCHER=otbApplicationLauncherQt.exe
-)
-
-:: works for build dir
-if exist @APPLICATION_BINARY_PATH@ (
-  set ITK_AUTOLOAD_PATH=@APPLICATION_BINARY_PATH@;%ITK_AUTOLOAD_PATH%
-)
-
-set LC_NUMERIC=C
-
-:: start the application
-%OTB_GUI_LAUNCHER% %*
diff --git a/CMake/otbgui.bat.installtree.in b/CMake/otbgui.bat.in
similarity index 100%
rename from CMake/otbgui.bat.installtree.in
rename to CMake/otbgui.bat.in
diff --git a/CMake/otbgui.sh.buildtree.in b/CMake/otbgui.sh.buildtree.in
deleted file mode 100644
index 62233dda32..0000000000
--- a/CMake/otbgui.sh.buildtree.in
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/bash
-
-#
-# Autogenerated by OTB installation process
-# DO NOT MODIFY
-#
-
-CURRENT_SCRIPT_DIR=`dirname $0`
-
-if [ -e $CURRENT_SCRIPT_DIR/otbApplicationLauncherQt ]
-then
-  # Prefer using the launcher inside the script dir
-  OTB_GUI_LAUNCHER=$CURRENT_SCRIPT_DIR/otbApplicationLauncherQt
-else
-  # Use the one from the PATH
-  OTB_GUI_LAUNCHER=otbApplicationLauncherQt
-fi
-
-# use the buildtree path to applications
-if [ -d @APPLICATION_BINARY_PATH@ ]
-then
-  ITK_AUTOLOAD_PATH=@APPLICATION_BINARY_PATH@:$ITK_AUTOLOAD_PATH
-fi
-
-# export it to make it available to otbApplicationLauncherCommandLine environment
-export ITK_AUTOLOAD_PATH
-
-# avoid numerical issues caused by locale
-export LC_NUMERIC=C
-
-# start the application
-$OTB_GUI_LAUNCHER "$@"
diff --git a/CMake/otbgui.sh.installtree.in b/CMake/otbgui.sh.in
similarity index 100%
rename from CMake/otbgui.sh.installtree.in
rename to CMake/otbgui.sh.in
diff --git a/Modules/Wrappers/CommandLine/src/CMakeLists.txt b/Modules/Wrappers/CommandLine/src/CMakeLists.txt
index 4aaf60c8fc..f47770dded 100644
--- a/Modules/Wrappers/CommandLine/src/CMakeLists.txt
+++ b/Modules/Wrappers/CommandLine/src/CMakeLists.txt
@@ -14,3 +14,38 @@ otb_module_target(OTBCommandLine)
 add_executable(otbApplicationLauncherCommandLine otbApplicationLauncherCommandLine.cxx)
 target_link_libraries(otbApplicationLauncherCommandLine OTBCommandLine)
 otb_module_target(otbApplicationLauncherCommandLine)
+
+# Where we will install the script in the build tree
+get_target_property(CLI_OUPUT_DIR otbApplicationLauncherCommandLine RUNTIME_OUTPUT_DIRECTORY)
+
+# Generate a script in the build dir, next to the cli launcher
+# Need a two-step process since configure_file don't support permissions
+file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/Scripts)
+
+if (WIN32)
+configure_file( ${CMAKE_SOURCE_DIR}/CMake/otbcli.bat.in
+                ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/Scripts/otbcli.bat
+                @ONLY )
+file(COPY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/Scripts/otbcli.bat
+     DESTINATION ${CLI_OUPUT_DIR}
+     FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+
+# TODO : test if NO_INSTALL is set
+install(PROGRAMS ${CLI_OUPUT_DIR}/otbcli.bat
+        DESTINATION ${OTBCommandLine_INSTALL_RUNTIME_DIR}
+        COMPONENT Runtime)
+
+else()
+configure_file( ${CMAKE_SOURCE_DIR}/CMake/otbcli.sh.in
+                ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/Scripts/otbcli
+                @ONLY )
+file(COPY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/Scripts/otbcli
+     DESTINATION ${CLI_OUPUT_DIR}
+     FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+
+# TODO : test if NO_INSTALL is set
+install(PROGRAMS ${CLI_OUPUT_DIR}/otbcli
+        DESTINATION ${OTBCommandLine_INSTALL_RUNTIME_DIR}
+        COMPONENT Runtime)
+
+endif()
diff --git a/Modules/Wrappers/QtWidget/src/CMakeLists.txt b/Modules/Wrappers/QtWidget/src/CMakeLists.txt
index c7c049bc76..7b208305b8 100644
--- a/Modules/Wrappers/QtWidget/src/CMakeLists.txt
+++ b/Modules/Wrappers/QtWidget/src/CMakeLists.txt
@@ -89,3 +89,39 @@ target_link_libraries(otbApplicationLauncherQt
   ${OTBQt4_LIBRARIES}
   )
 otb_module_target(otbApplicationLauncherQt)
+
+# Where we will install the script in the build tree
+get_target_property(GUI_OUPUT_DIR otbApplicationLauncherQt RUNTIME_OUTPUT_DIRECTORY)
+
+# Generate a script in the build dir, next to the gui launcher
+# Need a two-step process since configure_file don't support permissions
+file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/Scripts)
+
+
+if (WIN32)
+configure_file( ${CMAKE_SOURCE_DIR}/CMake/otbgui.bat.in
+                ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/Scripts/otbgui.bat
+                @ONLY )
+file(COPY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/Scripts/otbgui.bat
+     DESTINATION ${GUI_OUPUT_DIR}
+     FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+
+# TODO : test if NO_INSTALL is set
+install(PROGRAMS ${GUI_OUPUT_DIR}/otbgui.bat
+        DESTINATION ${OTBQtWidget_INSTALL_RUNTIME_DIR}
+        COMPONENT Runtime)
+
+else()
+configure_file( ${CMAKE_SOURCE_DIR}/CMake/otbgui.sh.in
+                ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/Scripts/otbgui
+                @ONLY )
+file(COPY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/Scripts/otbgui
+     DESTINATION ${GUI_OUPUT_DIR}
+     FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+
+# TODO : test if NO_INSTALL is set
+install(PROGRAMS ${GUI_OUPUT_DIR}/otbgui
+        DESTINATION ${OTBQtWidget_INSTALL_RUNTIME_DIR}
+        COMPONENT Runtime)
+
+endif()
-- 
GitLab