From 727ad60ff0cb84a26891a0838ad986ce1daf22b5 Mon Sep 17 00:00:00 2001 From: Daljit Singh Date: Fri, 31 May 2024 15:34:14 +0100 Subject: [PATCH] Add MacOSBundle.cmake module --- CMakeLists.txt | 3 +++ cmake/MacOSBundle.cmake | 13 +++++++++++++ cmd/CMakeLists.txt | 26 ++++++++++---------------- 3 files changed, 26 insertions(+), 16 deletions(-) create mode 100644 cmake/MacOSBundle.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 2926bf14f9..fd0c6cd78a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,6 +61,9 @@ include(LinkerSetup) include(FindFFTW) include(CompilerCache) include(ECMEnableSanitizers) +if(CMAKE_SYSTEM_NAME MATCHES "Darwin") + include(MacOSBundle) +endif() use_compiler_cache() diff --git a/cmake/MacOSBundle.cmake b/cmake/MacOSBundle.cmake new file mode 100644 index 0000000000..b8ce07e74e --- /dev/null +++ b/cmake/MacOSBundle.cmake @@ -0,0 +1,13 @@ +function(set_bundle_properties) + cmake_parse_arguments(ARG "" "EXECUTABLE;ICON" "" ${ARGN}) + set(executable_name ${ARG_EXECUTABLE}) + set(icon ${ARG_ICON}) + + target_sources(${executable_name} PRIVATE ${icon}) + set_target_properties(${executable_name} PROPERTIES + MACOSX_BUNDLE TRUE + MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/../packaging/macos/bundle/${executable_name}.plist.in" + RESOURCE ${icon} + INSTALL_RPATH "@executable_path/../../../../lib" + ) +endfunction() diff --git a/cmd/CMakeLists.txt b/cmd/CMakeLists.txt index 67ec20ca00..236621e12c 100644 --- a/cmd/CMakeLists.txt +++ b/cmd/CMakeLists.txt @@ -30,29 +30,23 @@ function(add_cmd CMD_SRC IS_GUI) $,mrtrix::gui,mrtrix::headless> mrtrix::exec-version-lib ) - if (IS_GUI AND (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")) - set(mrtrix_icon_macos "${CMAKE_SOURCE_DIR}/icons/macos/${CMD_NAME}.icns") - set_source_files_properties(${mrtrix_icon_macos} PROPERTIES - MACOSX_PACKAGE_LOCATION "Resources" - ) - target_sources(${CMD_NAME} PRIVATE ${mrtrix_icon_macos}) - if (${CMD_NAME} STREQUAL mrview) - set(mrtrix_icon_macos "${CMAKE_SOURCE_DIR}/icons/macos/${CMD_NAME}_doc.icns") - set_source_files_properties(${mrtrix_icon_macos} PROPERTIES - MACOSX_PACKAGE_LOCATION "Resources" - ) - target_sources(${CMD_NAME} PRIVATE ${mrtrix_icon_macos}) - endif () - endif () set_target_properties(${CMD_NAME} PROPERTIES - MACOSX_BUNDLE ${IS_GUI} - MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/cmake/bundle/${CMD_NAME}.plist.in LINK_DEPENDS_NO_SHARED true RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin ) if(MRTRIX_USE_PCH AND NOT ${IS_GUI}) target_precompile_headers(${CMD_NAME} REUSE_FROM pch_cmd) endif() + + if (IS_GUI AND ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") + if(${CMD_NAME} STREQUAL "mrview") + set(mrtrix_icon_macos ${CMAKE_CURRENT_SOURCE_DIR}/../icons/macos/mrview_doc.icns) + else() + set(mrtrix_icon_macos ${CMAKE_CURRENT_SOURCE_DIR}/../icons/macos/${CMD_NAME}.icns) + endif() + set_bundle_properties(EXECUTABLE ${CMD_NAME} ICON ${mrtrix_icon_macos}) + endif () + install(TARGETS ${CMD_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR}