diff --git a/CMake/OTBWrapperMacros.cmake b/CMake/OTBWrapperMacros.cmake index 9b11bd0c04c2b6e232c0e7cb04dfdba913d3920b..0fa8917a29d23213734b47120c7c59f0c1de0d34 100644 --- a/CMake/OTBWrapperMacros.cmake +++ b/CMake/OTBWrapperMacros.cmake @@ -8,7 +8,7 @@ endif() macro(OTB_CREATE_APPLICATION) OTB_PARSE_ARGUMENTS( APPLICATION - "NAME;SOURCES;INCLUDE_DIRS;LINK_LIBRARIES;INSTALL_PATH" + "NAME;SOURCES;INCLUDE_DIRS;LINK_LIBRARIES;BUILD_PATH;INSTALL_PATH" "" ${ARGN}) @@ -33,33 +33,66 @@ macro(OTB_CREATE_APPLICATION) if (NOT APPLICATION_INSTALL_PATH AND OTB_INSTALL_APP_DIR_CM24) set(APPLICATION_INSTALL_PATH ${OTB_INSTALL_APP_DIR_CM24}) endif() - - # Install only if a path has been provided + if (APPLICATION_INSTALL_PATH) install(TARGETS ${APPLICATION_TARGET_NAME} LIBRARY DESTINATION ${APPLICATION_INSTALL_PATH}) - - if (NOT WIN32) - configure_file( ${CMAKE_SOURCE_DIR}/CMake/otbcli.sh.in - ${CMAKE_CURRENT_BINARY_DIR}/otbcli_${APPLICATION_NAME} - @ONLY ) - install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/otbcli_${APPLICATION_NAME} - DESTINATION ${OTB_INSTALL_BIN_DIR_CM24}) - - if (WRAP_QT) - configure_file( ${CMAKE_SOURCE_DIR}/CMake/otbgui.sh.in - ${CMAKE_CURRENT_BINARY_DIR}/otbgui_${APPLICATION_NAME} - @ONLY ) - install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/otbgui_${APPLICATION_NAME} - DESTINATION ${OTB_INSTALL_BIN_DIR_CM24}) - endif(WRAP_QT) - endif(NOT WIN32) endif() + # Generate a quickstart script in the build dir + if (NOT WIN32) + + # What is the path to the applications + # a MODULE target is always treated as LIBRARY + get_target_property(APPLICATION_BINARY_PATH ${APPLICATION_TARGET_NAME} LIBRARY_OUTPUT_DIRECTORY) + + if (NOT APPLICATION_BINARY_PATH) + set(APPLICATION_BINARY_PATH ${CMAKE_CURRENT_BINARY_DIR}) + endif() + + set(SCRIPT_CLI_SOURCE ${OTB_SOURCE_DIR}/CMake/otbcli_app.sh.in) + if (EXISTS ${SCRIPT_CLI_SOURCE}) + # Generate a script in the build dir, next to the cli launcher + configure_file( ${SCRIPT_CLI_SOURCE} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbcli_${APPLICATION_NAME} + @ONLY ) + + # Copy it next to the application shared lib, and give executable rights + file(COPY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbcli_${APPLICATION_NAME} + DESTINATION ${APPLICATION_BINARY_PATH} + FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + + if (APPLICATION_INSTALL_PATH) + # Install a version of this script + install(PROGRAMS ${APPLICATION_BINARY_PATH}/otbcli_${APPLICATION_NAME} + DESTINATION ${APPLICATION_INSTALL_PATH}) + endif() + endif() + + set(SCRIPT_GUI_SOURCE ${OTB_SOURCE_DIR}/CMake/otbgui_app.sh.in) + if (EXISTS ${SCRIPT_GUI_SOURCE}) + # Generate a script in the build dir, next to the cli launcher + configure_file( ${SCRIPT_GUI_SOURCE} + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbgui_${APPLICATION_NAME} + @ONLY ) + + # Copy it next to the application shared lib, and give executable rights + file(COPY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbgui_${APPLICATION_NAME} + DESTINATION ${APPLICATION_BINARY_PATH} + FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + + if (APPLICATION_INSTALL_PATH) + # Install a version of this script + install(PROGRAMS ${APPLICATION_BINARY_PATH}/otbgui_${APPLICATION_NAME} + DESTINATION ${APPLICATION_INSTALL_PATH}) + endif() + endif() + endif(NOT WIN32) + list(APPEND OTB_APPLICATIONS_NAME_LIST ${APPLICATION_NAME}) set(OTB_APPLICATIONS_NAME_LIST ${OTB_APPLICATIONS_NAME_LIST} CACHE STRING "List of all applications" FORCE) - + endmacro(OTB_CREATE_APPLICATION) diff --git a/CMake/otbcli.sh.in b/CMake/otbcli.sh.in index fade46b2bdbc555d75a9913014446beee66b0a0d..6cb5437f7d27b4f66d651d78c6492b732dc697ea 100644 --- a/CMake/otbcli.sh.in +++ b/CMake/otbcli.sh.in @@ -5,11 +5,31 @@ # DO NOT MODIFY # -CURRENT_SCRIPT=$0 CURRENT_SCRIPT_DIR=`dirname $0` -OTB_CLI_LAUNCHER=$CURRENT_SCRIPT_DIR/otbApplicationLauncherCommandLine -OTB_APP_PATH=$CURRENT_SCRIPT_DIR/../lib/otb/applications +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 -$OTB_CLI_LAUNCHER @APPLICATION_NAME@ $OTB_APP_PATH "$@" +# works for build dir +if [ -d @APPLICATION_BINARY_PATH@ ] +then + ITK_AUTOLOAD_PATH=@APPLICATION_BINARY_PATH@:$ITK_AUTOLOAD_PATH +fi +# works for install tree +if [ -d $CURRENT_SCRIPT_DIR/../@OTB_INSTALL_APP_DIR_CM24@ ] +then + ITK_AUTOLOAD_PATH=$CURRENT_SCRIPT_DIR/../@OTB_INSTALL_APP_DIR_CM24@:$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_app.sh.in b/CMake/otbcli_app.sh.in new file mode 100644 index 0000000000000000000000000000000000000000..f24399ea9e8e761980d72c3d8ea76042f11c87c6 --- /dev/null +++ b/CMake/otbcli_app.sh.in @@ -0,0 +1,20 @@ +#!/bin/bash + +# +# Autogenerated by OTB installation process +# DO NOT MODIFY +# + +CURRENT_SCRIPT_DIR=`dirname $0` + +if [ -e $CURRENT_SCRIPT_DIR/otbcli ] +then + # Prefer using the launcher inside the script dir + OTB_CLI_LAUNCHER=$CURRENT_SCRIPT_DIR/otbcli +else + # Use the one from the PATH + OTB_CLI_LAUNCHER=otbcli +fi + +# start the application +$OTB_CLI_LAUNCHER @APPLICATION_NAME@ "$@" diff --git a/CMake/otbgui.sh.in b/CMake/otbgui.sh.in index f9a21ebbab8567cc802ee0842131a43d1d12dfaf..f82c694ad9c551c43f35ff32f9dd43d27ef74cb7 100644 --- a/CMake/otbgui.sh.in +++ b/CMake/otbgui.sh.in @@ -5,11 +5,31 @@ # DO NOT MODIFY # -CURRENT_SCRIPT=$0 CURRENT_SCRIPT_DIR=`dirname $0` -OTB_GUI_LAUNCHER=$CURRENT_SCRIPT_DIR/otbApplicationLauncherQt -OTB_APP_PATH=$CURRENT_SCRIPT_DIR/../lib/otb/applications +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 -$OTB_GUI_LAUNCHER @APPLICATION_NAME@ $OTB_APP_PATH "$@" +# works for build dir +if [ -d @APPLICATION_BINARY_PATH@ ] +then + ITK_AUTOLOAD_PATH=@APPLICATION_BINARY_PATH@:$ITK_AUTOLOAD_PATH +fi +# works for install tree +if [ -d $CURRENT_SCRIPT_DIR/../@OTB_INSTALL_APP_DIR_CM24@ ] +then + ITK_AUTOLOAD_PATH=$CURRENT_SCRIPT_DIR/../@OTB_INSTALL_APP_DIR_CM24@:$ITK_AUTOLOAD_PATH +fi + +# export it to make it available to otbApplicationLauncherCommandLine environment +export ITK_AUTOLOAD_PATH + +# start the application +$OTB_GUI_LAUNCHER "$@" diff --git a/CMake/otbgui_app.sh.in b/CMake/otbgui_app.sh.in new file mode 100644 index 0000000000000000000000000000000000000000..937673929cd7787f2f48223998af0a1cc2dad288 --- /dev/null +++ b/CMake/otbgui_app.sh.in @@ -0,0 +1,20 @@ +#!/bin/bash + +# +# Autogenerated by OTB installation process +# DO NOT MODIFY +# + +CURRENT_SCRIPT_DIR=`dirname $0` + +if [ -e $CURRENT_SCRIPT_DIR/otbcli ] +then + # Prefer using the launcher inside the script dir + OTB_GUI_LAUNCHER=$CURRENT_SCRIPT_DIR/otbgui +else + # Use the one from the PATH + OTB_GUI_LAUNCHER=otbgui +fi + +# start the application +$OTB_GUI_LAUNCHER @APPLICATION_NAME@ "$@" diff --git a/Code/Wrappers/ApplicationLauncherQt/CMakeLists.txt b/Code/Wrappers/ApplicationLauncherQt/CMakeLists.txt index f608da8a55bf98fc672d9c6aaee3a1b56b358fd0..3d37c35f308146b20cfa50b530802eb1f3611b88 100644 --- a/Code/Wrappers/ApplicationLauncherQt/CMakeLists.txt +++ b/Code/Wrappers/ApplicationLauncherQt/CMakeLists.txt @@ -15,3 +15,22 @@ install(TARGETS otbApplicationLauncherQt RUNTIME DESTINATION ${OTB_INSTALL_BIN_DIR_CM24} LIBRARY DESTINATION ${OTB_INSTALL_LIB_DIR_CM24} ARCHIVE DESTINATION ${OTB_INSTALL_LIB_DIR_CM24}) + +# Where we will install the script in the build tree +get_target_property(CLI_OUPUT_DIR otbApplicationLauncherQt RUNTIME_OUTPUT_DIRECTORY) + +# What is the path to the applications +# a MODULE target is always treated as LIBRARY +set(APPLICATION_BINARY_PATH ${CMAKE_LIBRARY_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 +configure_file( ${CMAKE_SOURCE_DIR}/CMake/otbgui.sh.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbgui + @ONLY ) +file(COPY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbgui + DESTINATION ${CLI_OUPUT_DIR} + FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + +install(PROGRAMS ${CLI_OUPUT_DIR}/otbgui + DESTINATION ${OTB_INSTALL_BIN_DIR_CM24}) diff --git a/Code/Wrappers/CommandLine/CMakeLists.txt b/Code/Wrappers/CommandLine/CMakeLists.txt index 9bbf503301921982bb139d2757968167345eb606..4b7d735d9c81410b241a9d48347c2390c18bfcb0 100644 --- a/Code/Wrappers/CommandLine/CMakeLists.txt +++ b/Code/Wrappers/CommandLine/CMakeLists.txt @@ -27,3 +27,22 @@ install(TARGETS otbApplicationLauncherCommandLine RUNTIME DESTINATION ${OTB_INSTALL_BIN_DIR_CM24} LIBRARY DESTINATION ${OTB_INSTALL_LIB_DIR_CM24} ARCHIVE DESTINATION ${OTB_INSTALL_LIB_DIR_CM24}) + +# Where we will install the script in the build tree +get_target_property(CLI_OUPUT_DIR otbApplicationLauncherCommandLine RUNTIME_OUTPUT_DIRECTORY) + +# What is the path to the applications +# a MODULE target is always treated as LIBRARY +set(APPLICATION_BINARY_PATH ${CMAKE_LIBRARY_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 +configure_file( ${CMAKE_SOURCE_DIR}/CMake/otbcli.sh.in + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbcli + @ONLY ) +file(COPY ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/otbcli + DESTINATION ${CLI_OUPUT_DIR} + FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + +install(PROGRAMS ${CLI_OUPUT_DIR}/otbcli + DESTINATION ${OTB_INSTALL_BIN_DIR_CM24})