xref: /OK3568_Linux_fs/yocto/poky/meta/recipes-multimedia/mpeg2dec/files/61_global-symbol-test.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunRewrite the public symbol check to verify the shared libraries, to check for
2*4882a593Smuzhiyunmore things, and to avoid duplication; fixes make check on ARM
3*4882a593Smuzhiyun
4*4882a593SmuzhiyunTaken From
5*4882a593Smuzhiyunhttps://sources.debian.org/src/mpeg2dec/0.5.1-8/debian/patches/61_global-symbol-test.patch/
6*4882a593Smuzhiyun
7*4882a593SmuzhiyunUpstream-Status: Pending
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunSigned-off-by: Khem Raj <raj.khem@gmail.com>
10*4882a593Smuzhiyun---
11*4882a593Smuzhiyun test/globals |   42 +++++++++++++++++++++++++++---------------
12*4882a593Smuzhiyun 1 file changed, 27 insertions(+), 15 deletions(-)
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun--- mpeg2dec.orig/test/globals
15*4882a593Smuzhiyun+++ mpeg2dec/test/globals
16*4882a593Smuzhiyun@@ -1,4 +1,8 @@
17*4882a593Smuzhiyun #!/bin/sh
18*4882a593Smuzhiyun+# TODO
19*4882a593Smuzhiyun+# - fix checking of .a libs; problem is that "nm -g --defined-only" lists
20*4882a593Smuzhiyun+#   internal symbols; this can be solved by using objdump, but it's probably
21*4882a593Smuzhiyun+#   good enough to just run the tests on the shared lib
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun if test x"$srcdir" != x""; then
24*4882a593Smuzhiyun     builddir="."	# running from make check, but it does not define that
25*4882a593Smuzhiyun@@ -14,22 +18,30 @@ builddir=`cd $builddir;pwd`
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun error=0
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun-bad_globals=`nm -g --defined-only $builddir/../libmpeg2/*.o |\
30*4882a593Smuzhiyun-    awk '{if ($3) print $3}' | grep -v '^_\?mpeg2_'`
31*4882a593Smuzhiyun-
32*4882a593Smuzhiyun-if test x"$bad_globals" != x""; then
33*4882a593Smuzhiyun-    echo BAD GLOBAL SYMBOLS:
34*4882a593Smuzhiyun-    for s in $bad_globals; do echo $s; done
35*4882a593Smuzhiyun+# check_bad_public_symbols <symbol prefix> <lib file> [<lib file>...]
36*4882a593Smuzhiyun+#
37*4882a593Smuzhiyun+# checks public symbols in shared libs:
38*4882a593Smuzhiyun+# - allow prefix_anything
39*4882a593Smuzhiyun+# - reject _prefixanything
40*4882a593Smuzhiyun+# - allow _anything
41*4882a593Smuzhiyun+# - reject anything else
42*4882a593Smuzhiyun+#
43*4882a593Smuzhiyun+# NB: skips missing files
44*4882a593Smuzhiyun+check_bad_public_symbols() {
45*4882a593Smuzhiyun+    symbols_prefix="$1"
46*4882a593Smuzhiyun+    shift
47*4882a593Smuzhiyun+    lib_files=`ls "$@" 2>/dev/null`
48*4882a593Smuzhiyun+    [ -z "$lib_files" ] && return
49*4882a593Smuzhiyun+    bad_globals=`nm -g --defined-only $lib_files |
50*4882a593Smuzhiyun+        awk '{if ($3) print $3}' |
51*4882a593Smuzhiyun+        sed -n "/^${symbols_prefix}_/ d; /^_${symbols_prefix}/ { p; d }; /^_/ d; p"`
52*4882a593Smuzhiyun+    [ -z "$bad_globals" ] && return
53*4882a593Smuzhiyun     error=1
54*4882a593Smuzhiyun-fi
55*4882a593Smuzhiyun-
56*4882a593Smuzhiyun-bad_globals=`nm -g --defined-only $builddir/../libmpeg2/convert/*.o |\
57*4882a593Smuzhiyun-    awk '{if ($3) print $3}' | grep -v '^_\?mpeg2convert_'`
58*4882a593Smuzhiyun+    echo BAD GLOBAL SYMBOLS in $lib_files:
59*4882a593Smuzhiyun+    echo "$bad_globals"
60*4882a593Smuzhiyun+}
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun-if test x"$bad_globals" != x""; then
63*4882a593Smuzhiyun-    echo BAD GLOBAL SYMBOLS:
64*4882a593Smuzhiyun-    for s in $bad_globals; do echo $s; done
65*4882a593Smuzhiyun-    error=1
66*4882a593Smuzhiyun-fi
67*4882a593Smuzhiyun+check_bad_public_symbols mpeg2 $builddir/../libmpeg2/.libs/libmpeg2.so
68*4882a593Smuzhiyun+check_bad_public_symbols mpeg2convert $builddir/../libmpeg2/convert/.libs/libmpeg2convert.so
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun exit $error
71