52 lines
951 B
Bash
52 lines
951 B
Bash
|
#!/bin/bash
|
||
|
|
||
|
if [ "$#" != 2 ]; then
|
||
|
echo "usage: $0 /path/to/install/root relative/lib/destination"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
cd "$1"
|
||
|
|
||
|
function buildlist() {
|
||
|
otool -L "$@" |
|
||
|
grep -E "(opt|Users)" |
|
||
|
perl -pe 's|^\s+(/.*)\s\(.*$|$1|' |
|
||
|
grep -vE ":$" |
|
||
|
sort -u
|
||
|
}
|
||
|
export -f buildlist
|
||
|
|
||
|
DEST="$2"
|
||
|
LDEST="@rpath"
|
||
|
TARGETS="$(find . \( -perm +111 -and -type f \))"
|
||
|
FOUNDLIBS="$(buildlist $TARGETS)"
|
||
|
PFOUNDLIBS=""
|
||
|
|
||
|
while [ "$FOUNDLIBS" != "$PFOUNDLIBS" ]; do
|
||
|
PFOUNDLIBS="$FOUNDLIBS"
|
||
|
FOUNDLIBS="$(buildlist $TARGETS $PFOUNDLIBS)"
|
||
|
done
|
||
|
|
||
|
INTOOL_CALL=()
|
||
|
|
||
|
for lib in $FOUNDLIBS; do
|
||
|
libname="$(basename "$lib")"
|
||
|
|
||
|
INTOOL_CALL+=(-change "$lib" "$LDEST/$libname")
|
||
|
cp "$lib" "$DEST/$libname"
|
||
|
|
||
|
echo "Fixing up dependency: $libname"
|
||
|
done
|
||
|
|
||
|
for lib in $FOUNDLIBS; do
|
||
|
libname="$(basename "$lib")"
|
||
|
lib="$DEST/$libname"
|
||
|
|
||
|
install_name_tool ${INTOOL_CALL[@]} -id "$LDEST/$libname" "$lib"
|
||
|
done
|
||
|
|
||
|
for target in $TARGETS; do
|
||
|
install_name_tool ${INTOOL_CALL[@]} "$target"
|
||
|
done
|
||
|
|