Author: jorton
Date: Fri Jan 23 11:57:40 2026
New Revision: 1931484

Log:
* configure.ac: Pass complete library version information to libtool
  via $SVN_LT_SOVERSION, so library filenames are unique to each
  release rather than constant, while keeping the sonames intact.
  This follow standard/best-practice for libtool library versioning.
  Closes #34.

  Examples for SVN 1.14.5:
   Filename before:          libsvn_subr-1.so.0.0.0
   Filename after:           libsvn_subr-1.so.0.14.5
   SONAME before and after:  libsvn_subr-1.so.0

Modified:
   subversion/trunk/configure.ac

Modified: subversion/trunk/configure.ac
==============================================================================
--- subversion/trunk/configure.ac       Fri Jan 23 09:57:26 2026        
(r1931483)
+++ subversion/trunk/configure.ac       Fri Jan 23 11:57:40 2026        
(r1931484)
@@ -218,7 +218,28 @@ else
   SVN_APR_MAJOR_VERSION=1
 fi
 AC_SUBST(SVN_APR_MAJOR_VERSION)
-SVN_LT_SOVERSION="-version-info $svn_lib_ver"
+
+# For libtool library versioning, follow the interface rules at:
+# https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html
+# for SVN <major>.<minor>.<patch>:
+#
+# 1. the oldest version supported is always 0 (or 2 for the above APR2
+# variant), corresponding to the ABI at <major>.0.0; changes to
+# <major> are reflected in the library names like "libsvn_subr-1.la"
+#
+# 2. the current version and age of the ABI both equal <minor>, since
+# SVN minor versions always maintain backwards-compatibility to
+# <major>.0; in the APR2 variant, the current version is 2+<minor>.
+#
+# 3. the revision is equal to the <patch> number.
+
+m4_define([svn_ver_major], m4_bpatsubst(AC_PACKAGE_VERSION, 
[\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)], [\1]))
+m4_define([svn_ver_minor], m4_bpatsubst(AC_PACKAGE_VERSION, 
[\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)], [\2]))
+m4_define([svn_ver_patch], m4_bpatsubst(AC_PACKAGE_VERSION, 
[\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)], [\3]))
+svn_ver_current="`expr $svn_lib_ver + svn_ver_minor`"
+
+SVN_LT_SOVERSION="-version-info $svn_ver_current:svn_ver_patch:svn_ver_minor"
+
 AC_SUBST(SVN_LT_SOVERSION)
 AC_DEFINE_UNQUOTED(SVN_SOVERSION, $svn_lib_ver,
                    [Subversion library major version])

Reply via email to