summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2014-12-03 16:14:48 +0100
committerThomas Haller <thaller@redhat.com>2014-12-05 11:56:37 +0100
commit256662f70144e542f4f4c7ba96334a0f1f9977b5 (patch)
tree5a3d1b8e5313d98d2f5b9812d6764a77934e37b7
parent005b83de478cc41847d9916518eccd7e230bbf78 (diff)
downloadNetworkManager-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-xtools/check-exports.sh57
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