|  | #!/bin/sh | 
|  | # check-exports | 
|  | # | 
|  | # quick'n'dirty script that retrieves the list of exported symbols of a given | 
|  | # library using 'nm', and compares that against the list of symbols-to-export | 
|  | # of our win32/common/libfoo.def files. | 
|  |  | 
|  | if [ $# -ne 2 ]; then | 
|  | echo "Usage: $0 library.def library.so" | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | def_path="$1" | 
|  | def_name="$(basename $def_path)" | 
|  | lib_path="$2" | 
|  |  | 
|  | lib_result="`mktemp /tmp/defname.XXXXXX`" | 
|  |  | 
|  | LC_ALL=C | 
|  | export LC_ALL | 
|  |  | 
|  | # On Solaris, add -p to get the correct output format | 
|  | NMARGS= | 
|  | if nm -V 2>&1 |grep Solaris > /dev/null; then | 
|  | NMARGS=-p | 
|  | fi | 
|  |  | 
|  | # _end is special cased because for some reason it is reported as an exported | 
|  | # BSS symbol, unlike on linux where it's a local absolute symbol. | 
|  | nm $NMARGS $lib_path | awk \ | 
|  | '{ | 
|  | if ($3 ~ /^[_]?(gst_|Gst|GST_).*/) | 
|  | { | 
|  | if ($2 ~ /^[BSDG]$/) | 
|  | print "\t" $3 " DATA" | 
|  | else if ($2 == "T") | 
|  | print "\t" $3 | 
|  | } | 
|  | }' | sort | awk '{ if (NR == 1) print "EXPORTS"; print $0; }' \ | 
|  | > $lib_result | 
|  |  | 
|  | diffoutput=`diff -u $def_path $lib_result` | 
|  | diffresult=$? | 
|  |  | 
|  | rm $lib_result | 
|  |  | 
|  | if test "$diffresult" -eq 0; then | 
|  | exit 0; | 
|  | else | 
|  | echo -n "$diffoutput" >&2 | 
|  | echo >&2 | 
|  | exit 1; | 
|  | fi | 
|  |  |