diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ef50cd32c..7b041f1f4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -503,7 +503,6 @@ jobs: run: | set -x cd build/install - mv imhex.app ImHex.app codesign --remove-signature ImHex.app codesign --force --deep --sign - ImHex.app @@ -624,7 +623,6 @@ jobs: run: | set -x cd out - mv imhex.app ImHex.app codesign --remove-signature ImHex.app codesign --force --deep --entitlements Entitlements.plist --sign - ImHex.app diff --git a/CMakeLists.txt b/CMakeLists.txt index 02b03fa35..8ecb1bd5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,7 +12,8 @@ option(IMHEX_BUNDLE_DOTNET "Bundle .NET runtime" option(IMHEX_ENABLE_LTO "Enables Link Time Optimizations if possible" OFF) option(IMHEX_USE_DEFAULT_BUILD_SETTINGS "Use default build settings" OFF) option(IMHEX_BUILD_HARDENING "Enable hardening flags for build" ON ) -option(IMHEX_GENERATE_PACKAGE "Specify if a native package should be built. (Windows and MacOS only)" OFF) +option(IMHEX_GENERATE_PACKAGE "Specify if a cpack package should be built. (Windows only)" OFF) +option(IMHEX_MACOS_CREATE_BUNDLE "Creates a macOS .app bundle when building (macOS only)" ON ) option(IMHEX_ENABLE_UNITY_BUILD "Enables building ImHex as a unity build." OFF) option(IMHEX_ENABLE_PRECOMPILED_HEADERS "Enable precompiled headers" OFF) option(IMHEX_ENABLE_CXX_MODULES "Enable C++20 Module compilation. Testing only!" OFF) diff --git a/cmake/build_helpers.cmake b/cmake/build_helpers.cmake index bebb74593..8340073fc 100644 --- a/cmake/build_helpers.cmake +++ b/cmake/build_helpers.cmake @@ -217,9 +217,9 @@ 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) + if (IMHEX_MACOS_CREATE_BUNDLE) set(APPLICATION_TYPE MACOSX_BUNDLE) set_source_files_properties(${IMHEX_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") set(MACOSX_BUNDLE_ICON_FILE "AppIcon.icns") @@ -235,9 +235,9 @@ macro(configurePackingResources) string(TIMESTAMP CURR_YEAR "%Y") set(MACOSX_BUNDLE_COPYRIGHT "Copyright © 2020 - ${CURR_YEAR} WerWolv. All rights reserved." ) if ("${CMAKE_GENERATOR}" STREQUAL "Xcode") - set (IMHEX_BUNDLE_PATH "${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${BUNDLE_NAME}") + set(IMHEX_BUNDLE_PATH "${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${BUNDLE_NAME}") else () - set (IMHEX_BUNDLE_PATH "${CMAKE_BINARY_DIR}/${BUNDLE_NAME}") + set(IMHEX_BUNDLE_PATH "${CMAKE_BINARY_DIR}/${BUNDLE_NAME}") endif() set(PLUGINS_INSTALL_LOCATION "${IMHEX_BUNDLE_PATH}/Contents/MacOS/plugins") @@ -255,7 +255,7 @@ macro(addPluginDirectories) set_target_properties(${plugin} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${IMHEX_MAIN_OUTPUT_DIRECTORY}/plugins") if (APPLE) - if (IMHEX_GENERATE_PACKAGE) + if (IMHEX_MACOS_CREATE_BUNDLE) set_target_properties(${plugin} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PLUGINS_INSTALL_LOCATION}) endif () else () @@ -347,24 +347,21 @@ macro(createPackage) endif() if (APPLE) - if (IMHEX_GENERATE_PACKAGE) + if (IMHEX_MACOS_CREATE_BUNDLE) set(EXTRA_BUNDLE_LIBRARY_PATHS ${EXTRA_BUNDLE_LIBRARY_PATHS} "${IMHEX_SYSTEM_LIBRARY_PATH}") include(PostprocessBundle) set_target_properties(libimhex PROPERTIES SOVERSION ${IMHEX_VERSION}) set_property(TARGET main PROPERTY MACOSX_BUNDLE_INFO_PLIST ${MACOSX_BUNDLE_INFO_PLIST}) + set_property(TARGET main PROPERTY MACOSX_BUNDLE_BUNDLE_NAME "${MACOSX_BUNDLE_BUNDLE_NAME}") # Fix rpath install(CODE "execute_process(COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath \"@executable_path/../Frameworks/\" $)") install(CODE "execute_process(COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath \"@executable_path/../Frameworks/\" $)") - 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("${CMAKE_INSTALL_PREFIX}/${BUNDLE_NAME}/Contents/MacOS") - install(FILES ${IMHEX_ICON} DESTINATION "${CMAKE_INSTALL_PREFIX}/${BUNDLE_NAME}/Contents/Resources") install(TARGETS main BUNDLE DESTINATION ".") install(TARGETS updater DESTINATION "${CMAKE_INSTALL_PREFIX}/${BUNDLE_NAME}/Contents/MacOS") install( @@ -430,7 +427,7 @@ macro(createPackage) endif() endif() - if (IMHEX_GENERATE_PACKAGE) + if (IMHEX_MACOS_CREATE_BUNDLE) set(CPACK_BUNDLE_NAME "ImHex") include(CPack) diff --git a/dist/macOS/arm64.Dockerfile b/dist/macOS/arm64.Dockerfile index 2bea287e9..a78befb97 100644 --- a/dist/macOS/arm64.Dockerfile +++ b/dist/macOS/arm64.Dockerfile @@ -182,4 +182,4 @@ EOF FROM scratch -COPY --from=build /mnt/ImHex/build/install/imhex.app imhex.app +COPY --from=build /mnt/ImHex/build/install/ImHex.app ImHex.app diff --git a/main/gui/CMakeLists.txt b/main/gui/CMakeLists.txt index 74af982b0..a44e0e46b 100644 --- a/main/gui/CMakeLists.txt +++ b/main/gui/CMakeLists.txt @@ -70,7 +70,22 @@ if (WIN32) else () target_link_libraries(main PRIVATE pthread) - if (NOT APPLE) + if (APPLE) + set_target_properties(main PROPERTIES + OUTPUT_NAME "${MACOSX_BUNDLE_BUNDLE_NAME}" + ) + if (IMHEX_MACOS_CREATE_BUNDLE) + add_custom_command(TARGET main PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory "${IMHEX_BUNDLE_PATH}/Contents/MacOS/plugins" + ) + add_custom_command(TARGET main PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory "${IMHEX_BUNDLE_PATH}/Contents/Resources" + ) + add_custom_command(TARGET main POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${IMHEX_ICON} $/../Resources/${MACOSX_BUNDLE_ICON_FILE} + ) + endif() + else() find_package(Fontconfig) if (TARGET Fontconfig::Fontconfig) message(STATUS "Using Fontconfig version: ${Fontconfig_VERSION}")