diff options
author | Thomas Haller <thaller@redhat.com> | 2014-12-03 16:14:48 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2014-12-05 11:56:37 +0100 |
commit | 256662f70144e542f4f4c7ba96334a0f1f9977b5 (patch) | |
tree | 5a3d1b8e5313d98d2f5b9812d6764a77934e37b7 | |
parent | 005b83de478cc41847d9916518eccd7e230bbf78 (diff) | |
download | NetworkManager-256662f70144e542f4f4c7ba96334a0f1f9977b5.tar.gz |
build: adjust tools/check-exports.sh
Now that the version scripts might have different
sections, the previous check-exports.sh script no
longer works.
-rwxr-xr-x | tools/check-exports.sh | 57 |
1 files changed, 44 insertions, 13 deletions
diff --git a/tools/check-exports.sh b/tools/check-exports.sh index b5a9e952b5..2049d0b3cb 100755 --- a/tools/check-exports.sh +++ b/tools/check-exports.sh @@ -4,22 +4,53 @@ LC_ALL=C export LC_ALL stat=0 -so=$1 -def=$2 +so="$1" +def="$2" +PATTERN="_ANCHOR_" -# Have to prefix with a tab and suffix with a ';' to match .ver file format -get_syms='nm "$so" | grep "^[[:xdigit:]]\+ T " | sed "s/^[[:xdigit:]]\+ T //" | sed "s/^/\t/" | sed "s/$/;/"' +TMPFILE="$(mktemp .nm-check-exports.XXXXXX)" -echo $so: checking exported symbols against $def -{ - echo "{" - echo "global:" - eval $get_syms | sort -u - echo "local:" - echo " *;" - echo "};" -} | diff -u "$def" - >&2 || stat=1 +get_syms() { + nm "$1" | + sed -n 's/^[[:xdigit:]]\+ T //p' | + sort +} +get_syms_from_def() { + # be strict and only parse entries that start with one \t and end with a ';' + sed -n 's/^\t\([_a-zA-Z0-9]\+\);$/\1/p' "$1" | + grep '^\*$' -v | + sort +} + +anchor() { + sed "s/.*/$PATTERN\0$PATTERN/" +} + +unanchor() { + sed "s/^$PATTERN\(.*\)$PATTERN\$/\1/" +} + + +get_syms "$so" | anchor > "$TMPFILE" +WRONG="$(get_syms_from_def "$def" | anchor | grep -F -f - "$TMPFILE" -v)" +RESULT=$? +if [ $RESULT -eq 0 ]; then + stat=1 + echo ">>library \"$so\" exports symbols that are not in linker script \"$def\":" + echo "$WRONG" | unanchor | nl +fi + +get_syms_from_def "$def" | anchor > "$TMPFILE" +WRONG="$(get_syms "$so" | anchor | grep -F -f - "$TMPFILE" -v)" +RESULT=$? +if [ $RESULT -eq 0 ]; then + stat=1 + echo ">>linker script \"$def\" contains symbols that are not exported by library \"$so\":" + echo "$WRONG" | unanchor | nl +fi + +rm -rf "$TMPFILE" exit $stat |