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

# FIXME 0.11: in 0.11, we should change the export filter to only export
# _gst_foo, but not __gst_foo (we can't change this now, since we added
# __gst_debug_min and __gst_debug_enabled at some point and need to keep
# ABI compatibility).  So below we special-case some symbols that shouldn't
# really be exported, either because we're too lazy to rename them to something
# that's not exported (like the _gst_parse_* stuff) or because we had them in
# public headers at some point although they shouldn't be and so we need to
# keep them exported now (like _gst_debug_init,
# __gst_element_factory_add_interface or
# __gst_element_factory_add_static_pad_template).  We suppress them here to
# make sure they're at least not exported in the windows msvc build (they
# were never in the .def file, so they never got exported).
# _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_parse_yy/ && \
		    $3 !~ /^_gst_[a-z]*_init/ && \
		    $3 !~ /^_gst_parse_launch/ && \
		    $3 !~ /^__gst_element_details_/ && \
		    $3 !~ /^__gst_element_factory_add_/ && \
		    $3 !~ /^gst_interfaces_marshal/ && \
		    $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

