Bug 28669 - Increment Library version
authorBen Woodard via Libabigail <libabigail@sourceware.org>
Tue, 28 Jun 2022 22:26:00 +0000 (15:26 -0700)
committerDodji Seketeli <dodji@redhat.com>
Tue, 6 Sep 2022 15:13:09 +0000 (17:13 +0200)
Add libtool versioning to libabigail.so starting from 2.1 onward to
not cause problems with older utilities due to library version
incompatibility. This will also stop tools that look for libraries
which have a different ABI but the same version from complaining.

* configure.ac: Define the variables libabigail_so_{current,
revision, age}.  These are to be adjusted after each releases
depending on how the compatibility status of the libabigail's
code.
* src/Makefile.am: Add -version-info
$(LIBABIGAIL_SO_CURRENT):$(LIBABIGAIL_SO_REVISION):$(LIBABIGAIL_SO_AGE)
to LDFLAGS.

Signed-off-by: Ben Woodard <woodard@redhat.com>
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
configure.ac
src/Makefile.am

index 97b3469f713e6ac90f833c4bf3ef982fa7879eeb..ee8885e94af670c1e6db4faf8e8a99c635542333 100644 (file)
@@ -1,7 +1,34 @@
 # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+dnl Libabigail version number is handled here with the major and minor
+dnl version numbers.
 m4_define([version_major],   [2])
 m4_define([version_minor],   [1])
 
+dnl Below are the numbers to handle libabigail.so's versionning
+dnl following the libtool's versionning scheme to handle shared
+dnl libraries' compatibility.
+dnl
+dnl Below are the rules to follow to update the three numbers
+dnl (LIBABIGAIL_SO_CURRENT, LIBABIGAIL_SO_REVISION and LIBABIGAIL_SO_AGE):
+dnl
+dnl 1. If the library source code has changed at all since the last
+dnl    update, then increment LIBABIGAIL_SO_REVISION ('C:R:A' becomes
+dnl    'C:R+1:A').
+dnl 
+dnl 2. If any interfaces have been added, removed, or changed since
+dnl    the last update, increment LIBABIGAIL_SO_CURRENT, and set
+dnl    LIBABIGAIL_REVISION to 0.
+dnl 
+dnl 3. If any interfaces have been added since the last public release,
+dnl    then increment LIBABIGAIL_SO_AGE.
+dnl 
+dnl 4. If any interfaces have been removed or changed since the last
+dnl     public release, then set LIBABIGAIL_SO_AGE to 0.
+m4_define([libabigail_so_current],  [1])
+m4_define([libabigail_so_revision], [0])
+m4_define([libabigail_so_age],      [0])
+
 AC_INIT([libabigail],
        [version_major.version_minor],
        [http://sourceware.org/bugzilla],
@@ -40,12 +67,18 @@ VERSION_MINOR=version_minor
 VERSION_REVISION=0
 ABIXML_VERSION_MAJOR=2
 ABIXML_VERSION_MINOR=1
+LIBABIGAIL_SO_CURRENT=libabigail_so_current
+LIBABIGAIL_SO_REVISION=libabigail_so_revision
+LIBABIGAIL_SO_AGE=libabigail_so_age
 
 AC_SUBST(VERSION_MAJOR)
 AC_SUBST(VERSION_MINOR)
 AC_SUBST(VERSION_REVISION)
 AC_SUBST(ABIXML_VERSION_MAJOR)
 AC_SUBST(ABIXML_VERSION_MINOR)
+AC_SUBST(LIBABIGAIL_SO_CURRENT)
+AC_SUBST(LIBABIGAIL_SO_REVISION)
+AC_SUBST(LIBABIGAIL_SO_AGE)
 
 dnl This VERSION_SUFFIX environment variable is to allow appending
 dnl arbitrary text to the libabigail version string representation.
index 1591224fec27d7044888b5ed1c1e0dff94298e03..1748f0b81c52b1bf1f71da017a4940600eae19ce 100644 (file)
@@ -47,7 +47,7 @@ libabigail_la_SOURCES += abg-ctf-reader.cc
 endif
 
 libabigail_la_LIBADD = $(DEPS_LIBS) $(FTS_LIBS)
-libabigail_la_LDFLAGS = -lpthread -Wl,--as-needed -no-undefined
+libabigail_la_LDFLAGS = -lpthread -Wl,--as-needed -no-undefined -version-info $(LIBABIGAIL_SO_CURRENT):$(LIBABIGAIL_SO_REVISION):$(LIBABIGAIL_SO_AGE)
 
 CUSTOM_MACROS = -DABIGAIL_ROOT_SYSTEM_LIBDIR=\"${libdir}\"