mpeg2dec: Fix global symbol tests

Rewrite the public symbol check to verify the shared libraries, to check for
more things, and to avoid duplication; fixes make check on ARM

(From OE-Core rev: 31e02216c94cc49f90052c82982dec0be7d3133b)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Khem Raj
2019-01-30 22:50:11 -08:00
committed by Richard Purdie
parent ba7731646e
commit bbc4c8eb9b
2 changed files with 71 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
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

View File

@@ -10,6 +10,7 @@ SRC_URI = "http://libmpeg2.sourceforge.net/files/libmpeg2-${PV}.tar.gz \
file://altivec_h_needed.patch \
file://0001-check-for-available-arm-optimizations.patch \
file://0002-Set-visibility-of-global-symbols-used-in-ARM-specifi.patch \
file://61_global-symbol-test.patch \
"
S = "${WORKDIR}/libmpeg2-${PV}"