From 3f502eeb6415a6b91884298ed6d3fe85d06e1198 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Thu, 7 Aug 2025 14:21:33 -0500 Subject: [PATCH] Create macOS bundle for simplified installation #58 --- CMakeLists.txt | 1 + cmake/functions.cmake | 35 ++++++++++++++++++++++++++++++----- config.sh | 1 + scripts/env.sh | 6 ++++++ 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 48c5f0f7..5b7d2366 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -186,6 +186,7 @@ endif() -DPROJECT_IS_MINGW=${PROJECT_IS_MINGW} -DPROJECT_IS_MINGW_UNIX=${PROJECT_IS_MINGW_UNIX} -DPROJECT_MAJOR_VERSION=${PROJECT_MAJOR_VERSION} + -DPROJECT_MACOS_ICNS_NAME=${PROJECT_MACOS_ICNS_NAME} -DPROJECT_MINOR_VERSION=${PROJECT_MINOR_VERSION} -DPROJECT_NAME=${PROJECT_NAME} -DPROJECT_RELEASE_ITER=${PROJECT_RELEASE_ITER} diff --git a/cmake/functions.cmake b/cmake/functions.cmake index 2bcedf85..3aa1df2f 100644 --- a/cmake/functions.cmake +++ b/cmake/functions.cmake @@ -1,3 +1,7 @@ +if (PROJECT_MACOS_ICNS_NAME) + set(PROJECT_MACOS_ICNS_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_MACOS_ICNS_NAME}") +endif() + function(set_common_target_options name) target_compile_definitions(${name} PUBLIC ${PROJECT_DEFINITIONS} @@ -31,11 +35,32 @@ function(add_project_executable2 name dependencies libraries headers sources is_ list(APPEND sources ${PROJECT_WINDOWS_VERSION_RC}) endif() - add_executable(${name} - ${headers} - ${sources} - ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/main.cpp - ) + if (PROJECT_IS_DARWIN AND PROJECT_MACOS_ICNS_SOURCE AND "${name}" STREQUAL "${PROJECT_NAME}") + set(PROJECT_MACOS_ICNS_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_MACOS_ICNS_NAME}") + set_source_files_properties(${PROJECT_MACOS_ICNS_SOURCE} PROPERTIES + MACOSX_PACKAGE_LOCATION "Resources" + ) + + add_executable(${name} + MACOSX_BUNDLE + ${headers} + ${sources} + ${PROJECT_MACOS_ICNS_SOURCE} + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/main.cpp + ) + + set_target_properties(${name} PROPERTIES + MACOSX_BUNDLE TRUE + MACOSX_BUNDLE_ICON_FILE "${PROJECT_MACOS_ICNS_NAME}" + RESOURCE "${PROJECT_MACOS_ICNS_SOURCE}" + ) + else() + add_executable(${name} + ${headers} + ${sources} + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/main.cpp + ) + endif() foreach(dependency ${dependencies}) set_common_target_options(${dependency}) diff --git a/config.sh b/config.sh index 1cf7280d..a56145be 100755 --- a/config.sh +++ b/config.sh @@ -1,6 +1,7 @@ #!/bin/bash PROJECT_NAME="repertory" +PROJECT_MACOS_ICNS_NAME="icon.icns" PROJECT_COMPANY_NAME="https://git.fifthgrid.com/blockstorage" PROJECT_URL="${PROJECT_COMPANY_NAME}/repertory" diff --git a/scripts/env.sh b/scripts/env.sh index 9d8900c5..cb0ef30f 100755 --- a/scripts/env.sh +++ b/scripts/env.sh @@ -56,6 +56,7 @@ PROJECT_MINGW64_COPY_DEPENDENCIES=() PROJECT_MSYS2_PACKAGE_LIST=() PROJECT_REQUIRE_ALPINE=OFF PROJECT_STATIC_LINK=OFF +PROJECT_MACOS_ICNS_NAME="" if [ "$(uname -s)" == "Darwin" ]; then PROJECT_IS_DARWIN=1 @@ -271,6 +272,7 @@ PROJECT_CMAKE_OPTS="-DPROJECT_IS_ARM64=${PROJECT_IS_ARM64} ${PROJECT_CMAKE_OPTS} PROJECT_CMAKE_OPTS="-DPROJECT_IS_DARWIN=${PROJECT_IS_DARWIN} ${PROJECT_CMAKE_OPTS}" PROJECT_CMAKE_OPTS="-DPROJECT_IS_MINGW=${PROJECT_IS_MINGW} ${PROJECT_CMAKE_OPTS}" PROJECT_CMAKE_OPTS="-DPROJECT_IS_MINGW_UNIX=${PROJECT_IS_MINGW_UNIX} ${PROJECT_CMAKE_OPTS}" +PROJECT_CMAKE_OPTS="-DPROJECT_MACOS_ICNS_NAME=${PROJECT_MACOS_ICNS_NAME} ${PROJECT_CMAKE_OPTS}" PROJECT_CMAKE_OPTS="-DPROJECT_MAJOR_VERSION=${PROJECT_MAJOR_VERSION} ${PROJECT_CMAKE_OPTS}" PROJECT_CMAKE_OPTS="-DPROJECT_MINOR_VERSION=${PROJECT_MINOR_VERSION} ${PROJECT_CMAKE_OPTS}" PROJECT_CMAKE_OPTS="-DPROJECT_NAME=${PROJECT_NAME} ${PROJECT_CMAKE_OPTS}" @@ -349,6 +351,7 @@ export PROJECT_IS_DARWIN export PROJECT_IS_MINGW export PROJECT_IS_MINGW_UNIX export PROJECT_LINK_TYPE +export PROJECT_MACOS_ICNS_NAME export PROJECT_MAJOR_VERSION export PROJECT_MINGW64_COPY_DEPENDENCIES export PROJECT_MINGW64_DOCKER_BUILD_ARGS @@ -406,6 +409,9 @@ echo " Link type: ${PROJECT_LINK_TYPE}" if [ "${PROJECT_IS_MINGW}" == "1" ]; then echo " Long path names: ${PROJECT_ENABLE_WIN32_LONG_PATH_NAMES}" fi +if [ "${PROJECT_IS_DARWIN}" == "1" ]; then + echo " macOS icns name: ${PROJECT_MACOS_ICNS_NAME}" +fi echo " Meson toolchain file: ${PROJECT_TOOLCHAIN_FILE_MESON}" if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then echo " MinGW docker build args: ${PROJECT_MINGW64_DOCKER_BUILD_ARGS}"