| Rewrite the public symbol check to verify the shared libraries, to check for |
| more things, and to avoid duplication; fixes make check on ARM |
| |
| Taken From |
| https://sources.debian.org/src/mpeg2dec/0.5.1-8/debian/patches/61_global-symbol-test.patch/ |
| |
| Upstream-Status: Pending |
| |
| Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| --- |
| test/globals | 42 +++++++++++++++++++++++++++--------------- |
| 1 file changed, 27 insertions(+), 15 deletions(-) |
| |
| --- mpeg2dec.orig/test/globals |
| +++ mpeg2dec/test/globals |
| @@ -1,4 +1,8 @@ |
| #!/bin/sh |
| +# TODO |
| +# - fix checking of .a libs; problem is that "nm -g --defined-only" lists |
| +# internal symbols; this can be solved by using objdump, but it's probably |
| +# good enough to just run the tests on the shared lib |
| |
| if test x"$srcdir" != x""; then |
| builddir="." # running from make check, but it does not define that |
| @@ -14,22 +18,30 @@ builddir=`cd $builddir;pwd` |
| |
| error=0 |
| |
| -bad_globals=`nm -g --defined-only $builddir/../libmpeg2/*.o |\ |
| - awk '{if ($3) print $3}' | grep -v '^_\?mpeg2_'` |
| - |
| -if test x"$bad_globals" != x""; then |
| - echo BAD GLOBAL SYMBOLS: |
| - for s in $bad_globals; do echo $s; done |
| +# check_bad_public_symbols <symbol prefix> <lib file> [<lib file>...] |
| +# |
| +# checks public symbols in shared libs: |
| +# - allow prefix_anything |
| +# - reject _prefixanything |
| +# - allow _anything |
| +# - reject anything else |
| +# |
| +# NB: skips missing files |
| +check_bad_public_symbols() { |
| + symbols_prefix="$1" |
| + shift |
| + lib_files=`ls "$@" 2>/dev/null` |
| + [ -z "$lib_files" ] && return |
| + bad_globals=`nm -g --defined-only $lib_files | |
| + awk '{if ($3) print $3}' | |
| + sed -n "/^${symbols_prefix}_/ d; /^_${symbols_prefix}/ { p; d }; /^_/ d; p"` |
| + [ -z "$bad_globals" ] && return |
| error=1 |
| -fi |
| - |
| -bad_globals=`nm -g --defined-only $builddir/../libmpeg2/convert/*.o |\ |
| - awk '{if ($3) print $3}' | grep -v '^_\?mpeg2convert_'` |
| + echo BAD GLOBAL SYMBOLS in $lib_files: |
| + echo "$bad_globals" |
| +} |
| |
| -if test x"$bad_globals" != x""; then |
| - echo BAD GLOBAL SYMBOLS: |
| - for s in $bad_globals; do echo $s; done |
| - error=1 |
| -fi |
| +check_bad_public_symbols mpeg2 $builddir/../libmpeg2/.libs/libmpeg2.so |
| +check_bad_public_symbols mpeg2convert $builddir/../libmpeg2/convert/.libs/libmpeg2convert.so |
| |
| exit $error |