summaryrefslogtreecommitdiff
path: root/abi-check
blob: 666557b890b5fe1de05c5f647b8384c7f9276588 (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
#!/bin/bash
set -eu

RET=0

if ! [[ -f "${LIB}" ]]; then
	echo "Test library \"${LIB}\" does not exist"
	exit 99;
fi

if ! [[ -n "${NM}" ]]; then
	echo "NM environment variable not set"
	exit 99;
fi

AVAIL_FUNCS="$(${NM} -D --format=bsd --defined-only ${LIB} | awk '{print $3}')"

REQ_FUNCS="$(cat ${ABI})"

NEW_ABI=$(echo "$AVAIL_FUNCS" | while read func; do
	echo "$func" | grep -q "^_" && continue
	echo "${REQ_FUNCS}" | grep -q "^${func}$" && continue

	echo "$func"
done)

if [[ -n ${NEW_ABI} ]]; then
	echo "New ABI detected - If intentional, update ${ABI}."
	echo "${NEW_ABI}"
	RET=1;
fi

REMOVED_ABI=$(echo "${REQ_FUNCS}" | while read func; do
	echo "${AVAIL_FUNCS}" | grep -q "^${func}$" && continue

	echo "${func}"
done)

if [[ -n ${REMOVED_ABI} ]]; then
	echo "ABI break detected - required symbols no longer exported!"
	echo "${REMOVED_ABI}"
	RET=1
fi

exit ${RET}