Improve library checks
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 17 Sep 2013 01:49:56 +0000 (21:49 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Tue, 17 Sep 2013 02:03:59 +0000 (22:03 -0400)
src/Makefile.am
src/check-defs.sh [new file with mode: 0755]
src/check-symbols.sh

index effb6bc..8180225 100644 (file)
@@ -329,6 +329,7 @@ test_buffer_serialize_LDADD = libharfbuzz.la $(HBLIBS)
 
 dist_check_SCRIPTS = \
        check-c-linkage-decls.sh \
+       check-defs.sh \
        check-header-guards.sh \
        check-includes.sh \
        check-libstdc++.sh \
diff --git a/src/check-defs.sh b/src/check-defs.sh
new file mode 100755 (executable)
index 0000000..d7a8ec2
--- /dev/null
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+LC_ALL=C
+export LC_ALL
+
+test -z "$srcdir" && srcdir=.
+test -z "$MAKE" && MAKE=make
+stat=0
+
+if which nm 2>/dev/null >/dev/null; then
+       :
+else
+       echo "check-defs.sh: 'nm' not found; skipping test"
+       exit 77
+fi
+
+defs="harfbuzz.def"
+$MAKE $defs > /dev/null
+tested=false
+for def in $defs; do
+       lib=`echo "$def" | sed 's/[.]def$//;s@.*/@@'`
+       so=.libs/lib${lib}.so
+
+       EXPORTED_SYMBOLS="`nm "$so" | grep ' [BCDGINRSTVW] ' | grep -v ' _fini\>\| _init\>\| _fdata\>\| _ftext\>\| __bss_start\>\| __bss_start__\>\| __bss_end__\>\| _edata\>\| _end\>\| _bss_end__\>\| __end__\>' | cut -d' ' -f3`"
+
+       if test -f "$so"; then
+
+               echo "Checking that $so has the same symbol list as $def"
+               {
+                       echo EXPORTS
+                       echo "$EXPORTED_SYMBOLS"
+                       # cheat: copy the last line from the def file!
+                       tail -n1 "$def"
+               } | diff "$def" - >&2 || stat=1
+
+               tested=true
+       fi
+done
+if ! $tested; then
+       echo "check-defs.sh: libharfbuzz shared library not found; skipping test"
+       exit 77
+fi
+
+exit $stat
index 73bfc9e..67bdf71 100755 (executable)
@@ -4,9 +4,9 @@ LC_ALL=C
 export LC_ALL
 
 test -z "$srcdir" && srcdir=.
-test -z "$MAKE" && MAKE=make
 stat=0
 
+
 if which nm 2>/dev/null >/dev/null; then
        :
 else
@@ -14,36 +14,23 @@ else
        exit 77
 fi
 
-defs="harfbuzz.def"
-$MAKE $defs > /dev/null
+echo "Checking that we are not exposing internal symbols"
 tested=false
-for def in $defs; do
-       lib=`echo "$def" | sed 's/[.]def$//;s@.*/@@'`
-       so=.libs/lib${lib}.so
-
+for so in `ls .libs/lib*.so .libs/lib*.dylib 2>/dev/null` ; do
+       
        EXPORTED_SYMBOLS="`nm "$so" | grep ' [BCDGINRSTVW] ' | grep -v ' _fini\>\| _init\>\| _fdata\>\| _ftext\>\| __bss_start\>\| __bss_start__\>\| __bss_end__\>\| _edata\>\| _end\>\| _bss_end__\>\| __end__\>' | cut -d' ' -f3`"
+       prefix=`basename "$so" | sed 's/libharfbuzz/hb/; s/-/_/g; s/[.].*//'`
 
-       if test -f "$so"; then
-
-               echo "Checking that $so has the same symbol list as $def"
-               {
-                       echo EXPORTS
-                       echo "$EXPORTED_SYMBOLS"
-                       # cheat: copy the last line from the def file!
-                       tail -n1 "$def"
-               } | diff "$def" - >&2 || stat=1
-
-               echo "Checking that we are not exposing internal symbols"
-               if echo "$EXPORTED_SYMBOLS" | grep -v 'hb_'; then
-                       echo "Ouch, internal symbols exposed"
-                       stat=1
-               fi
-
-               tested=true
+       echo "Processing $so"
+       if echo "$EXPORTED_SYMBOLS" | grep -v "^${prefix}_"; then
+               echo "Ouch, internal symbols exposed"
+               stat=1
        fi
+
+       tested=true
 done
 if ! $tested; then
-       echo "check-exported-symbols.sh: libharfbuzz shared library not found; skipping test"
+       echo "check-symbols.sh: no shared library found; skipping test"
        exit 77
 fi