From cbaafefa13281bb640f6934b4f71029d39f1b3d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <dilfridge@gentoo.org>
Date: Sat, 24 Jul 2021 15:20:16 +0200
Subject: [PATCH 4/6] Gentoo: Give also libctf optionally a gentoo-specific
 soversion

Signed-off-by: Sam James <sam@gentoo.org>
---
 libctf/Makefile.am  | 14 +++++++++++++-
 libctf/Makefile.in  |  9 ++++++++-
 libctf/configure    | 35 +++++++++++++++++++++++++++++++++--
 libctf/configure.ac | 10 ++++++++++
 4 files changed, 64 insertions(+), 4 deletions(-)

diff --git a/libctf/Makefile.am b/libctf/Makefile.am
index d0abaa73edf..7fcb36fc905 100644
--- a/libctf/Makefile.am
+++ b/libctf/Makefile.am
@@ -31,6 +31,9 @@ info_TEXINFOS =
 DISTCLEANFILES =
 MAINTAINERCLEANFILES =
 
+EXTRA_SOVERSION_SUFFIX = @EXTRA_SOVERSION_SUFFIX@
+BFD_VERSION = @BFD_VERSION@
+
 # This is where we get zlib from.  zlibdir is -L../zlib and zlibinc is
 # -I../zlib, unless we were configured with --with-system-zlib, in which
 # case both are empty.
@@ -51,8 +54,17 @@ include_HEADERS =
 noinst_LTLIBRARIES = libctf.la libctf-nobfd.la
 endif
 
+# libctf by default uses libtool versioning. Unfortunately that keeps us from adding
+# a supplement to the soversion. So we need to switch tracks and be creative.
+
+if HAVE_EXTRA_SOVERSION_SUFFIX
+gentoo_ctf_soversion = "$(BFD_VERSION).$(EXTRA_SOVERSION_SUFFIX)"
+else
+gentoo_ctf_soversion = 0.0.0
+endif
+
 libctf_nobfd_la_LIBADD = @CTF_LIBADD@ $(ZLIB)
-libctf_ldflags_nover = -version-info 0:0:0 @SHARED_LDFLAGS@
+libctf_ldflags_nover = -release $(gentoo_ctf_soversion) @SHARED_LDFLAGS@
 libctf_nobfd_la_LDFLAGS = $(libctf_ldflags_nover) @VERSION_FLAGS_NOBFD@
 libctf_nobfd_la_CPPFLAGS = $(AM_CPPFLAGS) -DNOBFD=1
 libctf_nobfd_la_SOURCES = ctf-archive.c ctf-dump.c ctf-create.c ctf-decl.c ctf-error.c \
diff --git a/libctf/Makefile.in b/libctf/Makefile.in
index 0ac364e09cc..2bdb1b4408f 100644
--- a/libctf/Makefile.in
+++ b/libctf/Makefile.in
@@ -432,6 +432,7 @@ AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
+BFD_VERSION = @BFD_VERSION@
 CATALOGS = @CATALOGS@
 CATOBJEXT = @CATOBJEXT@
 CC = @CC@
@@ -454,6 +455,7 @@ EXEEXT = @EXEEXT@
 
 # Setup the testing framework, if you have one
 EXPECT = expect
+EXTRA_SOVERSION_SUFFIX = @EXTRA_SOVERSION_SUFFIX@
 FGREP = @FGREP@
 GENCAT = @GENCAT@
 GMSGFMT = @GMSGFMT@
@@ -606,8 +608,13 @@ AM_CFLAGS = -std=gnu99 @ac_libctf_warn_cflags@ @warn@ @c_warn@ @WARN_PEDANTIC@ @
 @INSTALL_LIBBFD_FALSE@include_HEADERS = 
 @INSTALL_LIBBFD_TRUE@include_HEADERS = $(INCDIR)/ctf.h $(INCDIR)/ctf-api.h
 @INSTALL_LIBBFD_FALSE@noinst_LTLIBRARIES = libctf.la libctf-nobfd.la
+@HAVE_EXTRA_SOVERSION_SUFFIX_FALSE@gentoo_ctf_soversion = 0.0.0
+
+# libctf by default uses libtool versioning. Unfortunately that keeps us from adding
+# a supplement to the soversion. So we need to switch tracks and be creative.
+@HAVE_EXTRA_SOVERSION_SUFFIX_TRUE@gentoo_ctf_soversion = "$(BFD_VERSION).$(EXTRA_SOVERSION_SUFFIX)"
 libctf_nobfd_la_LIBADD = @CTF_LIBADD@ $(ZLIB)
-libctf_ldflags_nover = -version-info 0:0:0 @SHARED_LDFLAGS@
+libctf_ldflags_nover = -release $(gentoo_ctf_soversion) @SHARED_LDFLAGS@
 libctf_nobfd_la_LDFLAGS = $(libctf_ldflags_nover) @VERSION_FLAGS_NOBFD@
 libctf_nobfd_la_CPPFLAGS = $(AM_CPPFLAGS) -DNOBFD=1
 libctf_nobfd_la_SOURCES = ctf-archive.c ctf-dump.c ctf-create.c \
diff --git a/libctf/configure b/libctf/configure
index 1b02c399dd9..d918965e234 100755
--- a/libctf/configure
+++ b/libctf/configure
@@ -646,6 +646,10 @@ BUILD_INFO_FALSE
 BUILD_INFO_TRUE
 NEED_CTF_QSORT_R_FALSE
 NEED_CTF_QSORT_R_TRUE
+BFD_VERSION
+HAVE_EXTRA_SOVERSION_SUFFIX_FALSE
+HAVE_EXTRA_SOVERSION_SUFFIX_TRUE
+EXTRA_SOVERSION_SUFFIX
 ENABLE_LIBCTF_HASH_DEBUGGING_FALSE
 ENABLE_LIBCTF_HASH_DEBUGGING_TRUE
 zlibinc
@@ -822,6 +826,7 @@ enable_maintainer_mode
 enable_install_libbfd
 with_system_zlib
 enable_libctf_hash_debugging
+with_extra_soversion_suffix
 '
       ac_precious_vars='build_alias
 host_alias
@@ -1488,6 +1493,8 @@ Optional Packages:
                           both]
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
   --with-system-zlib      use installed libz
+  --with-extra-soversion-suffix=SUFFIX
+                          Append '.SUFFIX' to SONAME [[default=]]
 
 Some influential environment variables:
   CC          C compiler command
@@ -13970,7 +13977,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 13973 "configure"
+#line 13980 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -14076,7 +14083,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 14079 "configure"
+#line 14086 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -16656,6 +16663,26 @@ else
 fi
 
 
+EXTRA_SOVERSION_SUFFIX=
+
+# Check whether --with-extra-soversion-suffix was given.
+if test "${with_extra_soversion_suffix+set}" = set; then :
+  withval=$with_extra_soversion_suffix; EXTRA_SOVERSION_SUFFIX="${withval}"
+fi
+
+
+ if test -n "${with_extra_soversion_suffix}"; then
+  HAVE_EXTRA_SOVERSION_SUFFIX_TRUE=
+  HAVE_EXTRA_SOVERSION_SUFFIX_FALSE='#'
+else
+  HAVE_EXTRA_SOVERSION_SUFFIX_TRUE='#'
+  HAVE_EXTRA_SOVERSION_SUFFIX_FALSE=
+fi
+
+
+BFD_VERSION=$(${srcdir}/../bfd/configure --version | sed -n -e '1s,.* ,,p')
+
+
 # Similar to GDB_AC_CHECK_BFD.
 OLD_CFLAGS=$CFLAGS
 OLD_LDFLAGS=$LDFLAGS
@@ -17559,6 +17586,10 @@ if test -z "${ENABLE_LIBCTF_HASH_DEBUGGING_TRUE}" && test -z "${ENABLE_LIBCTF_HA
   as_fn_error $? "conditional \"ENABLE_LIBCTF_HASH_DEBUGGING\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${HAVE_EXTRA_SOVERSION_SUFFIX_TRUE}" && test -z "${HAVE_EXTRA_SOVERSION_SUFFIX_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_EXTRA_SOVERSION_SUFFIX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 
 if test -z "${NEED_CTF_QSORT_R_TRUE}" && test -z "${NEED_CTF_QSORT_R_FALSE}"; then
   as_fn_error $? "conditional \"NEED_CTF_QSORT_R\" was never defined.
diff --git a/libctf/configure.ac b/libctf/configure.ac
index 1e1b429c98e..3e46ff240ee 100644
--- a/libctf/configure.ac
+++ b/libctf/configure.ac
@@ -84,6 +84,16 @@ if test "${enable_libctf_hash_debugging}" = yes; then
 fi
 AM_CONDITIONAL(ENABLE_LIBCTF_HASH_DEBUGGING, test "${enable_libctf_hash_debugging}" = yes)
 
+EXTRA_SOVERSION_SUFFIX=
+AC_ARG_WITH(extra-soversion-suffix,
+  AS_HELP_STRING([--with-extra-soversion-suffix=SUFFIX],
+                 [Append '.SUFFIX' to SONAME [[default=]]]),
+[EXTRA_SOVERSION_SUFFIX="${withval}"])
+AC_SUBST(EXTRA_SOVERSION_SUFFIX)
+AM_CONDITIONAL([HAVE_EXTRA_SOVERSION_SUFFIX], [test -n "${with_extra_soversion_suffix}"])
+
+AC_SUBST(BFD_VERSION, $(${srcdir}/../bfd/configure --version | sed -n -e '1s,.* ,,p'), [Version of the accompanying bfd linker])
+
 # Similar to GDB_AC_CHECK_BFD.
 OLD_CFLAGS=$CFLAGS
 OLD_LDFLAGS=$LDFLAGS
-- 
2.53.0

