From 9b9e4af66a119b334905b5dc4e34fa2a06700700 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Mon, 13 May 2024 00:32:33 -0400 Subject: [PATCH] Convert apple package script to cmake --- cmake/apple/CMakeLists.txt | 69 ++++++++++++------- cmake/apple/CPackOptions.cmake.in | 10 --- cmake/apple/CPackPostBuild.cmake | 83 ++++++++++++++++++++++ cmake/apple/CPackPreBuild.cmake | 6 ++ cmake/apple/CPackPreBuild.cmake.in | 24 ------- cmake/apple/appdmg.json.in | 4 +- cmake/apple/lmms.plist.in | 50 +++++++------- cmake/apple/package_apple.sh.in | 107 ----------------------------- 8 files changed, 161 insertions(+), 192 deletions(-) delete mode 100644 cmake/apple/CPackOptions.cmake.in create mode 100644 cmake/apple/CPackPostBuild.cmake create mode 100644 cmake/apple/CPackPreBuild.cmake delete mode 100644 cmake/apple/CPackPreBuild.cmake.in delete mode 100644 cmake/apple/package_apple.sh.in diff --git a/cmake/apple/CMakeLists.txt b/cmake/apple/CMakeLists.txt index c52779429f9..b627591f326 100644 --- a/cmake/apple/CMakeLists.txt +++ b/cmake/apple/CMakeLists.txt @@ -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) diff --git a/cmake/apple/CPackOptions.cmake.in b/cmake/apple/CPackOptions.cmake.in deleted file mode 100644 index 0757422838d..00000000000 --- a/cmake/apple/CPackOptions.cmake.in +++ /dev/null @@ -1,10 +0,0 @@ -# Supress license popup when opening DMG -unset(CPACK_RESOURCE_FILE_LICENSE) -# Disable strip, it causes missing symbols on macOS -set(CPACK_STRIP_FILES false) -set(CPACK_PACKAGE_FILE_NAME "@PROJECT_NAME@-@VERSION@") -set(CPACK_PRE_BUILD_SCRIPTS "@CMAKE_CURRENT_BINARY_DIR@/CPackPreBuild.cmake") -set(CPACK_DMG_VOLUME_NAME "@PROJECT_NAME_UCASE@ @VERSION@") -set(CPACK_DMG_BACKGROUND_IMAGE "@CMAKE_CURRENT_BINARY_DIR@/background.tiff") -set(CPACK_DMG_DS_STORE "@CMAKE_CURRENT_SOURCE_DIR@/DS_Store") -set(CPACK_DMG_FILE "@CMAKE_BINARY_DIR@/@CMAKE_PROJECT_NAME@-@VERSION@-mac@APPLE_OS_VER@.dmg") \ No newline at end of file diff --git a/cmake/apple/CPackPostBuild.cmake b/cmake/apple/CPackPostBuild.cmake new file mode 100644 index 00000000000..c9ca6bccf1d --- /dev/null +++ b/cmake/apple/CPackPostBuild.cmake @@ -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) \ No newline at end of file diff --git a/cmake/apple/CPackPreBuild.cmake b/cmake/apple/CPackPreBuild.cmake new file mode 100644 index 00000000000..88c6446699c --- /dev/null +++ b/cmake/apple/CPackPreBuild.cmake @@ -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) \ No newline at end of file diff --git a/cmake/apple/CPackPreBuild.cmake.in b/cmake/apple/CPackPreBuild.cmake.in deleted file mode 100644 index 9686438e24e..00000000000 --- a/cmake/apple/CPackPreBuild.cmake.in +++ /dev/null @@ -1,24 +0,0 @@ -# Use @VAR@ for immediate expansion (e.g. @CMAKE_SOURCE_DIR@) -# Use ${VAR} for delayed expansion (e.g. ${CMAKE_INSTALL_PREFIX}) - -# Install resource files -file(INSTALL "@CMAKE_CURRENT_BINARY_DIR@/Info.plist" DESTINATION "${CPACK_TEMPORARY_INSTALL_DIRECTORY}") -file(INSTALL "@CMAKE_CURRENT_SOURCE_DIR@/icon.icns" DESTINATION "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/Resources") -file(INSTALL "@CMAKE_CURRENT_SOURCE_DIR@/project.icns" DESTINATION "${CPACK_TEMPORARY_INSTALL_DIRECTORY}/Resources") - -# tiff file is multi-resource (1x & 2x) created programatically using convert -execute_process(COMMAND convert "@CMAKE_CURRENT_SOURCE_DIR@/*.png" "@CMAKE_CURRENT_BINARY_DIR@/background.tiff") - -# 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("@CMAKE_CURRENT_BINARY_DIR@/_appdmg.json.in" "@CMAKE_CURRENT_BINARY_DIR@/appdmg.json") -file(REMOVE "@CMAKE_CURRENT_BINARY_DIR@/_appdmg.json.in") - -# TODO: Port this script to CMake -execute_process(COMMAND chmod u+x @CMAKE_CURRENT_BINARY_DIR@/package_apple.sh) -execute_process(COMMAND @CMAKE_CURRENT_BINARY_DIR@/package_apple.sh ${CPACK_TEMPORARY_INSTALL_DIRECTORY} RESULT_VARIABLE EXIT_CODE) -if(NOT EXIT_CODE EQUAL 0) - message(FATAL_ERROR "Execution of package_apple.sh failed") -endif() \ No newline at end of file diff --git a/cmake/apple/appdmg.json.in b/cmake/apple/appdmg.json.in index 1835d6befc2..ec9fb5c7a3a 100644 --- a/cmake/apple/appdmg.json.in +++ b/cmake/apple/appdmg.json.in @@ -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" } ] } diff --git a/cmake/apple/lmms.plist.in b/cmake/apple/lmms.plist.in index 88fe0b0bf06..b8982a86630 100644 --- a/cmake/apple/lmms.plist.in +++ b/cmake/apple/lmms.plist.in @@ -7,13 +7,13 @@ English CFBundleIconFile - @MACOSX_BUNDLE_ICON_FILE@ + @MACOS_ICON@ CFBundlePackageType APPL CFBundleGetInfoString - @MACOSX_BUNDLE_GUI_IDENTIFIER@ @MACOSX_BUNDLE_LONG_VERSION_STRING@ + @PROJECT_NAME_UCASE@ @VERSION@ CFBundleSignature - @MACOSX_BUNDLE_GUI_IDENTIFIER@ + @PROJECT_NAME_UCASE@ CFBundleExecutable - @MACOSX_BUNDLE_GUI_IDENTIFIER@ + @PROJECT_NAME_UCASE@ CFBundleVersion - @MACOSX_BUNDLE_LONG_VERSION_STRING@ + @VERSION@ CFBundleShortVersionString - @MACOSX_BUNDLE_LONG_VERSION_STRING@ + @VERSION@ CFBundleName - @MACOSX_BUNDLE_BUNDLE_NAME@ + @PROJECT_NAME_UCASE@ CFBundleInfoDictionaryVersion 6.0 CFBundleIdentifier - @MACOSX_BUNDLE_MIMETYPE_ID@ + @MACOS_MIMETYPE_ID@ CFBundleDocumentTypes - + CFBundleTypeExtensions mmpz CFBundleTypeIconFile - @MACOSX_BUNDLE_MIMETYPE_ICON@ + @MACOS_MIMETYPE_ICON@ CFBundleTypeName - @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project + @PROJECT_NAME_UCASE@ Project CFBundleTypeOSTypes mmpz @@ -69,19 +69,19 @@ Editor CFBundleTypeMIMETypes - @MACOSX_BUNDLE_MIMETYPE@ + @MACOS_MIMETYPE@ - + CFBundleTypeExtensions mmp CFBundleTypeIconFile - @MACOSX_BUNDLE_MIMETYPE_ICON@ + @MACOS_MIMETYPE_ICON@ CFBundleTypeName - @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project (uncompressed) + @PROJECT_NAME_UCASE@ Project (uncompressed) CFBundleTypeOSTypes mmp @@ -90,23 +90,23 @@ Editor CFBundleTypeMIMETypes - @MACOSX_BUNDLE_MIMETYPE@ + @MACOS_MIMETYPE@ - + UTExportedTypeDeclarations UTTypeIdentifier - @MACOSX_BUNDLE_MIMETYPE_ID@.mmpz + @MACOS_MIMETYPE_ID@.mmpz UTTypeReferenceURL - @MACOSX_BUNDLE_PROJECT_URL@ + @PROJECT_URL@ UTTypeDescription - @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project + @PROJECT_NAME_UCASE@ Project UTTypeIconFile - @MACOSX_BUNDLE_MIMETYPE_ICON@ + @MACOS_MIMETYPE_ICON@ UTTypeConformsTo public.data @@ -122,13 +122,13 @@ UTTypeIdentifier - @MACOSX_BUNDLE_MIMETYPE_ID@.mmp + @MACOS_MIMETYPE_ID@.mmp UTTypeReferenceURL - @MACOSX_BUNDLE_PROJECT_URL@ + @PROJECT_URL@ UTTypeDescription - @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project (uncompressed) + @PROJECT_NAME_UCASE@ Project (uncompressed) UTTypeIconFile - @MACOSX_BUNDLE_MIMETYPE_ICON@ + @MACOS_MIMETYPE_ICON@ UTTypeConformsTo public.xml diff --git a/cmake/apple/package_apple.sh.in b/cmake/apple/package_apple.sh.in deleted file mode 100644 index 13310aa3906..00000000000 --- a/cmake/apple/package_apple.sh.in +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/bash -# Creates Apple ".app" bundle for @PROJECT_NAME_UCASE@ -# Note: -# Examine linkings using `otool -L somelib.so` -# Debug the loading of dynamic libraries using `export DYLD_PRINT_LIBRARIES=1` - -set -e - -MSG_COLOR='\x1B[1;36m' -COLOR_RESET='\x1B[0m' -APP="$1/@PROJECT_NAME_UCASE@.app" -echo -e "$MSG_COLOR\n\nCreating App Bundle \"$APP\"...$COLOR_RESET" - -qtpath="$(dirname "@QT_QMAKE_EXECUTABLE@")" -export PATH="$PATH:$qtpath" - -# Ensure an install path was passed in -if [ -z "$1" ]; then - echo "An install folder was not provided" - exit 1 -fi - -if [ -d "$1" ]; then - echo "Directory $1 exists, using..." -else - echo "Provided directory '$1' does not exist" -fi - -# Create .app bundle containing contents from CPACK_TEMPORARY_INSTALL_DIRECTORY -mkdir -p "$APP/Contents/MacOS" -mkdir -p "$APP/Contents/Frameworks" -mkdir -p "$APP/Contents/Resources" -cd "$1" -for file in *; do - if [ "$(basename "$file")" != "@PROJECT_NAME_UCASE@.app" ]; then - mv "$file" "$APP/Contents/" - fi -done - -# Make all libraries writable for macdeployqt -cd "$APP" -find . -type f -print0 | xargs -0 chmod u+w - -# Move lmms binary -mv "$APP/Contents/bin/@CMAKE_PROJECT_NAME@" "$APP/Contents/MacOS/@CMAKE_PROJECT_NAME@" -# shellcheck disable=SC2115 -rm -rf "$APP/bin" - -# Fix zyn linking -mv "$APP/Contents/lib/lmms/RemoteZynAddSubFx" "$APP/Contents/MacOS/RemoteZynAddSubFx" - -# Replace @rpath with @loader_path for Carla -# See also plugins/CarlaBase/CMakeLists.txt -# This MUST be done BEFORE calling macdeployqt -install_name_tool -change @rpath/libcarlabase.dylib \ - @loader_path/libcarlabase.dylib \ - "$APP/Contents/lib/lmms/libcarlapatchbay.so" - -install_name_tool -change @rpath/libcarlabase.dylib \ - @loader_path/libcarlabase.dylib \ - "$APP/Contents/lib/lmms/libcarlarack.so" - -# Link lmms binary -_executables="${_executables} -executable=$APP/Contents/MacOS/RemoteZynAddSubFx" - -# Build a list of shared objects in target/lib/lmms -for file in "$APP/Contents/lib/lmms/"*.so; do - _thisfile="$APP/Contents/lib/lmms/${file##*/}" - _executables="${_executables} -executable=$_thisfile" -done - -# Build a list of shared objects in target/lib/lmms/ladspa -for file in "$APP/Contents/lib/lmms/ladspa/"*.so; do - _thisfile="$APP/Contents/lib/lmms/ladspa/${file##*/}" - _executables="${_executables} -executable=$_thisfile" -done - -# Finalize .app -# shellcheck disable=SC2086 -# macdeployqt "$APP" $_executables - -# Carla is a standalone plugin. Remove library, look for it side-by-side LMMS.app -# This MUST be done AFTER calling macdeployqt -# -# For example: -# /Applications/LMMS.app -# /Applications/Carla.app -carlalibs=$(echo "@CARLA_LIBRARIES@"|tr ";" "\n") - -# Loop over all libcarlas, fix linking -for file in "$APP/Contents/lib/lmms/"libcarla*; do - _thisfile="$APP/Contents/lib/lmms/${file##*/}" - for lib in $carlalibs; do - _oldpath="../../Frameworks/lib${lib}.dylib" - _newpath="Carla.app/Contents/MacOS/lib${lib}.dylib" - # shellcheck disable=SC2086 - install_name_tool -change @loader_path/$_oldpath \ - @executable_path/../../../$_newpath \ - "$_thisfile" - rm -f "$APP/Contents/Frameworks/lib${lib}.dylib" - done -done - -# Codesign -codesign --force --deep --sign - "$APP" - -echo -e "\nFinished.\n\n"