From 446e81b13c3d600ce51e4dd11b01efb68bdb8f4a Mon Sep 17 00:00:00 2001 From: Julien Malik <julien.malik@c-s.fr> Date: Wed, 7 Dec 2011 14:46:04 +0100 Subject: [PATCH] ENH: generate helper scripts in the build dir also --- CMake/OTBWrapperMacros.cmake | 73 ++++++++++++++----- CMake/otbcli.sh.in | 28 ++++++- CMake/otbcli_app.sh.in | 20 +++++ CMake/otbgui.sh.in | 28 ++++++- CMake/otbgui_app.sh.in | 20 +++++ .../ApplicationLauncherQt/CMakeLists.txt | 19 +++++ Code/Wrappers/CommandLine/CMakeLists.txt | 19 +++++ 7 files changed, 179 insertions(+), 28 deletions(-) create mode 100644 CMake/otbcli_app.sh.in create mode 100644 CMake/otbgui_app.sh.in diff --git a/CMake/OTBWrapperMacros.cmake b/CMake/OTBWrapperMacros.cmake index 9b11bd0c04..0fa8917a29 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 fade46b2bd..6cb5437f7d 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 0000000000..f24399ea9e --- /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 f9a21ebbab..f82c694ad9 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 0000000000..937673929c --- /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 f608da8a55..3d37c35f30 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 9bbf503301..4b7d735d9c 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}) -- GitLab