From 0cdd2a5c54771d18dc3ec9d690b7fbb754b90dfd Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Fri, 10 Sep 2021 18:32:00 +0100 Subject: build: Include the Wayland minor version in libraries' ABI versions 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. Until now, the ABI minor version was hard-coded, which means we can't tell which of a pair of Wayland libraries is newer (and therefore likely to have more symbols and/or fewer bugs). libwayland-egl already had ABI major version 1, so we can use the "marketing" version number as the ABI major.minor version number directly, so Wayland 1.19.90 would produce libwayland-egl.so.1 -> libwayland-egl.so.1.19.90. libwayland-cursor and libwayland-server have ABI major version 0, and OS distributions don't like it when there's a SONAME bump for no good reason, so use their existing ABI major version together with the "marketing" minor version: libwayland-cursor.so.0 -> libwayland-cursor.so.0.19.90. If the Wayland major version number is incremented to 2, we'll have to rethink this, so add some error() to break the build if/when that happens. Assuming that Wayland 2.0 would involve breaking changes, the best way would probably to bump all the SONAMEs to libwayland-foo.so.2. Resolves: https://gitlab.freedesktop.org/wayland/wayland/-/issues/175 Signed-off-by: Simon McVittie --- cursor/meson.build | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'cursor') diff --git a/cursor/meson.build b/cursor/meson.build index ae85ed9..5393a59 100644 --- a/cursor/meson.build +++ b/cursor/meson.build @@ -3,6 +3,15 @@ if icondir == '' icondir = join_paths(get_option('prefix'), get_option('datadir'), 'icons') endif +if wayland_version[0] != '1' + # The versioning used for the shared libraries assumes that the major + # version of Wayland as a whole will increase to 2 if and only if there + # is an ABI break, at which point we should probably bump the SONAME of + # all libraries to .so.2. For more details see + # https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/177 + error('We probably need to bump the SONAME of libwayland-cursor') +endif + wayland_cursor = library( 'wayland-cursor', sources: [ @@ -10,7 +19,9 @@ wayland_cursor = library( 'os-compatibility.c', 'xcursor.c', ], - version: '0.0.0', + # To avoid an unnecessary SONAME bump, wayland 1.x.y produces + # libwayland-cursor.so.0.x.y. + version: '.'.join(['0', wayland_version[1], wayland_version[2]]), dependencies: [ wayland_client_dep ], c_args: [ '-DICONDIR="@0@"'.format(icondir) ], install: true, -- cgit v1.2.3-70-g09d2