mirror of
https://github.com/LizardByte/Sunshine.git
synced 2026-08-07 18:36:34 +00:00
112 lines
4.2 KiB
CMake
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()
|