diff --git a/CMake/WrapperMacros.cmake b/CMake/WrapperMacros.cmake index 949b44bfcd9bb42a4be0bb2916216e56a64d708e..664c919a2e16576dede0b47675f9e29a50bacf72 100644 --- a/CMake/WrapperMacros.cmake +++ b/CMake/WrapperMacros.cmake @@ -3,23 +3,36 @@ include(ParseArguments) macro(OTB_CREATE_APPLICATION) PARSE_ARGUMENTS( APPLICATION - "NAME;SOURCES;INCLUDE_DIRS;LINK_LIBRARIES" + "NAME;SOURCES;INCLUDE_DIRS;LINK_LIBRARIES;INSTALL_PATH" "" ${ARGN}) set( APPLICATION_TARGET_NAME otbapp_${APPLICATION_NAME} ) - include_directories(${CMAKE_SOURCE_DIR}/Code/Core ${CMAKE_SOURCE_DIR}/Code/Common ) + # Build the library as a MODULE (shared lib even if OTB is built statically) include_directories(${APPLICATION_INCLUDE_DIRS}) add_library(${APPLICATION_TARGET_NAME} MODULE ${APPLICATION_SOURCES}) target_link_libraries(${APPLICATION_TARGET_NAME} OTBApplicationEngine ${APPLICATION_LINK_LIBRARIES}) + + # Remove the usual 'lib' prefix to make it clear it is a plugin + # and not a library to link against set_target_properties(${APPLICATION_TARGET_NAME} PROPERTIES PREFIX "") + # on Apple platform, a "MODULE" library gets a ".so" extension + # but the ITK factory mechanism looks for ".dylib" if (APPLE) set_target_properties(${APPLICATION_TARGET_NAME} PROPERTIES SUFFIX ".dylib") endif() - install(TARGETS ${APPLICATION_TARGET_NAME} - LIBRARY DESTINATION ${OTB_INSTALL_APP_DIR_CM24}) - + # When called from the OTB build system, use OTB_INSTALL_APP_DIR_CM24 + 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}) + endif() + endmacro(OTB_CREATE_APPLICATION)