123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- #!/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
- # STK rawwaves directory
- STK_RAWWAVE=$(brew --prefix stk)/share/stk/rawwaves
- # Place to create ".app" bundle
- APP="@CMAKE_BINARY_DIR@/@PROJECT_NAME_UCASE@.app"
- MSG_COLOR='\x1B[1;36m'
- COLOR_RESET='\x1B[0m'
- echo -e "$MSG_COLOR\n\nCreating App Bundle \"$APP\"...$COLOR_RESET"
- qtpath="$(dirname "@QT_QMAKE_EXECUTABLE@")"
- export PATH="$PATH:$qtpath"
- # Remove any old .app bundles
- rm -Rf "$APP"
- # Copy/overwrite Info.plist
- command cp "@CMAKE_BINARY_DIR@/Info.plist" "@CMAKE_INSTALL_PREFIX@/"
- # Create .app bundle containing contents from CMAKE_INSTALL_PREFIX
- mkdir -p "$APP/Contents/MacOS"
- mkdir -p "$APP/Contents/Frameworks"
- mkdir -p "$APP/Contents/Resources"
- mkdir -p "$APP/Contents/share/stk/rawwaves"
- cd "@CMAKE_INSTALL_PREFIX@"
- cp -R ./* "$APP/Contents"
- cp "@CMAKE_SOURCE_DIR@/cmake/apple/"*.icns "$APP/Contents/Resources/"
- cp "$STK_RAWWAVE"/*.raw "$APP/Contents/share/stk/rawwaves" > /dev/null 2>&1
- # Make all libraries writable for macdeployqt
- cd "$APP"
- find . -type f -print0 | xargs -0 chmod u+w
- lmmsbin="MacOS/@CMAKE_PROJECT_NAME@"
- zynlib="lib/lmms/libzynaddsubfx.so"
- zynfmk="Frameworks/libZynAddSubFxCore.dylib"
- zynbin="MacOS/RemoteZynAddSubFx"
- # Move lmms binary
- mv "$APP/Contents/bin/@CMAKE_PROJECT_NAME@" "$APP/Contents/$lmmsbin"
- # Fix zyn linking
- mv "$APP/Contents/lib/lmms/RemoteZynAddSubFx" "$APP/Contents/$zynbin"
- mv "$APP/Contents/lib/lmms/libZynAddSubFxCore.dylib" "$APP/Contents/$zynfmk"
- install_name_tool -change @rpath/libZynAddSubFxCore.dylib \
- @loader_path/../$zynfmk \
- "$APP/Contents/$zynbin"
- install_name_tool -change @rpath/libZynAddSubFxCore.dylib \
- @loader_path/../../$zynfmk \
- "$APP/Contents/$zynlib"
-
- # 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/$zynbin"
- _executables="${_executables} -executable=$APP/Contents/$zynfmk"
- # 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
- # Cleanup
- rm -rf "$APP/Contents/bin"
- echo -e "\nFinished.\n\n"
|