@@ -2,4 +2,5 @@ TOP := $(dir $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
NAME=liburing
SPECFILE=$(TOP)/$(NAME).spec
VERSION=$(shell awk '/Version:/ { print $$2 }' $(SPECFILE))
+VERSION_MAJOR=$(shell echo $(VERSION) | cut -d. -f1)
TAG = $(NAME)-$(VERSION)
@@ -16,8 +16,8 @@ LINK_FLAGS=
LINK_FLAGS+=$(LDFLAGS)
ENABLE_SHARED ?= 1
-soname=liburing.so
-libname=$(soname).$(VERSION)
+soname=liburing.so.$(VERSION_MAJOR)
+libname=liburing.so.$(VERSION)
all_targets += liburing.a
ifeq ($(ENABLE_SHARED),1)
Commit c0b43df28a982747e081343f23289357ab4615db ("src/Makefile: use VERSION variable consistently") changed the library soname from liburing.so.2 to liburing.so. The idea of soname is that executables linked against liburing.so.2 continue to work with liburing.so.2.1, liburing.so.2.2, etc because the soname matches. They must not work against liburing.so.1 or liburing.so.3 though since those major versions are incompatible. Dropping the major version makes the soname unversioned and executables will link against future liburing releases that are not compatible. Fix the soname compatibility problem by re-adding the major version number. Compute it from the VERSION value instead of hardcoding it in the Makefile. liburing 2.1: $ readelf -a src/liburing.so.2.1 | grep SON 0x000000000000000e (SONAME) Library soname: [liburing.so.2] commit c0b43df28a98: $ readelf -a src/liburing.so.2.2 | grep SON 0x000000000000000e (SONAME) Library soname: [liburing.so] With this fix: $ readelf -a src/liburing.so.2.2 | grep SON 0x000000000000000e (SONAME) Library soname: [liburing.so.2] Fixes: c0b43df28a982747e081343f23289357ab4615db ("src/Makefile: use VERSION variable consistently") Reported-by: Daniel P. Berrangé <berrange@redhat.com> Cc: Bikal Lem <gbikal+git@gmail.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> --- Makefile.common | 1 + src/Makefile | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-)