diff --git a/BlueBerry/CMake/MacroInstallCTKPlugin.cmake b/BlueBerry/CMake/MacroInstallCTKPlugin.cmake index d14bde5ef7..0e71ff37c3 100644 --- a/BlueBerry/CMake/MacroInstallCTKPlugin.cmake +++ b/BlueBerry/CMake/MacroInstallCTKPlugin.cmake @@ -1,43 +1,43 @@ MACRO(MACRO_INSTALL_CTK_PLUGIN) MACRO_PARSE_ARGUMENTS(_INSTALL "TARGETS;DESTINATION" "" ${ARGN}) IF(NOT _INSTALL_DESTINATION) SET(_INSTALL_DESTINATION "bin/") ELSE() SET(_INSTALL_DESTINATION "${_INSTALL_DESTINATION}/") ENDIF() FOREACH(_install_target ${_INSTALL_TARGETS}) GET_TARGET_PROPERTY(_is_imported ${_install_target} IMPORTED) IF(_is_imported) GET_TARGET_PROPERTY(_import_loc_debug ${_install_target} IMPORTED_LOCATION_DEBUG) GET_TARGET_PROPERTY(_import_loc_release ${_install_target} IMPORTED_LOCATION_RELEASE) GET_FILENAME_COMPONENT(_target_filename_debug "${_import_loc_debug}" NAME) GET_FILENAME_COMPONENT(_target_filename_release "${_import_loc_release}" NAME) INSTALL(FILES ${_import_loc_debug} DESTINATION ${_INSTALL_DESTINATION} CONFIGURATIONS Debug) INSTALL(FILES ${_import_loc_release} DESTINATION ${_INSTALL_DESTINATION} CONFIGURATIONS Release) - IF(UNIX) + IF(UNIX AND NOT APPLE) IF(_target_filename_debug) INSTALL(CODE "FILE(RPATH_REMOVE FILE \"\${CMAKE_INSTALL_PREFIX}/${_INSTALL_DESTINATION}/${_target_filename_debug}\")") ENDIF() IF(_target_filename_release) INSTALL(CODE "FILE(RPATH_CHANGE FILE \"\${CMAKE_INSTALL_PREFIX}/${_INSTALL_DESTINATION}/${_target_filename_release}\")") ENDIF() ENDIF() ELSE() INSTALL(TARGETS ${_install_target} RUNTIME DESTINATION ${_INSTALL_DESTINATION} LIBRARY DESTINATION ${_INSTALL_DESTINATION} #ARCHIVE DESTINATION ${_INSTALL_DESTINATION} ) ENDIF() ENDFOREACH() ENDMACRO() diff --git a/CMake/mitkMacroInstall.cmake b/CMake/mitkMacroInstall.cmake index 8273021064..99f4d61069 100644 --- a/CMake/mitkMacroInstall.cmake +++ b/CMake/mitkMacroInstall.cmake @@ -1,117 +1,125 @@ # # MITK specific install macro # # On Mac everything is installed for each bundle listed in MACOSX_BUNDLE_NAMES # by replacing the DESTINATION parameter. Everything else is passed to the CMake INSTALL command # # Usage: MITK_INSTALL( ) # MACRO(MITK_INSTALL) SET(ARGS ${ARGN}) SET(install_directories "") LIST(FIND ARGS DESTINATION _destination_index) # SET(_install_DESTINATION "") IF(_destination_index GREATER -1) MESSAGE(SEND_ERROR "MITK_INSTALL macro must not be called with a DESTINATION parameter.") ### This code was a try to replace a given DESTINATION #MATH(EXPR _destination_index ${_destination_index} + 1) #LIST(GET ARGS ${_destination_index} _install_DESTINATION) #STRING(REGEX REPLACE ^bin "" _install_DESTINATION ${_install_DESTINATION}) ELSE() IF(NOT MACOSX_BUNDLE_NAMES) INSTALL(${ARGS} DESTINATION bin) ELSE() FOREACH(bundle_name ${MACOSX_BUNDLE_NAMES}) INSTALL(${ARGS} DESTINATION ${bundle_name}.app/Contents/MacOS/${_install_DESTINATION}) ENDFOREACH() ENDIF() ENDIF() ENDMACRO() # Fix _target_location # This is used in several install macros MACRO(_fixup_target) INSTALL(CODE " MACRO(gp_item_default_embedded_path_override item default_embedded_path_var) GET_FILENAME_COMPONENT(_item_name \"\${item}\" NAME) GET_FILENAME_COMPONENT(_item_path \"\${item}\" PATH) - IF(_item_path MATCHES \"^\${CMAKE_INSTALL_PREFIX}/bin/plugins\") + + # We have to fix all path references to build trees for plugins + + IF(NOT _item_path MATCHES \"\${CMAKE_INSTALL_PREFIX}/${_bundle_dest_dir}\") + # item with relative path or embedded path pointing to some build dir + SET(full_path \"full_path-NOTFOUND\") + FILE (GLOB_RECURSE full_path \${CMAKE_INSTALL_PREFIX}/${_bundle_dest_dir}/\${_item_name} ) + GET_FILENAME_COMPONENT(_item_path \"\${full_path}\" PATH) + ENDIF() + + IF(_item_path STREQUAL \"\${CMAKE_INSTALL_PREFIX}/${_bundle_dest_dir}/plugins\" + OR _item_name MATCHES \"liborg\" # this is for legacy BlueBerry bundle support + ) + # Only fix plugins + MESSAGE(\"override: \${item}\") + MESSAGE(\"found file: \${_item_path}/\${_item_name}\") IF(APPLE) - SET(full_path \"full_path-NOTFOUND\") - MESSAGE(\"override: \${item}\") - FILE (GLOB_RECURSE full_path \${CMAKE_INSTALL_PREFIX}/${_bundle_dest_dir}/\${_item_name} ) - MESSAGE(\"find file: \${full_path}\") - - GET_FILENAME_COMPONENT(_item_path \"\${full_path}\" PATH) - STRING(REPLACE - \${CMAKE_INSTALL_PREFIX} - @executable_path/../../../ \${default_embedded_path_var} \"\${_item_path}\" ) - MESSAGE(\"override result: \${\${default_embedded_path_var}}\") + \${CMAKE_INSTALL_PREFIX}/${_bundle_dest_dir} + @executable_path \${default_embedded_path_var} \"\${_item_path}\" ) ELSE() SET(\${default_embedded_path_var} \"\${_item_path}\") ENDIF() + MESSAGE(\"override result: \${\${default_embedded_path_var}}\") ENDIF() ENDMACRO(gp_item_default_embedded_path_override) MACRO(gp_resolved_file_type_override file type) IF(NOT APPLE) GET_FILENAME_COMPONENT(_file_path \"\${file}\" PATH) GET_FILENAME_COMPONENT(_file_name \"\${file}\" NAME) IF(_file_path MATCHES \"^\${CMAKE_INSTALL_PREFIX}\") SET(\${type} \"local\") ENDIF() IF(_file_name MATCHES gdiplus) SET(\${type} \"system\") ENDIF(_file_name MATCHES gdiplus) ENDIF() ENDMACRO(gp_resolved_file_type_override) IF(NOT APPLE) IF(UNIX OR MINGW) MACRO(gp_resolve_item_override context item exepath dirs resolved_item_var resolved_var) IF(\${item} MATCHES \"blueberry_osgi\") GET_FILENAME_COMPONENT(_item_name \${item} NAME) SET(\${resolved_item_var} \"\${exepath}/plugins/\${_item_name}\") SET(\${resolved_var} 1) ENDIF() ENDMACRO() ENDIF() ENDIF() IF(\"${_install_GLOB_PLUGINS}\" STREQUAL \"TRUE\") file(GLOB_RECURSE GLOBBED_BLUEBERRY_PLUGINS # glob for all blueberry bundles of this application \"\${CMAKE_INSTALL_PREFIX}/${_bundle_dest_dir}/liborg*${CMAKE_SHARED_LIBRARY_SUFFIX}\") ENDIF() file(GLOB_RECURSE GLOBBED_QT_PLUGINS # glob for Qt plugins \"\${CMAKE_INSTALL_PREFIX}/${${_target_location}_qt_plugins_install_dir}/plugins/*${CMAKE_SHARED_LIBRARY_SUFFIX}\") # use custom version of BundleUtilities message(\"globbed plugins: \${GLOBBED_QT_PLUGINS} \${GLOBBED_BLUEBERRY_PLUGINS}\") SET(PLUGIN_DIRS) SET(PLUGINS ${_install_PLUGINS} \${GLOBBED_QT_PLUGINS} \${GLOBBED_BLUEBERRY_PLUGINS}) if(PLUGINS) list(REMOVE_DUPLICATES PLUGINS) endif(PLUGINS) foreach(_plugin \${GLOBBED_BLUEBERRY_PLUGINS}) get_filename_component(_pluginpath \${_plugin} PATH) list(APPEND PLUGIN_DIRS \${_pluginpath}) endforeach(_plugin) set(DIRS ${DIRS}) list(APPEND DIRS \${PLUGIN_DIRS}) list(REMOVE_DUPLICATES DIRS) # use custom version of BundleUtilities SET(CMAKE_MODULE_PATH ${MITK_SOURCE_DIR}/CMake ${CMAKE_MODULE_PATH} ) include(BundleUtilities) fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/${_target_location}\" \"\${PLUGINS}\" \"\${DIRS}\") ") ENDMACRO()