#!/bin/bash #title :create_applet_installer.sh #description :Creates Apple ".app" bundle for LMMS #author :Tres Finocchiaro #date :20140504 #version :1.1 #usage :bash create_applet_installer.sh #notes :See also https://github.com/LMMS #notes :Troubleshooting try: export DYLD_PRINT_LIBRARIES=1; export VERBOSE=1; #requires :deploymacqt #========================================================================================= # MacPorts Location MACPORTS=/opt/local # LMMS project root directory (extracted source) CMAKE_SRC=@CMAKE_SOURCE_DIR@ # LMMS compiled (install) resources CMAKE_INSTALL=@CMAKE_INSTALL_PREFIX@ # LMMS working build directory CMAKE_BUILD=$(cd @CMAKE_CURRENT_BINARY_DIR@/../..; pwd) # STK rawwaves directory STK_RAWWAVE=${HOME}/stk-*/rawwaves # Place to create ".app" bundle APP=${HOME}/Desktop/LMMS.app # MacPorts installs libreadline with wrong permissions LIBREADLINE=${MACPORTS}/lib/libreadline.6.2.dylib # The DMG packager script location DMG_SCRIPT_SRC=${CMAKE_BUILD}/create_apple_dmg.sh DMG_SCRIPT_DST=${HOME}/Desktop/create_apple_dmg.sh #========================================================================================= MSG_COLOR='\x1B[1;36m' COLOR_RESET='\x1B[0m' echo -e "${MSG_COLOR}\n\nCreating App Bundle \"${APP}\"...${COLOR_RESET}" # Check for u+w permissions on libreadline CHECKREADLINE=$(stat -f "%p" $LIBREADLINE) CHECKREADLINE=${CHECKREADLINE:3:1} if [ "${CHECKREADLINE}" != "7" ] then echo -e "\n\n\t\t\t\t***********\n\t\t\t\t* WARNING *\n\t\t\t\t***********" echo -e "File ${LIBREADLINE} is not marked as user writable." echo -e "This will break macdeployqt's linking process after it is copied." echo -e "A sudo password is required to elevate and fix using chmod u+w." echo -e "\nPLEASE ENTER SUDO PASSWORD:" sudo chmod u+w "${MACPORTS}/lib/libreadline.6.2.dylib" fi # Remove any old .app bundles rm -Rf ${APP} # Create new bundle, copy our built code to it mkdir -p ${APP} cd ${CMAKE_INSTALL} mkdir ${APP}/Contents cp -R * ${APP}/Contents # Manually copy STK rawwaves mkdir -p ${APP}/Contents/share/stk/rawwaves cp ${STK_RAWWAVE}/*.raw ${APP}/Contents/share/stk/rawwaves # Make all libraries writable for macdeployqt cd ${APP} find . -type f -print0 | xargs -0 chmod u+w # Move lmms binary to the proper location mkdir -p ${APP}/Contents/MacOS mv ${APP}/Contents/bin/lmms ${APP}/Contents/MacOS rm -rf ${APP}/Contents/bin # Move libraries to proper locations mkdir -p ${APP}/Contents/Frameworks mv ${APP}/Contents/lib/lmms/libZynAddSubFxCore.dylib \ ${APP}/Contents/Frameworks/libZynAddSubFxCore.dylib mv ${APP}/Contents/lib/lmms/RemoteZynAddSubFx \ ${APP}/Contents/MacOS/RemoteZynAddSubFx # Fix more Zyn Linking issues install_name_tool -change libZynAddSubFxCore.dylib \ @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ ${APP}/Contents/lib/lmms/libzynaddsubfx.so install_name_tool -change ${CMAKE_BUILD}/plugins/zynaddsubfx/libZynAddSubFxCore.dylib \ @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ ${APP}/Contents/MacOS/RemoteZynAddSubFx # Build a list of shared objects in target/lib/lmms for file in ${APP}/Contents/lib/lmms/*.so; do _executables="${_executables} -executable=${APP}/Contents/lib/lmms/${file##*/}" done # Build a list of shared objects in target/lib/lmms/ladspa for file in ${APP}/Contents/lib/lmms/ladspa/*.so; do _executables="${_executables} -executable=${APP}/Contents/lib/lmms/ladspa/${file##*/}" done # Additional binaries that require linking _executables="${_executables} -executable=${APP}/Contents/MacOS/RemoteZynAddSubFx" _executables="${_executables} -executable=${APP}/Contents/Frameworks/libZynAddSubFxCore.dylib" # Build our App Package using "macdeployqt" macdeployqt ${APP} $_executables # OS X Specific Artwork cp ${CMAKE_SRC}/data/*.icns ${APP}/Contents/Resources/ # Done. Ready to build DMG echo -e "\nFinished.\n\nYou may run LMMS from the Desktop." echo -e "\nTo create an Apple DMG Package run ${MSG_COLOR}\"${DMG_SCRIPT_DST}\"${COLOR_RESET}.\n" echo -e "(Note: You can drag/drop the script directly into this terminal window.)\n" cp ${DMG_SCRIPT_SRC} ${DMG_SCRIPT_DST} chmod +x ${DMG_SCRIPT_DST}