libnm: merge branch 'th/libnm-version-script-bgo741069'

https://bugzilla.gnome.org/show_bug.cgi?id=741069
This commit is contained in:
Thomas Haller 2014-12-05 11:56:55 +01:00
commit 490eb51f0a
2 changed files with 51 additions and 17 deletions

View file

@ -1,4 +1,9 @@
{
__libnm_local {
local:
*;
};
libnm_1_0_0 {
global:
nm_802_11_ap_flags_get_type;
nm_802_11_ap_security_flags_get_type;
@ -841,6 +846,4 @@ global:
nm_wimax_nsp_get_signal_quality;
nm_wimax_nsp_get_type;
nm_wimax_nsp_network_type_get_type;
local:
*;
};
} __libnm_local;

View file

@ -4,22 +4,53 @@ LC_ALL=C
export LC_ALL
stat=0
so=$1
def=$2
so="$1"
def="$2"
PATTERN="_ANCHOR_"
# Have to prefix with a tab and suffix with a ';' to match .ver file format
get_syms='nm "$so" | grep "^[[:xdigit:]]\+ T " | sed "s/^[[:xdigit:]]\+ T //" | sed "s/^/\t/" | sed "s/$/;/"'
TMPFILE="$(mktemp .nm-check-exports.XXXXXX)"
echo $so: checking exported symbols against $def
{
echo "{"
echo "global:"
eval $get_syms | sort -u
echo "local:"
echo " *;"
echo "};"
} | diff -u "$def" - >&2 || stat=1
get_syms() {
nm "$1" |
sed -n 's/^[[:xdigit:]]\+ T //p' |
sort
}
get_syms_from_def() {
# be strict and only parse entries that start with one \t and end with a ';'
sed -n 's/^\t\([_a-zA-Z0-9]\+\);$/\1/p' "$1" |
grep '^\*$' -v |
sort
}
anchor() {
sed "s/.*/$PATTERN\0$PATTERN/"
}
unanchor() {
sed "s/^$PATTERN\(.*\)$PATTERN\$/\1/"
}
get_syms "$so" | anchor > "$TMPFILE"
WRONG="$(get_syms_from_def "$def" | anchor | grep -F -f - "$TMPFILE" -v)"
RESULT=$?
if [ $RESULT -eq 0 ]; then
stat=1
echo ">>library \"$so\" exports symbols that are not in linker script \"$def\":"
echo "$WRONG" | unanchor | nl
fi
get_syms_from_def "$def" | anchor > "$TMPFILE"
WRONG="$(get_syms "$so" | anchor | grep -F -f - "$TMPFILE" -v)"
RESULT=$?
if [ $RESULT -eq 0 ]; then
stat=1
echo ">>linker script \"$def\" contains symbols that are not exported by library \"$so\":"
echo "$WRONG" | unanchor | nl
fi
rm -rf "$TMPFILE"
exit $stat