blob: 57337f5882db8250a5af91d91baf6818656730af [file] [log] [blame] [view]
ABI Compatibility test
----------------------
abicheck.sh uses libabigail to check ABI stability.
It will abort if the current source
tree has a change that breaks binary compatibility.
This protects against the common scenario where:
- an app is compiled against the current zlib-ng
- the system package manager updates the zlib-ng shared library
- the app now crashes because some symbol is
missing or some public structure or parameter
has changed type or size
If run with --zlib-compat, it verifies that the
current source tree generates a library that
is ABI-compatible with the reference release
of classic zlib. This ensures that building
zlib-ng with --zlib-compat does what it says on the tin.
abicheck.sh is not perfect, but it can catch
many common compatibility issues.
Cached files test/abi/*.abi
---------------------------
Comparing to the old version of zlib (or zlib-ng)
means someone has to check out and build
the previous source tree and extract its .abi
using abidw. This can be slow.
If you don't mind the slowness, run abicheck.sh --refresh-if,
and it will download and build the reference version
and extract the .abi on the spot if needed.
(FIXME: should this be the default?)
On the next run, the reference .abi file will already be
present, and that step will be skipped.
It's stored in the tests/abi directory,
in a file with the architecture and git hash in the name.
If you're running continuous integration
which clear out the source tree on each run,
and you don't want your build machines
constantly downloading and building the old
version, you can check the .abi file into git.
To make this easier, a helper script could be written to automatically build
all the configurations tested by .github/workflows/abicheck.yml
Then they could be checked into git en masse by a maintainer
when a new platform is added or a new major version (which
intentionally breaks backwards compatibility) is being prepared.
Further reading
---------------
- https://sourceware.org/libabigail/manual/
- https://developers.redhat.com/blog/2014/10/23/comparing-abis-for-compatibility-with-libabigail-part-1/
- https://developers.redhat.com/blog/2020/04/02/how-to-write-an-abi-compliance-checker-using-libabigail/