mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
Merge branch 'mnowak/abi-tracker-helper' into 'master'
Add API Checker See merge request isc-projects/bind9!3120
This commit is contained in:
commit
6d252220b0
3 changed files with 115 additions and 0 deletions
|
|
@ -1332,3 +1332,34 @@ respdiff:sid:amd64:
|
|||
untracked: true
|
||||
expire_in: "1 day"
|
||||
when: on_failure
|
||||
|
||||
# ABI check
|
||||
|
||||
abi-check:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
stage: build
|
||||
dependencies:
|
||||
- autoreconf:sid:amd64
|
||||
needs:
|
||||
- autoreconf:sid:amd64
|
||||
variables:
|
||||
CC: gcc
|
||||
CFLAGS: "${CFLAGS_COMMON} -Og"
|
||||
BIND_BASELINE_VERSION: v9_16_0
|
||||
script:
|
||||
- *configure
|
||||
- ${MAKE} -j${BUILD_PARALLEL_JOBS:-1} V=1
|
||||
- git clone --branch "${BIND_BASELINE_VERSION}" --depth 1 https://gitlab.isc.org/isc-projects/bind9.git refbind
|
||||
- cd refbind/
|
||||
- *configure
|
||||
- ${MAKE} -j${BUILD_PARALLEL_JOBS:-1} V=1
|
||||
- cd ..
|
||||
- util/api-checker.sh . refbind
|
||||
artifacts:
|
||||
paths:
|
||||
- "*.html"
|
||||
- "abi-*.dump"
|
||||
expire_in: "1 week"
|
||||
only:
|
||||
- master@isc-projects/bind9
|
||||
- /^v9_[1-9][0-9]$/@isc-projects/bind9
|
||||
|
|
|
|||
83
util/api-checker.sh
Executable file
83
util/api-checker.sh
Executable file
|
|
@ -0,0 +1,83 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# See the COPYRIGHT file distributed with this work for additional
|
||||
# information regarding copyright ownership.
|
||||
|
||||
set -e
|
||||
|
||||
# Exit if program $1 is not found in PATH.
|
||||
check_program() {
|
||||
if ! command -v "${1}" > /dev/null 2>&1; then
|
||||
echo "'${1}' not found in PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Check that we were spawned with two arguments and that these arguments are two
|
||||
# different directories.
|
||||
check_args() {
|
||||
if [ ${#} -ne 2 ] || [ ! -d "${1}" ] || [ ! -d "${2}" ] || [ "${1}" = "${2}" ]; then
|
||||
echo "Usage:"
|
||||
echo ""
|
||||
echo " ${0} <TESTDIR> <REFDIR>"
|
||||
echo ""
|
||||
echo "Generate API compatibility reports for BIND libraries."
|
||||
echo ""
|
||||
echo " <TESTDIR> is a directory with current (new) BIND version"
|
||||
echo " <REFDIR> is a directory with reference (old) BIND version"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_args "${@}"
|
||||
TESTBIND="${1}"
|
||||
REFBIND="${2}"
|
||||
|
||||
# Ensure the required tools are available in PATH.
|
||||
check_program abi-dumper
|
||||
check_program abi-compliance-checker
|
||||
check_program git
|
||||
check_program w3m
|
||||
|
||||
# Find all libraries which have designated 'api' file and
|
||||
# generate ABI dump file for them.
|
||||
while read -r SO; do
|
||||
APIFILE="$(dirname "${SO}")/../api"
|
||||
pushd "$(dirname "${APIFILE}")"
|
||||
GIT_REVISION=$(git rev-parse HEAD | cut -c 1-10)
|
||||
popd
|
||||
# Get LIBINTERFACE, LIBREVISION, LIBAGE from the 'api' file.
|
||||
eval "$(grep -v "^#" "${APIFILE}" | tr -d " ")"
|
||||
VERSION="${LIBINTERFACE}.${LIBREVISION}.${LIBAGE}-${GIT_REVISION}"
|
||||
abi-dumper "${SO}" -o abi-"$(basename "${SO}" .so)-${VERSION}".dump -lver "${VERSION}"
|
||||
done < <(find "${TESTBIND}"/lib/*/.libs/ "${REFBIND}"/lib/*/.libs/ -name '*.so')
|
||||
|
||||
# Generate HTML API compatibility reports for all libraries.
|
||||
find . -maxdepth 1 -name 'abi-*.dump' | sort | while read -r OLD; read -r NEW; do
|
||||
SONAME=${OLD/.\/abi-/}
|
||||
SONAME=${SONAME/-*/}
|
||||
if abi-compliance-checker -l "${SONAME}" -old "${OLD}" -new "${NEW}"; then
|
||||
REPORT_PREFIX="PASS"
|
||||
else
|
||||
echo "***** Compatibility problems detected"
|
||||
REPORT_PREFIX="WARN"
|
||||
fi
|
||||
OLD_REPORT_PATH="$(find "compat_reports/${SONAME}" -name '*.html')"
|
||||
NEW_REPORT_PATH="${REPORT_PREFIX}-${SONAME}.html"
|
||||
mv "${OLD_REPORT_PATH}" "${NEW_REPORT_PATH}"
|
||||
echo
|
||||
done
|
||||
|
||||
# Generate TXT API compatibility reports from HTML reports for all BIND libraries.
|
||||
echo "Generate TXT API compatibility reports from HTML reports for all BIND libraries:"
|
||||
while read -r HTMLREPORT; do
|
||||
TXTREPORT="${HTMLREPORT/.html/.txt}"
|
||||
echo " w3m: ${HTMLREPORT} -> ${TXTREPORT}"
|
||||
w3m -dump -cols 75 -O ascii -T text/html "${HTMLREPORT}" > "${TXTREPORT}"
|
||||
done < <(find . -maxdepth 1 -name '*.html')
|
||||
|
|
@ -2566,6 +2566,7 @@
|
|||
./util/COPYRIGHT.NOM X 2001,2004,2007,2016,2018,2019,2020
|
||||
./util/COPYRIGHT.PORTION X 1996,1997,1998,1999,2000,2001,2004,2007,2016,2018,2019,2020
|
||||
./util/COPYRIGHT.TOP X 2018,2019,2020
|
||||
./util/api-checker.sh SH 2020
|
||||
./util/bindkeys.pl PERL 2009,2010,2011,2012,2014,2016,2017,2018,2019,2020
|
||||
./util/branchsync.sh SH 2013,2016,2018,2019,2020
|
||||
./util/check-ans-prereq.sh SH 2019,2020
|
||||
|
|
|
|||
Loading…
Reference in a new issue