| #!/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 |
| |