diff --git a/abi-check.sh b/abi-check.sh index a2a24a0..585c14a 100755 --- a/abi-check.sh +++ b/abi-check.sh @@ -209,6 +209,7 @@ abidump ${release} echo "=== Comparing ABIs ===" perl "${ACC}" -l json-c -old ABI-${prev}.dump -new ABI-${release}.dump +perl "${ACC}" -l json-c -old ABI-${prev}.dump -new ABI-${release}.dump -report-format xml echo echo "Look in $(pwd)/compat_reports/json-c/${prev}_to_${release}" diff --git a/reltools/acc_added_symbols.xsl b/reltools/acc_added_symbols.xsl new file mode 100644 index 0000000..e0de1be --- /dev/null +++ b/reltools/acc_added_symbols.xsl @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/reltools/check_symbols.sh b/reltools/check_symbols.sh new file mode 100755 index 0000000..dc24620 --- /dev/null +++ b/reltools/check_symbols.sh @@ -0,0 +1,51 @@ +#!/bin/bash +# +# Analyze the ABI compliance report and pick out things that +# may need attention when creating a new release. +# + +RUNDIR=$(dirname "$0") + +exitval=0 + +XMLREPORT="$1" +if [[ "${XMLREPORT}" = -* ]] || [ ! -r "${XMLREPORT}" ] ; then +fi + +XSLTPROC=${XSLTPROC:-xsltproc} +if ! type -P "${XSLTPROC}" > /dev/null ; then + # Fallback to xsltproc.exe from Strawberry perl if on WSL + XSLTPROC=xsltproc.exe +fi +if ! type -P "${XSLTPROC}" > /dev/null ; then + echo "ERROR: can't find xsltproc, check ABI report for added/removed symbols" 1>&2 + exit 1 +fi + +XMLREPORT=$HOME/abi-compliance-checker/compat_reports/json-c/0.19_to_0.19.99-50e3389/compat_report.xml +BIN_SYMBOLS="$("$XSLTPROC" --stringparam kind binary --stringparam elemname added_symbols "${RUNDIR}/acc_added_symbols.xsl" "${XMLREPORT}" | sort)" +SRC_SYMBOLS="$("$XSLTPROC" --stringparam kind source --stringparam elemname added_symbols "${RUNDIR}/acc_added_symbols.xsl" "${XMLREPORT}" | sort)" +echo "INFO: Added symbols, check if these are meant to be visible:" +echo "${SRC_SYMBOLS}" | sed -e's/^/ /' +echo + +if ! cmp -s <(echo "${BIN_SYMBOLS}") <(echo "${SRC_SYMBOLS}") ; then + echo "WARNING: mismatch between src vs. bin added symbols, check json-c.sym" 1>&2 + diff -u0 <(echo "${BIN_SYMBOLS}") <(echo "${SRC_SYMBOLS}") | \ + awk 'NR>3 && /^(-|\+)/ { printf(" %s\n", $0); }' + echo + exitval=1 +fi + +DEL_SYMBOLS="$("$XSLTPROC" --stringparam elemname removed_symbols "${RUNDIR}/acc_added_symbols.xsl" "${XMLREPORT}" | sort)" +if [ -z "${DEL_SYMBOLS}" ] ; then + echo "OK: No removed symbols detected" +else + echo "=========================" 1>&2 + echo "WARNING: major release may be needed! Removed symbols:" 1>&2 + echo "${DEL_SYMBOLS}" 1>&2 + echo 1>&2 + exitval=1 +fi + +exit $exitval