-
Notifications
You must be signed in to change notification settings - Fork 30
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
113 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
#!/usr/bin/env bash | ||
|
||
# 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 | ||
declare -a TARGETS=(\ | ||
".app"\ | ||
".appex"\ | ||
".component"\ | ||
".vst"\ | ||
".vst3"\ | ||
".app/Contents/PlugIns/$PLUGINNAME.appex" | ||
) | ||
|
||
echo "Known builds: ${BUILDS[*]}" | ||
echo "Known targets: ${TARGETS[*]}" | ||
|
||
echo "Build directory: $BUILDDIR" | ||
echo "Lib directory: $LIBDIR" | ||
|
||
|
||
FLUIDSYNTH="libfluidsynth.1.7.1.dylib" | ||
GLIB="libglib-2.0.0.dylib" | ||
GTHREAD="libgthread-2.0.0.dylib" | ||
INTL="libintl.8.dylib" | ||
PCRE="libpcre.1.dylib" | ||
|
||
FRAMEWORKEXEC="@executable_path/../Frameworks" | ||
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 | ||
CONTENTS="$BUILD/$PLUGINNAME$j/Contents" | ||
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 | ||
# we want to change this link to point to the fluidsynth library we copied into: Contents/MacOS/Frameworks/libfluidsynth.1.7.1.dylib | ||
# we tell it to look for it with a relative path: @executable_path/../Frameworks/libfluidsynth.1.7.1.dylib | ||
# and yes, it's fine to point it at our 1.7.1.dylib even though it expects 1.dylib. Because 1.dylib was always a symlink to the more specific version (1.7.1) anyway. | ||
install_name_tool -change /usr/local/opt/fluid-synth/lib/libfluidsynth.1.dylib "$FRAMEWORKEXEC/$FLUIDSYNTH" "$BINARY" | ||
|
||
# changes to our libfluidsynth (depends on glib, gthread, intl): | ||
# change our 1.7.1.dylib to identify itself as 1.dylib, to meet our targets' expectations | ||
install_name_tool -id "$FRAMEWORKLOAD/libfluidsynth.1.dylib" "$FRAMEWORKS/$FLUIDSYNTH" | ||
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" | ||
install_name_tool -change /usr/local/Cellar/glib/2.54.3/lib/libglib-2.0.0.dylib "$FRAMEWORKLOAD/$GLIB" "$FRAMEWORKS/$GTHREAD" | ||
|
||
# changes to our intl: | ||
install_name_tool -id "$FRAMEWORKLOAD/$INTL" "$FRAMEWORKS/$INTL" | ||
|
||
# changes to our pcre: | ||
install_name_tool -id "$FRAMEWORKLOAD/$PCRE" "$FRAMEWORKS/$PCRE" | ||
|
||
else | ||
echo "Missing $j; skipping." | ||
fi | ||
done | ||
else | ||
echo "No build directory '$i'. Skipping." | ||
fi | ||
done |