#!/bin/bash
#title         :install_apple.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
#=========================================================================================
# STK rawwaves directory
STK_RAWWAVE=$HOME/stk-*/rawwaves
 
# Place to create ".app" bundle
APP="@CMAKE_BINARY_DIR@/@PROJECT_NAME_UCASE@.app"
 
# MacPorts installs libreadline with wrong permissions
LIBREADLINE="libreadline.6.2.dylib"
 
#=========================================================================================

MSG_COLOR='\x1B[1;36m'
COLOR_RESET='\x1B[0m'
echo -e "$MSG_COLOR\n\nCreating App Bundle \"$APP\"...$COLOR_RESET"

# Locate macdeployqt, assume homebrew & Qt5
which macdeployqt > /dev/null 2>&1
if [ $? -ne 0 ]; then
  brew --prefix qt55 > /dev/null 2>&1
  if [ $? -eq 0 ]; then
    # Prefer Qt 5.5 (QTBUG-53533)
    export PATH=$PATH:$(brew --prefix qt55)/bin
  else
    # Fallback Qt 5.6+
  	export PATH=$PATH:$(brew --prefix qt5)/bin
  fi
fi
 
# MacPorts only - check for u+w permissions on libreadline
if [ -f "@APPLE_PREFIX@/lib/$LIBREADLINE" ]; then
  CHECKREADLINE=$(stat -f "%p" @APPLE_PREFIX@/lib/$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 "@APPLE_PREFIX@/lib/$LIBREADLINE"
  fi
fi
 
# Remove any old .app bundles
rm -Rf "$APP"

# Copy/overwrite Info.plist
\cp  "@CMAKE_BINARY_DIR@/Info.plist" "@CMAKE_INSTALL_PREFIX@/"
 
# Create new bundle, copy our built code to it
mkdir -p "$APP"
cd "@CMAKE_INSTALL_PREFIX@"
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" > /dev/null 2>&1
 
# 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/lmms"
rm -rf "$APP/Contents/bin"
 
# Move libraries to proper locations
mkdir -p "$APP/Contents/Frameworks"
mv "$APP/Contents/lib/lmms/RemoteZynAddSubFx" \
   "$APP/Contents/MacOS/RemoteZynAddSubFx"
   
rm "$APP/Contents/Frameworks/libZynAddSubFxCore.dylib" > /dev/null 2>&1

# Fix zyn linking 
install_name_tool -change @rpath/libZynAddSubFxCore.dylib \
   @loader_path/../lib/lmms/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
   _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
 
# Additional binaries that require linking
_executables="${_executables} -executable=$APP/Contents/MacOS/RemoteZynAddSubFx"
_executables="${_executables} -executable=$APP/Contents/lib/lmms/libZynAddSubFxCore.dylib"

# Build our App Package using "macdeployqt"
macdeployqt "$APP" $_executables

# OS X Specific Artwork
mkdir -p "$APP/Contents/Resources"
cp "@CMAKE_SOURCE_DIR@/cmake/apple/"*.icns "$APP/Contents/Resources/"

echo -e "\nFinished.\n\n"
