Blame tools/check-exports.sh

Packit 5756e2
#!/bin/sh
Packit 5756e2
Packit 5756e2
LC_ALL=C
Packit 5756e2
export LC_ALL
Packit 5756e2
Packit 5756e2
stat=0
Packit 5756e2
so="$1"
Packit 5756e2
def="$2"
Packit 5756e2
PATTERN="_ANCHOR_"
Packit 5756e2
Packit 5756e2
TMPFILE="$(mktemp .nm-check-exports.XXXXXX)"
Packit 5756e2
Packit 5756e2
Packit 5756e2
get_syms() {
Packit 5756e2
    ${NM:-nm} "$1" |
Packit 5756e2
    sed -n 's/^[[:xdigit:]]\+ [DT] //p' |
Packit 5756e2
    sort
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
get_syms_from_def() {
Packit 5756e2
    sed -n 's/^\t\(\([_a-zA-Z0-9]\+\)\|#\s*\([_a-zA-Z0-9]\+@@\?[_a-zA-Z0-9]\+\)\);$/\2\3/p' "$1" |
Packit 5756e2
    sort
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
anchor() {
Packit 5756e2
    sed "s/.*/$PATTERN\0$PATTERN/"
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
unanchor() {
Packit 5756e2
    sed "s/^$PATTERN\(.*\)$PATTERN\$/\1/"
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
Packit 5756e2
get_syms "$so" | anchor > "$TMPFILE"
Packit 5756e2
WRONG="$(get_syms_from_def "$def" | anchor | grep -F -f - "$TMPFILE" -v)"
Packit 5756e2
RESULT=$?
Packit 5756e2
if [ $RESULT -eq 0 ]; then
Packit 5756e2
    stat=1
Packit 5756e2
    echo ">>library \"$so\" exports symbols that are not in linker script \"$def\":"
Packit 5756e2
    echo "$WRONG" | unanchor | nl
Packit 5756e2
fi
Packit 5756e2
Packit 5756e2
get_syms_from_def "$def" | anchor > "$TMPFILE"
Packit 5756e2
WRONG="$(get_syms "$so" | anchor | grep -F -f - "$TMPFILE" -v)"
Packit 5756e2
RESULT=$?
Packit 5756e2
if [ $RESULT -eq 0 ]; then
Packit 5756e2
    stat=1
Packit 5756e2
    echo ">>linker script \"$def\" contains symbols that are not exported by library \"$so\":"
Packit 5756e2
    echo "$WRONG" | unanchor | nl
Packit 5756e2
fi
Packit 5756e2
Packit 5756e2
rm -rf "$TMPFILE"
Packit 5756e2
exit $stat
Packit 5756e2