-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Convert apple package script to cmake
- Loading branch information
Showing
8 changed files
with
161 additions
and
192 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,27 +1,48 @@ | ||
# TODO: Re-evaluate these | ||
set(MACOSX_BUNDLE_ICON_FILE "icon.icns") | ||
set(MACOSX_BUNDLE_GUI_IDENTIFIER "${PROJECT_NAME_UCASE}") | ||
set(MACOSX_BUNDLE_LONG_VERSION_STRING "${VERSION}") | ||
set(MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME_UCASE}") | ||
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VERSION}") | ||
set(MACOSX_BUNDLE_BUNDLE_VERSION "${VERSION}") | ||
set(MACOSX_BUNDLE_COPYRIGHT "${PROJECT_COPYRIGHT}") | ||
set(MACOSX_BUNDLE_MIMETYPE "application/x-lmms-project") | ||
set(MACOSX_BUNDLE_MIMETYPE_ICON "project.icns") | ||
set(MACOSX_BUNDLE_MIMETYPE_ID "io.lmms") | ||
set(MACOSX_BUNDLE_PROJECT_URL "${PROJECT_URL}") | ||
set(MACOSX_BUNDLE_DMG_TITLE "${MACOSX_BUNDLE_BUNDLE_NAME} ${MACOSX_BUNDLE_LONG_VERSION_STRING}") | ||
# appdmg won't allow volume names > 27 char https://github.com/LinusU/node-alias/issues/7 | ||
string(SUBSTRING "${MACOSX_BUNDLE_DMG_TITLE}" 0 27 MACOSX_BUNDLE_DMG_TITLE) | ||
# Info.plist | ||
set(MACOS_ICON "${PROJECT_NAME_UCASE}.icns") | ||
set(MACOS_MIMETYPE "application/x-lmms-project") | ||
set(MACOS_MIMETYPE_ICON "project.icns") | ||
set(MACOS_MIMETYPE_ID "io.lmms") | ||
configure_file("lmms.plist.in" "Info.plist" @ONLY) | ||
|
||
# "Bundle"-specific CPack options | ||
set(CPACK_GENERATOR "Bundle" PARENT_SCOPE) | ||
set(CPACK_BUNDLE_NAME "${PROJECT_NAME_UCASE}" PARENT_SCOPE) | ||
set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_BINARY_DIR}/Info.plist" PARENT_SCOPE) | ||
set(CPACK_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icon.icns" PARENT_SCOPE) | ||
|
||
# Resource files | ||
configure_file("lmms.plist.in" "Info.plist") | ||
configure_file("package_apple.sh.in" "package_apple.sh" @ONLY) | ||
configure_file("appdmg.json.in" "_appdmg.json.in" @ONLY) | ||
# Standard CPack options | ||
# supress license popup | ||
unset(CPACK_RESOURCE_FILE_LICENSE PARENT_SCOPE) | ||
# strip causes missing symbols on macOS | ||
set(CPACK_STRIP_FILES false PARENT_SCOPE) | ||
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}-mac${APPLE_OS_VER}") | ||
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}" PARENT_SCOPE) | ||
set(CPACK_PRE_BUILD_SCRIPTS "${CMAKE_CURRENT_SOURCE_DIR}/CPackPreBuild.cmake" PARENT_SCOPE) | ||
set(CPACK_POST_BUILD_SCRIPTS "${CMAKE_CURRENT_SOURCE_DIR}/CPackPostBuild.cmake" PARENT_SCOPE) | ||
set(CPACK_DMG_VOLUME_NAME "${PROJECT_NAME_UCASE} ${VERSION}" PARENT_SCOPE) | ||
set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_CURRENT_BINARY_DIR}/${SUBDIR}/background.tiff" PARENT_SCOPE) | ||
set(CPACK_DMG_DS_STORE "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIR}/DS_Store" PARENT_SCOPE) | ||
|
||
# CPack settings/scripts | ||
configure_file("CPackOptions.cmake.in" "CPackOptions.cmake" @ONLY) | ||
configure_file("CPackPreBuild.cmake.in" "CPackPreBuild.cmake" @ONLY) | ||
# Custom vars to expose to Cpack | ||
# must be prefixed with "CPACK_" per https://stackoverflow.com/a/46526757/3196753) | ||
set(CPACK_CURRENT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}" PARENT_SCOPE) | ||
set(CPACK_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" PARENT_SCOPE) | ||
set(CPACK_BINARY_DIR "${CMAKE_BINARY_DIR}" PARENT_SCOPE) | ||
set(CPACK_SOURCE_DIR "${CMAKE_SOURCE_DIR}" PARENT_SCOPE) | ||
set(CPACK_QMAKE_EXECUTABLE "${QT_QMAKE_EXECUTABLE}" PARENT_SCOPE) | ||
set(CPACK_CARLA_LIBRARIES "${CARLA_LIBRARIES}" PARENT_SCOPE) | ||
set(CPACK_PROJECT_NAME_UCASE "${PROJECT_NAME_UCASE}" PARENT_SCOPE) | ||
|
||
# appdmg is no longer required, but needed for creating a new .DS_Store file | ||
# make package appdmg | ||
# appdmg won't allow volume names > 27 char https://github.com/LinusU/node-alias/issues/7 | ||
string(SUBSTRING "${CPACK_DMG_VOLUME_NAME}" 0 27 "${PROJECT_NAME_UCASE} ${VERSION}") | ||
configure_file("appdmg.json.in" "_appdmg.json.in" @ONLY) | ||
add_custom_target(appdmg | ||
COMMAND touch "${CPACK_PACKAGE_FILE_NAME}.dmg" && | ||
rm "${CPACK_PACKAGE_FILE_NAME}-appdmg.dmg" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" | ||
COMMAND appdmg appdmg.json "${CPACK_PACKAGE_FILE_NAME}-appdmg.dmg" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" | ||
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/appdmg.json" | ||
COMMENT "Generating DMG") | ||
|
||
set(CPACK_GENERATOR "DragNDrop" PARENT_SCOPE) | ||
set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_CURRENT_BINARY_DIR}/CPackOptions.cmake" PARENT_SCOPE) |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
# Variables must be prefixed with "CPACK_" to be visible here | ||
# See also CpackOptions.cmake.in | ||
set(APP "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/${CPACK_PROJECT_NAME_UCASE}.app") | ||
|
||
# Copy missing files | ||
file(COPY "${CPACK_CURRENT_SOURCE_DIR}/project.icns" DESTINATION "${APP}/Contents/Resources") | ||
|
||
# Updates appdmg.json with CPACK_TEMPORARY_INSTALL_DIRECTORY | ||
# - .DS_Store can be recreated using appdmg appdmg.json lmms.dmg | ||
# - Find new .DS_Store from the root of the DMG file | ||
# - cp /Volumes/lmms-x.x.x/.DS_Store ../cmake/apple/DS_Store | ||
configure_file("${CPACK_CURRENT_BINARY_DIR}/_appdmg.json.in" "${CPACK_CURRENT_BINARY_DIR}/appdmg.json") | ||
file(REMOVE "${CPACK_CURRENT_BINARY_DIR}/_appdmg.json.in") | ||
|
||
# Create bundle structure | ||
file(MAKE_DIRECTORY "${APP}/Contents/MacOS") | ||
file(MAKE_DIRECTORY "${APP}/Contents/Frameworks") | ||
file(MAKE_DIRECTORY "${APP}/Contents/Resources") | ||
|
||
# Make all libraries writable for macdeployqt | ||
file(CHMOD_RECURSE "${APP}/Contents" PERMISSIONS | ||
OWNER_EXECUTE OWNER_WRITE OWNER_READ | ||
GROUP_EXECUTE GROUP_WRITE GROUP_READ | ||
WORLD_READ) | ||
|
||
# Fix layout | ||
file(RENAME "${APP}/Contents/Resources/lib" "${APP}/Contents/lib") | ||
file(RENAME "${APP}/Contents/Resources/share" "${APP}/Contents/share") | ||
file(RENAME "${APP}/Contents/Resources/bin" "${APP}/Contents/bin") | ||
|
||
# Move binaries into Contents/MacOS | ||
file(RENAME "${APP}/Contents/bin/lmms" "${APP}/Contents/MacOS/lmms") | ||
file(RENAME "${APP}/Contents/lib/lmms/RemoteZynAddSubFx" "${APP}/Contents/MacOS/RemoteZynAddSubFx") | ||
file(REMOVE_RECURSE "${APP}/Contents/bin") | ||
|
||
# Replace @rpath with @loader_path for Carla | ||
execute_process(COMMAND install_name_tool -change | ||
"@rpath/libcarlabase.dylib" | ||
"@loader_path/libcarlabase.dylib" | ||
"${APP}/Contents/lib/lmms/libcarlapatchbay.so" | ||
COMMAND_ERROR_IS_FATAL ANY) | ||
execute_process(COMMAND install_name_tool -change | ||
"@rpath/libcarlabase.dylib" | ||
"@loader_path/libcarlabase.dylib" | ||
"${APP}/Contents/lib/lmms/libcarlarack.so" | ||
COMMAND_ERROR_IS_FATAL ANY) | ||
|
||
# Build list of executables to inform macdeployqt about | ||
# e.g. -executable=foo.dylib -executable=bar.dylib | ||
file(GLOB LIBS "${APP}/Contents/lib/lmms/*.so") | ||
file(GLOB LADSPA "${APP}/Contents/lib/lmms/ladspa/*.so") | ||
list(APPEND LIBS "${APP}/Contents/MacOS/RemoteZynAddSubFx") | ||
list(APPEND LIBS ${LADSPA}) | ||
list(SORT LIBS) | ||
|
||
# Construct macdeployqt parameters | ||
foreach(_LIB IN LISTS LIBS) | ||
list(APPEND EXECUTABLES "-executable=${_LIB}") | ||
endforeach() | ||
|
||
# Call macdeployqt | ||
get_filename_component(QTBIN "${CPACK_QMAKE_EXECUTABLE}" DIRECTORY) | ||
message(STATUS "Calling ${QTBIN}/macdeployqt ${APP} [... executables]") | ||
execute_process(COMMAND "${QTBIN}/macdeployqt" "${APP}" ${EXECUTABLES} COMMAND_ERROR_IS_FATAL ANY) | ||
|
||
# Remove dummy carla libs, relink to a sane location (e.g. /Applications/Carla.app/...) | ||
# (must be done after calling macdeployqt) | ||
file(GLOB CARLALIBS "${APP}/Contents/lib/lmms/libcarla*") | ||
foreach(_CARLALIB IN LISTS CARLALIBS) | ||
foreach(_LIB "${CPACK_CARLA_LIBRARIES}") | ||
set(_OLDPATH "../../Frameworks/lib${_LIB}.dylib") | ||
set(_NEWPATH "Carla.app/Contents/MacOS/lib${_LIB}.dylib") | ||
execute_process(COMMAND install_name_tool -change | ||
"@loader_path/${_OLDPATH}" | ||
"@executable_path/../../../${_NEWPATH}" | ||
"${_CARLALIB}" | ||
COMMAND_ERROR_IS_FATAL ANY) | ||
file(REMOVE "${APP}/Contents/Frameworks/lib${_LIB}.dylib") | ||
endforeach() | ||
endforeach() | ||
|
||
# Call ad-hoc codesign manually (CMake offers this as well) | ||
execute_process(COMMAND codesign --force --deep --sign - "${APP}" COMMAND_ERROR_IS_FATAL ANY) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
# Variables must be prefixed with "CPACK_" to be visible here | ||
# See also CpackOptions.cmake.in | ||
execute_process(COMMAND convert | ||
"${CPACK_CURRENT_SOURCE_DIR}/*.png" | ||
"${CPACK_CURRENT_BINARY_DIR}/background.tiff" | ||
COMMAND_ERROR_IS_FATAL ANY) |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,9 @@ | ||
{ | ||
"title": "@MACOSX_BUNDLE_DMG_TITLE@", | ||
"title": "@APPDMG_VOLUME_NAME@", | ||
"background": "@CMAKE_SOURCE_DIR@/cmake/apple/background.png", | ||
"icon-size": 128, | ||
"contents": [ | ||
{ "x": 139, "y": 200, "type": "file", "path": "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/@MACOSX_BUNDLE_BUNDLE_NAME@.app" }, | ||
{ "x": 139, "y": 200, "type": "file", "path": "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/@PROJECT_NAME_UCASE@.app" }, | ||
{ "x": 568, "y": 200, "type": "link", "path": "/Applications" } | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.