Blame common/check-exports

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