2018-03-11 08:37:08 +08:00
#!/usr/bin/env bash
2018-06-10 07:27:44 +08:00
# This script used to be used for manually copying
# libs into the target bundle and rewriting the dynamic
# links, to make the bundle portable.
#
# The script is (hopefully) no longer needed,
# because now our builds are portable automatically.
#
# We have a directory of already-linked
# libraries (lib_relinked), which regular builds
# link against and copy into the target bundle.
#
# The contents of lib_relinked were created by doing
# a one-time run of relink_libs.sh upon some libs
# copied out of brew.
2018-03-11 08:37:08 +08:00
# Ascertain directory in which script lives; compatible with all UNIX
# Thanks to kenorb
# http://stackoverflow.com/a/17744637/5257399
MYDIR = $( cd -P -- " $( dirname -- " $0 " ) " && pwd -P)
set -o pipefail
error( ) {
local parent_lineno = " $1 "
local message = " $2 "
local code = " ${ 3 :- 1 } "
if [ [ -n " $message " ] ] ; then
echo " Error on or near line ${ parent_lineno } : ${ message } ; exiting with status ${ code } "
else
echo " Error on or near line ${ parent_lineno } ; exiting with status ${ code } "
fi
exit " ${ code } "
}
trap 'error ${LINENO}' ERR
####
LIBDIR = " $MYDIR /lib "
BUILDDIR = " $MYDIR /build "
PLUGINNAME = "juicysfplugin"
declare -a BUILDS = ( "Debug" "Release" )
# .app is a special case which has a Plugins folder inside it, containing a .appex Plugin
2018-03-11 08:48:28 +08:00
declare -a TARGETS = ( "app" \
"appex" \
"component" \
"vst" \
"vst3" \
" app/Contents/PlugIns/ $PLUGINNAME .appex "
2018-03-11 08:37:08 +08:00
)
echo " Known builds: ${ BUILDS [*] } "
echo " Known targets: ${ TARGETS [*] } "
echo " Build directory: $BUILDDIR "
echo " Lib directory: $LIBDIR "
2018-05-12 23:13:47 +08:00
FLUIDSYNTH = "libfluidsynth.1.7.2.dylib"
2018-03-11 08:37:08 +08:00
GLIB = "libglib-2.0.0.dylib"
GTHREAD = "libgthread-2.0.0.dylib"
INTL = "libintl.8.dylib"
PCRE = "libpcre.1.dylib"
2018-05-12 23:13:47 +08:00
# all of the following are just for SF3 support...
SNDFILE = "libsndfile.1.dylib"
FLAC = "libFLAC.8.dylib"
OGG = "libogg.0.dylib"
VORBIS = "libvorbis.0.dylib"
VORBISENC = "libvorbisenc.2.dylib"
2018-03-11 08:37:08 +08:00
FRAMEWORKLOAD = "@loader_path/../Frameworks"
for i in " ${ BUILDS [@] } "
do
BUILD = " $BUILDDIR / $i "
if [ -d " $BUILD " ] ; then
echo " Found $i build subdirectory. Iterating over targets. "
for j in " ${ TARGETS [@] } "
do
2018-03-11 08:48:28 +08:00
CONTENTS = " $BUILD / $PLUGINNAME . $j /Contents "
2018-03-11 08:37:08 +08:00
BINARY = " $CONTENTS /MacOS/ $PLUGINNAME "
if [ -f " $BINARY " ] ; then
echo " Found $j "
echo "Copying libraries into target"
FRAMEWORKS = " $CONTENTS /Frameworks "
mkdir -p " $FRAMEWORKS "
cp " $LIBDIR / " * " $FRAMEWORKS / "
# we're gonna relink these frameworks also, so make them writeable
chmod +w " $FRAMEWORKS / " *
# our $BINARY (Contents/MacOS/juicysfplugin) begins its life linked to a brew-installed fluidsynth library
# which it expects to find at: /usr/local/opt/fluid-synth/lib/libfluidsynth.1.dylib
2018-05-12 23:13:47 +08:00
# we want to change this link to point to the fluidsynth library we copied into: Contents/MacOS/Frameworks/libfluidsynth.1.7.2.dylib
# we tell it to look for it with a relative path: @executable_path/../Frameworks/libfluidsynth.1.7.2.dylib
# and yes, it's fine to point it at our 1.7.2.dylib even though it expects 1.dylib. Because 1.dylib was always a symlink to the more specific version (1.7.2) anyway.
2018-03-15 08:17:49 +08:00
install_name_tool -change /usr/local/opt/fluid-synth/lib/libfluidsynth.1.dylib " $FRAMEWORKLOAD / $FLUIDSYNTH " " $BINARY "
2018-03-11 08:37:08 +08:00
# changes to our libfluidsynth (depends on glib, gthread, intl):
2018-05-12 23:13:47 +08:00
# change our 1.7.2.dylib to identify itself as 1.dylib, to meet our targets' expectations
2018-03-11 08:37:08 +08:00
install_name_tool -id " $FRAMEWORKLOAD /libfluidsynth.1.dylib " " $FRAMEWORKS / $FLUIDSYNTH "
2018-05-12 23:36:02 +08:00
install_name_tool -change /usr/local/opt/libsndfile/lib/libsndfile.1.dylib " $FRAMEWORKLOAD / $SNDFILE " " $FRAMEWORKS / $FLUIDSYNTH "
2018-03-11 08:37:08 +08:00
install_name_tool -change /usr/local/opt/glib/lib/libglib-2.0.0.dylib " $FRAMEWORKLOAD / $GLIB " " $FRAMEWORKS / $FLUIDSYNTH "
install_name_tool -change /usr/local/opt/glib/lib/libgthread-2.0.0.dylib " $FRAMEWORKLOAD / $GTHREAD " " $FRAMEWORKS / $FLUIDSYNTH "
install_name_tool -change /usr/local/opt/gettext/lib/libintl.8.dylib " $FRAMEWORKLOAD / $INTL " " $FRAMEWORKS / $FLUIDSYNTH "
# changes to our glib (depends on pcre, intl):
install_name_tool -id " $FRAMEWORKLOAD / $GLIB " " $FRAMEWORKS / $GLIB "
install_name_tool -change /usr/local/opt/pcre/lib/libpcre.1.dylib " $FRAMEWORKLOAD / $PCRE " " $FRAMEWORKS / $GLIB "
install_name_tool -change /usr/local/opt/gettext/lib/libintl.8.dylib " $FRAMEWORKLOAD / $INTL " " $FRAMEWORKS / $GLIB "
# changes to our gthread (depends on pcre, intl, glib):
# yes, the brew-installed libgthread links directly to brew-installed libglib (unlike fluidsynth, which points at a _symlink_ to the same)
install_name_tool -id " $FRAMEWORKLOAD / $GTHREAD " " $FRAMEWORKS / $GTHREAD "
install_name_tool -change /usr/local/opt/pcre/lib/libpcre.1.dylib " $FRAMEWORKLOAD / $PCRE " " $FRAMEWORKS / $GTHREAD "
install_name_tool -change /usr/local/opt/gettext/lib/libintl.8.dylib " $FRAMEWORKLOAD / $INTL " " $FRAMEWORKS / $GTHREAD "
2018-05-12 23:36:02 +08:00
install_name_tool -change /usr/local/Cellar/glib/2.56.1/lib/libglib-2.0.0.dylib " $FRAMEWORKLOAD / $GLIB " " $FRAMEWORKS / $GTHREAD "
2018-03-11 08:37:08 +08:00
# changes to our intl:
install_name_tool -id " $FRAMEWORKLOAD / $INTL " " $FRAMEWORKS / $INTL "
# changes to our pcre:
install_name_tool -id " $FRAMEWORKLOAD / $PCRE " " $FRAMEWORKS / $PCRE "
2018-05-12 23:13:47 +08:00
# the following are just for SF3 support...
# changes to our libsndfile (depends on FLAC, ogg, vorbis, vorbisenc):
install_name_tool -id " $FRAMEWORKLOAD / $SNDFILE " " $FRAMEWORKS / $SNDFILE "
install_name_tool -change /usr/local/opt/flac/lib/libFLAC.8.dylib " $FRAMEWORKLOAD / $FLAC " " $FRAMEWORKS / $SNDFILE "
install_name_tool -change /usr/local/opt/libogg/lib/libogg.0.dylib " $FRAMEWORKLOAD / $OGG " " $FRAMEWORKS / $SNDFILE "
install_name_tool -change /usr/local/opt/libvorbis/lib/libvorbis.0.dylib " $FRAMEWORKLOAD / $VORBIS " " $FRAMEWORKS / $SNDFILE "
install_name_tool -change /usr/local/opt/libvorbis/lib/libvorbisenc.2.dylib " $FRAMEWORKLOAD / $VORBISENC " " $FRAMEWORKS / $SNDFILE "
# changes to our FLAC:
install_name_tool -id " $FRAMEWORKLOAD / $FLAC " " $FRAMEWORKS / $FLAC "
# changes to our ogg:
install_name_tool -id " $FRAMEWORKLOAD / $OGG " " $FRAMEWORKS / $OGG "
# changes to our vorbis (depends on ogg):
install_name_tool -id " $FRAMEWORKLOAD / $VORBIS " " $FRAMEWORKS / $VORBIS "
install_name_tool -change /usr/local/opt/libogg/lib/libogg.0.dylib " $FRAMEWORKLOAD / $OGG " " $FRAMEWORKS / $VORBIS "
# changes to our vorbisenc (depends on vorbis, ogg):
install_name_tool -id " $FRAMEWORKLOAD / $VORBISENC " " $FRAMEWORKS / $VORBISENC "
install_name_tool -change /usr/local/Cellar/libvorbis/1.3.6/lib/libvorbis.0.dylib " $FRAMEWORKLOAD / $VORBIS " " $FRAMEWORKS / $VORBISENC "
install_name_tool -change /usr/local/opt/libogg/lib/libogg.0.dylib " $FRAMEWORKLOAD / $OGG " " $FRAMEWORKS / $VORBISENC "
2018-03-11 08:37:08 +08:00
else
echo " Missing $j ; skipping. "
fi
done
else
echo " No build directory ' $i '. Skipping. "
fi
done