123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #!/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 '^\s+/' |
- grep -vE '^\s+/System/' |
- grep -vE '^\s+/usr/lib/' |
- 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"
- chmod 644 "$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
|