build: Generate a macOS bundle by default

This commit is contained in:
WerWolv
2025-12-22 22:57:33 +01:00
parent 4433006842
commit d4bfa5d284
5 changed files with 27 additions and 16 deletions

View File

@@ -503,7 +503,6 @@ jobs:
run: | run: |
set -x set -x
cd build/install cd build/install
mv imhex.app ImHex.app
codesign --remove-signature ImHex.app codesign --remove-signature ImHex.app
codesign --force --deep --sign - ImHex.app codesign --force --deep --sign - ImHex.app
@@ -624,7 +623,6 @@ jobs:
run: | run: |
set -x set -x
cd out cd out
mv imhex.app ImHex.app
codesign --remove-signature ImHex.app codesign --remove-signature ImHex.app
codesign --force --deep --entitlements Entitlements.plist --sign - ImHex.app codesign --force --deep --entitlements Entitlements.plist --sign - ImHex.app

View File

@@ -12,7 +12,8 @@ option(IMHEX_BUNDLE_DOTNET "Bundle .NET runtime"
option(IMHEX_ENABLE_LTO "Enables Link Time Optimizations if possible" OFF) option(IMHEX_ENABLE_LTO "Enables Link Time Optimizations if possible" OFF)
option(IMHEX_USE_DEFAULT_BUILD_SETTINGS "Use default build settings" OFF) option(IMHEX_USE_DEFAULT_BUILD_SETTINGS "Use default build settings" OFF)
option(IMHEX_BUILD_HARDENING "Enable hardening flags for build" ON ) 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_UNITY_BUILD "Enables building ImHex as a unity build." OFF)
option(IMHEX_ENABLE_PRECOMPILED_HEADERS "Enable precompiled headers" OFF) option(IMHEX_ENABLE_PRECOMPILED_HEADERS "Enable precompiled headers" OFF)
option(IMHEX_ENABLE_CXX_MODULES "Enable C++20 Module compilation. Testing only!" OFF) option(IMHEX_ENABLE_CXX_MODULES "Enable C++20 Module compilation. Testing only!" OFF)

View File

@@ -217,9 +217,9 @@ macro(configurePackingResources)
endif() endif()
elseif (APPLE OR ${CMAKE_HOST_SYSTEM_NAME} MATCHES "Darwin") elseif (APPLE OR ${CMAKE_HOST_SYSTEM_NAME} MATCHES "Darwin")
set(IMHEX_ICON "${IMHEX_BASE_FOLDER}/resources/dist/macos/AppIcon.icns") 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(APPLICATION_TYPE MACOSX_BUNDLE)
set_source_files_properties(${IMHEX_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") set_source_files_properties(${IMHEX_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
set(MACOSX_BUNDLE_ICON_FILE "AppIcon.icns") set(MACOSX_BUNDLE_ICON_FILE "AppIcon.icns")
@@ -235,9 +235,9 @@ macro(configurePackingResources)
string(TIMESTAMP CURR_YEAR "%Y") string(TIMESTAMP CURR_YEAR "%Y")
set(MACOSX_BUNDLE_COPYRIGHT "Copyright © 2020 - ${CURR_YEAR} WerWolv. All rights reserved." ) set(MACOSX_BUNDLE_COPYRIGHT "Copyright © 2020 - ${CURR_YEAR} WerWolv. All rights reserved." )
if ("${CMAKE_GENERATOR}" STREQUAL "Xcode") 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 () else ()
set (IMHEX_BUNDLE_PATH "${CMAKE_BINARY_DIR}/${BUNDLE_NAME}") set(IMHEX_BUNDLE_PATH "${CMAKE_BINARY_DIR}/${BUNDLE_NAME}")
endif() endif()
set(PLUGINS_INSTALL_LOCATION "${IMHEX_BUNDLE_PATH}/Contents/MacOS/plugins") 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") set_target_properties(${plugin} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${IMHEX_MAIN_OUTPUT_DIRECTORY}/plugins")
if (APPLE) if (APPLE)
if (IMHEX_GENERATE_PACKAGE) if (IMHEX_MACOS_CREATE_BUNDLE)
set_target_properties(${plugin} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PLUGINS_INSTALL_LOCATION}) set_target_properties(${plugin} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PLUGINS_INSTALL_LOCATION})
endif () endif ()
else () else ()
@@ -347,24 +347,21 @@ macro(createPackage)
endif() endif()
if (APPLE) if (APPLE)
if (IMHEX_GENERATE_PACKAGE) if (IMHEX_MACOS_CREATE_BUNDLE)
set(EXTRA_BUNDLE_LIBRARY_PATHS ${EXTRA_BUNDLE_LIBRARY_PATHS} "${IMHEX_SYSTEM_LIBRARY_PATH}") set(EXTRA_BUNDLE_LIBRARY_PATHS ${EXTRA_BUNDLE_LIBRARY_PATHS} "${IMHEX_SYSTEM_LIBRARY_PATH}")
include(PostprocessBundle) include(PostprocessBundle)
set_target_properties(libimhex PROPERTIES SOVERSION ${IMHEX_VERSION}) 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_INFO_PLIST ${MACOSX_BUNDLE_INFO_PLIST})
set_property(TARGET main PROPERTY MACOSX_BUNDLE_BUNDLE_NAME "${MACOSX_BUNDLE_BUNDLE_NAME}")
# Fix rpath # Fix rpath
install(CODE "execute_process(COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath \"@executable_path/../Frameworks/\" $<TARGET_FILE:main>)") install(CODE "execute_process(COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath \"@executable_path/../Frameworks/\" $<TARGET_FILE:main>)")
install(CODE "execute_process(COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath \"@executable_path/../Frameworks/\" $<TARGET_FILE:updater>)") install(CODE "execute_process(COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath \"@executable_path/../Frameworks/\" $<TARGET_FILE:updater>)")
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") 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 main BUNDLE DESTINATION ".")
install(TARGETS updater DESTINATION "${CMAKE_INSTALL_PREFIX}/${BUNDLE_NAME}/Contents/MacOS") install(TARGETS updater DESTINATION "${CMAKE_INSTALL_PREFIX}/${BUNDLE_NAME}/Contents/MacOS")
install( install(
@@ -430,7 +427,7 @@ macro(createPackage)
endif() endif()
endif() endif()
if (IMHEX_GENERATE_PACKAGE) if (IMHEX_MACOS_CREATE_BUNDLE)
set(CPACK_BUNDLE_NAME "ImHex") set(CPACK_BUNDLE_NAME "ImHex")
include(CPack) include(CPack)

View File

@@ -182,4 +182,4 @@ EOF
FROM scratch FROM scratch
COPY --from=build /mnt/ImHex/build/install/imhex.app imhex.app COPY --from=build /mnt/ImHex/build/install/ImHex.app ImHex.app

View File

@@ -70,7 +70,22 @@ if (WIN32)
else () else ()
target_link_libraries(main PRIVATE pthread) 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} $<TARGET_FILE_DIR:main>/../Resources/${MACOSX_BUNDLE_ICON_FILE}
)
endif()
else()
find_package(Fontconfig) find_package(Fontconfig)
if (TARGET Fontconfig::Fontconfig) if (TARGET Fontconfig::Fontconfig)
message(STATUS "Using Fontconfig version: ${Fontconfig_VERSION}") message(STATUS "Using Fontconfig version: ${Fontconfig_VERSION}")