summaryrefslogtreecommitdiff
path: root/check-exports
blob: 4e220955b918c59a27f66dab216dbb020a4ac802 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/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

export LC_ALL=C

def_path=$1
def_name=$(basename $def_path)
lib_path=$2

lib_result=$(mktemp /tmp/defname.XXXXXX)

# 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).
nm $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/)
		{
			if ($2 == "B")
				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`

rm $lib_result

if test "x$diffoutput" = "x"; then
  exit 0;
else
  echo -n "$diffoutput" >&2
  echo >&2
  exit 1;
fi