Files
Sunshine/cmake/packaging/macos.cmake
T

112 lines
4.2 KiB
CMake

# macos specific packaging
if (SUNSHINE_BUILD_HOMEBREW)
install(DIRECTORY "${SUNSHINE_SOURCE_ASSETS_DIR}/macos/assets/"
DESTINATION "${SUNSHINE_ASSETS_DIR}")
# copy assets to build directory, for running without install
file(COPY "${SUNSHINE_SOURCE_ASSETS_DIR}/macos/assets/"
DESTINATION "${CMAKE_BINARY_DIR}/assets")
else()
# .app build
set(APPLE_CODESIGN_IDENTITY "" CACHE STRING "Codesign identity, e.g. 'Developer ID Application: Name (TEAMID)'")
# Build an .app
set(CMAKE_MACOSX_BUNDLE YES)
set(MAC_BUNDLE_NAME "${CMAKE_PROJECT_NAME}.app")
set(MAC_BUNDLE_CONTENTS "${MAC_BUNDLE_NAME}/Contents")
set(MAC_BUNDLE_RESOURCES "${MAC_BUNDLE_CONTENTS}/Resources")
install(TARGETS sunshine
BUNDLE DESTINATION .
COMPONENT Runtime)
install(FILES "${APPLE_PLIST_FILE}"
DESTINATION "${MAC_BUNDLE_CONTENTS}"
COMPONENT Runtime)
install(FILES "${PROJECT_SOURCE_DIR}/src_assets/macos/build/sunshine.icns"
DESTINATION "${MAC_BUNDLE_RESOURCES}"
COMPONENT Runtime)
# macOS-specific assets (apps.json, etc.)
install(DIRECTORY "${SUNSHINE_SOURCE_ASSETS_DIR}/macos/assets/"
DESTINATION "${MAC_BUNDLE_RESOURCES}/assets"
COMPONENT Runtime
PATTERN ".DS_Store" EXCLUDE
PATTERN "._*" EXCLUDE)
# Pull in non-system dylibs for a self-contained .app
install(CODE "
set(_app \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMAKE_PROJECT_NAME}.app\")
message(STATUS \"Running fixup_bundle for: \${_app}\")
include(BundleUtilities)
set(BU_CHMOD_BUNDLE_ITEMS TRUE)
fixup_bundle(\"\${_app}\" \"\" \"\")
# Remove Finder/resource-fork metadata that breaks codesign.
execute_process(COMMAND /usr/bin/xattr -rc \"\${_app}\")
message(STATUS \"removing any existing signatures\")
execute_process(COMMAND /usr/bin/codesign
--remove-signature --force --deep
\"\${_app}\"
RESULT_VARIABLE rc
)
if(NOT rc EQUAL 0)
message(FATAL_ERROR \"codesign failed to remove existing signatures\")
endif()
# SHOULD_SIGN is set only when publish_release is true or when manually building
if(\"\$ENV{SHOULD_SIGN}\" STREQUAL \"true\")
# Sign anything inside Contents/Frameworks
set(_fw_dir \"\${_app}/Contents/Frameworks\")
if(EXISTS \"\${_fw_dir}\")
file(GLOB_RECURSE _sign_items
\"\${_fw_dir}/*.framework\"
\"\${_fw_dir}/*.dylib\"
)
foreach(item IN LISTS _sign_items)
execute_process(COMMAND /usr/bin/codesign --verbose=2
--sign \"${APPLE_CODESIGN_IDENTITY}\" \"\${item}\"
--force --timestamp --options=runtime
RESULT_VARIABLE rc2
)
if(NOT rc2 EQUAL 0)
message(FATAL_ERROR \"codesign failed while signing library: \${item}\")
endif()
endforeach()
endif()
# Sign the app last
execute_process(COMMAND /usr/bin/codesign --verbose=2
--sign \"${APPLE_CODESIGN_IDENTITY}\" \"\${_app}\"
--force --timestamp --options=runtime
RESULT_VARIABLE rc3
)
if(NOT rc3 EQUAL 0)
message(FATAL_ERROR \"codesign failed while signing .app\")
endif()
# Verify
execute_process(COMMAND /usr/bin/codesign --verify --deep --strict --verbose=2 \"\${_app}\"
RESULT_VARIABLE rc4
)
if(NOT rc4 EQUAL 0)
message(FATAL_ERROR \"codesign --verify failed\")
endif()
endif()
" COMPONENT Runtime)
# DragNDrop
set(CPACK_BUNDLE_NAME "${CMAKE_PROJECT_NAME}")
set(CPACK_BUNDLE_PLIST "${APPLE_PLIST_FILE}")
set(CPACK_BUNDLE_ICON "${PROJECT_SOURCE_DIR}/src_assets/macos/build/sunshine.icns")
set(CPACK_PACKAGING_INSTALL_PREFIX "/")
set(CPACK_DMG_BACKGROUND_IMAGE "${PROJECT_SOURCE_DIR}/src_assets/macos/build/sunshine-background-72dpi.jpg")
set(CPACK_DMG_DS_STORE_SETUP_SCRIPT "${PROJECT_SOURCE_DIR}/src_assets/macos/build/dmg-finder-layout.applescript")
endif()