#! /bin/bash # Copyright (C) 2010 Enrico Scholz # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## Usage: dso-fixup * BR=$1 LIBDIR=$2 PATTERN=$3 shift 3 for i; do echo -n $(basename "$i")' ' readelf -d $i | sed "\\!(NEEDED).*${PATTERN}!"'s/[^:]\+: \[\(.*\)\]/\1/p;d' | xargs echo -n echo " ##" done | ./depsort | while read lib deps; do link=$BR$LIBDIR/${lib%.so.*}.so test -L "$link" || { echo "bad file '$link'" >&2 exit 1 } set -- $deps test $# -ne 0 || continue rm -f $link { echo '/* GNU ld script */' echo -n "INPUT($LIBDIR/$lib" d= if test "$#" -gt 0; then echo -n " AS_NEEDED(" for i; do echo -n "$d$LIBDIR/$i" d=' ' done echo -n ")" fi echo ")" } > "$link" chmod 0644 "$link" done