Please bump library ABI minor version number in new releases
The ABI of a shared library on Linux is given by a major version, which is part of the SONAME and is incremented (rarely) on incompatible changes, and a minor version, which is part of the basename of the regular file to which the SONAME provides a symlink. It's conventional to manage the ABI version in the style of semantic versioning (major.minor.micro where the major version goes up for incompatible changes, the minor version goes up for new ABI, or the micro version goes up for internal fixes), although this is not strictly required.
->|M|<- ->|M|<- (M = major ABI version 0) libwayland-client.so.0 -> libwayland-client.so.0.3.0 |<-- SONAME -->| ->|mmm|<- (mmm = minor ABI version 3.0) ->|M|<- ->|M|<- (M = major ABI version 3) libdbus-1.so.3 -> libdbus-1.so.3.19.13 |<--SONAME-->| ->|mmmmm|<- (mmmmm = minor ABI version 19.13)
libwayland-server, libwayland-client and libwayland-egl currently use version info that does not change between releases (at least not recently): all recent versions have been
The minor version is used by
ldconfig(8) and by projects like the Steam Runtime to choose which of potentially several copies of a library is the newest; keeping it the same means we can't tell, and will potentially choose an outdated version.
It would be great if the minor ABI version of these libraries went up with each release, as part of the release checklist. For best results, it should be the same in Meson and Autotools builds from the same source code.
In Meson, the
soversion parameter to
library() sets the major version (the default is the first part of
version), and the
version parameter sets the major and minor version together. It's technically possible for them to be entirely orthogonal, but it's a lot less confusing if the
version always starts with the major version. So for example the next Wayland release could have
libwayland-egl.so.1.0.1 (or higher of course) by changing the
In Autotools, the ABI version is represented in a confusing libtool-specific way (
CURRENT:REVISION:AGE) which, on at least Linux, ends up being translated by
ltmain.sh into essentially the same representation that Meson uses natively. The simplest way to deal with the ABI version would be to go the Linux/Meson route, and replace the current
-version-info options with
-version-number goes more or less directly into the filename, so for example
-version-number 0:1:2 produces
libfoo.so.0 -> libfoo.so.0.1.2.
The other possible way to deal with Autotools (for libtool aficionados only) would be to manage
CURRENT:REVISION:AGE as described in the libtool documentation, reverse-engineer from that what the version number will end up as (I think it's
$(($CURRENT - $AGE)).$AGE.$REVISION, but please double-check), and use that version number in Meson.