diff --git a/cmake/build_helpers.cmake b/cmake/build_helpers.cmake index a53ef197c..823e80893 100644 --- a/cmake/build_helpers.cmake +++ b/cmake/build_helpers.cmake @@ -118,7 +118,7 @@ macro(configurePackingResources) endif() elseif (APPLE OR ${CMAKE_HOST_SYSTEM_NAME} MATCHES "Darwin") set(IMHEX_ICON "${IMHEX_BASE_FOLDER}/resources/dist/macos/AppIcon.icns") - set(BUNDLE_NAME "imhex.app") + set(BUNDLE_NAME "ImHex.app") if (IMHEX_GENERATE_PACKAGE) set(APPLICATION_TYPE MACOSX_BUNDLE) @@ -252,9 +252,9 @@ macro(createPackage) add_custom_target(build-time-make-plugins-directory ALL COMMAND ${CMAKE_COMMAND} -E make_directory "${IMHEX_BUNDLE_PATH}/Contents/MacOS/plugins") add_custom_target(build-time-make-resources-directory ALL COMMAND ${CMAKE_COMMAND} -E make_directory "${IMHEX_BUNDLE_PATH}/Contents/Resources") - downloadImHexPatternsFiles("${IMHEX_BUNDLE_PATH}/Contents/MacOS") + downloadImHexPatternsFiles("${CMAKE_INSTALL_PREFIX}/${BUNDLE_NAME}/Contents/MacOS") - install(FILES ${IMHEX_ICON} DESTINATION "${IMHEX_BUNDLE_PATH}/Contents/Resources") + install(FILES ${IMHEX_ICON} DESTINATION "${CMAKE_INSTALL_PREFIX}/${BUNDLE_NAME}/Contents/Resources") install(TARGETS main BUNDLE DESTINATION ".") # Update library references to make the bundle portable @@ -264,15 +264,17 @@ macro(createPackage) set(CPACK_GENERATOR "DragNDrop") set(CPACK_BUNDLE_ICON "${CMAKE_SOURCE_DIR}/resources/dist/macos/AppIcon.icns") - set(CPACK_BUNDLE_PLIST "${CMAKE_BINARY_DIR}/${BUNDLE_NAME}/Contents/Info.plist") + set(CPACK_BUNDLE_PLIST "${CMAKE_INSTALL_PREFIX}/${BUNDLE_NAME}/Contents/Info.plist") if (IMHEX_RESIGN_BUNDLE) - message(STATUS "Resigning bundle...") find_program(CODESIGN_PATH codesign) if (CODESIGN_PATH) - add_custom_command(TARGET imhex_all POST_BUILD COMMAND "codesign" ARGS "--force" "--deep" "--sign" "-" "${CMAKE_BINARY_DIR}/${BUNDLE_NAME}") + install(CODE "message(STATUS \"Signing bundle '${CMAKE_INSTALL_PREFIX}/${BUNDLE_NAME}'...\")") + install(CODE "execute_process(COMMAND ${CODESIGN_PATH} --force --deep --sign - ${CMAKE_INSTALL_PREFIX}/${BUNDLE_NAME} COMMAND_ERROR_IS_FATAL ANY)") endif() endif() + + install(CODE [[ message(STATUS "MacOS Bundle finalized. DO NOT TOUCH IT ANYMORE! ANY MODIFICATIONS WILL BREAK IT FROM NOW ON!") ]]) endif() else() install(TARGETS main RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) @@ -735,7 +737,7 @@ function(generateSDKDirectory) if (WIN32) set(SDK_PATH "./sdk") elseif (APPLE) - set(SDK_PATH "${BUNDLE_NAME}/Contents/Resources/sdk") + set(SDK_PATH "${CMAKE_INSTALL_PREFIX}/${BUNDLE_NAME}/Contents/Resources/sdk") else() set(SDK_PATH "share/imhex/sdk") endif() diff --git a/cmake/modules/PostprocessBundle.cmake b/cmake/modules/PostprocessBundle.cmake index 22a7e1c70..e8b0a5aa5 100644 --- a/cmake/modules/PostprocessBundle.cmake +++ b/cmake/modules/PostprocessBundle.cmake @@ -14,12 +14,11 @@ if(CMAKE_GENERATOR) # Being called as include(PostprocessBundle), so define a helper function. set(_POSTPROCESS_BUNDLE_MODULE_LOCATION "${CMAKE_CURRENT_LIST_FILE}") function(postprocess_bundle out_target in_target) - add_custom_command(TARGET ${out_target} POST_BUILD - COMMAND ${CMAKE_COMMAND} -DBUNDLE_PATH="$/../.." - -DCODE_SIGN_CERTIFICATE_ID="${CODE_SIGN_CERTIFICATE_ID}" - -DEXTRA_BUNDLE_LIBRARY_PATHS="${EXTRA_BUNDLE_LIBRARY_PATHS}" - -P "${_POSTPROCESS_BUNDLE_MODULE_LOCATION}" - ) + + install(CODE "set(BUNDLE_PATH ${CMAKE_INSTALL_PREFIX}/${BUNDLE_NAME})") + install(CODE "set(CODE_SIGN_CERTIFICATE_ID ${CODE_SIGN_CERTIFICATE_ID})") + install(CODE "set(EXTRA_BUNDLE_LIBRARY_PATHS ${EXTRA_BUNDLE_LIBRARY_PATHS})") + install(SCRIPT ${_POSTPROCESS_BUNDLE_MODULE_LOCATION}) endfunction() return() endif() @@ -36,13 +35,14 @@ message(STATUS "Fixing up application bundle: ${BUNDLE_PATH}") # Make sure to fix up any included ImHex plugin. file(GLOB_RECURSE plugins "${BUNDLE_PATH}/Contents/MacOS/plugins/*.hexplug") +list(APPEND plugins "${BUNDLE_PATH}/Contents/Frameworks/libimhex.dylib") # BundleUtilities doesn't support DYLD_FALLBACK_LIBRARY_PATH behavior, which # makes it sometimes break on libraries that do weird things with @rpath. Specify # equivalent search directories until https://gitlab.kitware.com/cmake/cmake/issues/16625 # is fixed and in our minimum CMake version. -set(extra_dirs "/usr/local/lib" "/lib" "/usr/lib" ${EXTRA_BUNDLE_LIBRARY_PATHS} "${BUNDLE_PATH}/Contents/MacOS/plugins") +set(extra_dirs "/usr/local/lib" "/lib" "/usr/lib" ${EXTRA_BUNDLE_LIBRARY_PATHS} "${BUNDLE_PATH}/Contents/MacOS/plugins" "${BUNDLE_PATH}/Contents/Frameworks") message(STATUS "Fixing up application bundle: ${extra_dirs}") # BundleUtilities is overly verbose, so disable most of its messages