mirror of https://github.com/debauchee/barrier.git
50 lines
1.6 KiB
Bash
Executable File
50 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# $1 = binary (program or dylib)
|
|
B_TARGET=$1
|
|
if [ "x$B_TARGET" = "x" ]; then
|
|
|
|
# add warning for users running manually
|
|
warn() { tput bold; tput setaf 3; echo "$@"; tput sgr0 ; }
|
|
warn "The scripts build_installer.sh and reref_dylibs.sh have been deprecated."
|
|
warn "Please use build_dist.sh instead to deploy using macdeployqt"
|
|
|
|
echo "Which binary needs to be re-referenced?"
|
|
exit 1
|
|
fi
|
|
|
|
cd "$(dirname "$B_TARGET")" || exit 1
|
|
|
|
# where to find non-system libraries relative to target's directory.
|
|
# the vast majority of the time this should be empty
|
|
B_REL_PATH=$2
|
|
|
|
# we're in target's directory now. trim off the path
|
|
B_TARGET=$(basename "$B_TARGET")
|
|
|
|
# get a list of non-system libraries and make local copies
|
|
B_LIBS=$(otool -XL "$B_TARGET" | awk '{ print $1 }' | grep -Ev '^(/usr/lib|/System)')
|
|
[ $? -ne 0 ] && exit 1
|
|
for B_LIB in $B_LIBS; do
|
|
B_LIB_NAME=$(basename "$B_LIB")
|
|
# otool reports barrier as "barrier:" which fails self-reference test below
|
|
B_LIB_NAME=${B_LIB_NAME//:}
|
|
|
|
# ignore self-references
|
|
[ "$B_TARGET" = "$B_LIB_NAME" ] && continue
|
|
|
|
B_DST=${B_REL_PATH}${B_LIB_NAME}
|
|
if [ ! -e "$B_DST" ]; then
|
|
cp "$B_LIB" "$B_DST" || exit 1
|
|
chmod u+rw "$B_DST" || exit 1
|
|
# recursively call this script on libraries purposefully not passing
|
|
# $B_REL_PATH so that it is only used explicitly
|
|
$0 "$B_DST"
|
|
fi
|
|
|
|
# adjust the target's metadata to point to the local copy
|
|
# rather than the system-wide copy which would only exist on
|
|
# a development machine
|
|
install_name_tool -change "$B_LIB" "@loader_path/$B_DST" "$B_TARGET" || exit 1
|
|
done
|