mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-12 09:56:14 -05:00
c50b07dde8
* gnu/packages/patches/libmpeg2-arm-private-symbols.patch, gnu/packages/patches/libmpeg2-global-symbol-test.patch: New files. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. * gnu/packages/video.scm (libmpeg2)[source](patches): New field.
63 lines
2.1 KiB
Diff
63 lines
2.1 KiB
Diff
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 Debian:
|
|
https://salsa.debian.org/multimedia-team/mpeg2dec/blob/master/debian/patches/61_global-symbol-test.patch
|
|
|
|
--- 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
|