[ovs-dev] [RFC] libX: add new release / version info tags

Aaron Conole aconole at redhat.com
Tue Jan 10 15:42:52 UTC 2017


This commit uses the $PACKAGE_VERSION automake variable to construct a
release and version info combination which sets the library name to be:

   libfoo-$(OVS_MAJOR_VERSION).so.$(OVS_MINOR_VERSION).0.$(OVS_MICRO_VERSION)

where formerly, it was always:

   libfoo.so.1.0.0

This allows releases of Open vSwitch libraries to reflect which specific
versions they came with, and sets up a psuedo ABI-versioning scheme.  In
this fashion, future releases of Open vSwitch could be installed
alongside older releases, allowing 3rd party utilities linked against
previous versions to continue to function.

ex:

$ ldd /path/to/utility
	linux-vdso.so.1 (0x00007ffe92cf6000)
	libopenvswitch-2.so.6 => /lib64/libopenvswitch-2.so.6 (0x00007f733b7a3000)
	libssl.so.10 => /lib64/libssl.so.10 (0x00007f733b530000)
...

Note the library name and version information.

CC: Ben Warren <ben at skyportsystems.com>
Signed-off-by: Aaron Conole <aconole at redhat.com>
---
This is labelled as RFC.  I'm not sure if it's appropriate to apply
it to master before the 2.7 branch.

 configure.ac        |  1 +
 lib/automake.mk     |  4 ++--
 m4/openvswitch.m4   | 18 ++++++++++++++++++
 ofproto/automake.mk |  2 +-
 ovn/lib/automake.mk |  2 +-
 ovsdb/automake.mk   |  2 +-
 vtep/automake.mk    |  2 +-
 7 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/configure.ac b/configure.ac
index a9ae2a1..7c729ef 100644
--- a/configure.ac
+++ b/configure.ac
@@ -131,6 +131,7 @@ OVS_CHECK_ATOMIC_ALWAYS_LOCK_FREE(8)
 OVS_CHECK_POSIX_AIO
 OVS_CHECK_PTHREAD_SET_NAME
 OVS_CHECK_LINUX_HOST
+OVS_LIBTOOL_VERSIONS
 AX_FUNC_POSIX_MEMALIGN
 
 OVS_CHECK_INCLUDE_NEXT([stdio.h string.h])
diff --git a/lib/automake.mk b/lib/automake.mk
index 88344a3..b03dd2d 100644
--- a/lib/automake.mk
+++ b/lib/automake.mk
@@ -15,7 +15,7 @@ lib_libopenvswitch_la_LIBADD += ${PTHREAD_LIBS}
 endif
 
 lib_libopenvswitch_la_LDFLAGS = \
-        -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+        $(OVS_LTINFO) \
         -Wl,--version-script=$(top_builddir)/lib/libopenvswitch.sym \
         $(AM_LDFLAGS)
 
@@ -328,7 +328,7 @@ CLEANFILES += $(nodist_lib_libopenvswitch_la_SOURCES)
 
 lib_LTLIBRARIES += lib/libsflow.la
 lib_libsflow_la_LDFLAGS = \
-        -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+        $(OVS_LTINFO) \
         -Wl,--version-script=$(top_builddir)/lib/libsflow.sym \
         $(AM_LDFLAGS)
 lib_libsflow_la_SOURCES = \
diff --git a/m4/openvswitch.m4 b/m4/openvswitch.m4
index 6515ed7..f316abc 100644
--- a/m4/openvswitch.m4
+++ b/m4/openvswitch.m4
@@ -601,3 +601,21 @@ AC_DEFUN([OVS_CHECK_PRAGMA_MESSAGE],
      [AC_DEFINE(HAVE_PRAGMA_MESSAGE,1,[Define if compiler supports #pragma
      message directive])])
   ])
+
+dnl OVS_LIBTOOL_VERSIONS sets the major, minor, micro version information for
+dnl the OVS_LT_RELINFO and OVS_LT_VERINFO variables, as well as the encompassing
+dnl OVS_LTINFO variable.
+AC_DEFUN([OVS_LIBTOOL_VERSIONS],
+    [test ".$PACKAGE_VERSION" = "." && PACKAGE_VERSION="$VERSION"
+  AC_MSG_CHECKING(linker ouput version information)
+  OVS_MAJOR=`echo "$PACKAGE_VERSION" | sed -e 's/[[.]].*//'`
+  OVS_MINOR=`echo "$PACKAGE_VERSION" | sed -e "s/^$OVS_MAJOR//" -e 's/^.//' -e 's/[[.]].*//'`
+  OVS_MICRO=`echo "$PACKAGE_VERSION" | sed -e "s/^$OVS_MAJOR.$OVS_MINOR//" -e 's/^.//' -e 's/[[^0-9]].*//'`
+  OVS_LT_RELINFO="-release $OVS_MAJOR"
+  OVS_LT_VERINFO="-version-info $OVS_MINOR:$OVS_MICRO"
+  OVS_LTINFO="$OVS_LT_RELINFO $OVS_LT_VERINFO"
+  AC_MSG_RESULT([/$OVS_MAJOR/$OVS_MINOR.$OVS_MICRO (-$OVS_MAJOR.so)])
+  AC_SUBST(OVS_LT_RELINFO)
+  AC_SUBST(OVS_LT_VERINFO)
+  AC_SUBST(OVS_LTINFO)
+    ])
diff --git a/ofproto/automake.mk b/ofproto/automake.mk
index 5a83a60..86c24b1 100644
--- a/ofproto/automake.mk
+++ b/ofproto/automake.mk
@@ -7,7 +7,7 @@
 
 lib_LTLIBRARIES += ofproto/libofproto.la
 ofproto_libofproto_la_LDFLAGS = \
-        -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+        $(OVS_LTINFO) \
         -Wl,--version-script=$(top_builddir)/ofproto/libofproto.sym \
         $(AM_LDFLAGS)
 ofproto_libofproto_la_SOURCES = \
diff --git a/ovn/lib/automake.mk b/ovn/lib/automake.mk
index 7f26de2..b86237e 100644
--- a/ovn/lib/automake.mk
+++ b/ovn/lib/automake.mk
@@ -1,6 +1,6 @@
 lib_LTLIBRARIES += ovn/lib/libovn.la
 ovn_lib_libovn_la_LDFLAGS = \
-        -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+        $(OVS_LTINFO) \
         -Wl,--version-script=$(top_builddir)/ovn/lib/libovn.sym \
         $(AM_LDFLAGS)
 ovn_lib_libovn_la_SOURCES = \
diff --git a/ovsdb/automake.mk b/ovsdb/automake.mk
index 099ed3c..81695f1 100644
--- a/ovsdb/automake.mk
+++ b/ovsdb/automake.mk
@@ -1,7 +1,7 @@
 # libovsdb
 lib_LTLIBRARIES += ovsdb/libovsdb.la
 ovsdb_libovsdb_la_LDFLAGS = \
-        -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+        $(OVS_LTINFO) \
         -Wl,--version-script=$(top_builddir)/ovsdb/libovsdb.sym \
         $(AM_LDFLAGS)
 ovsdb_libovsdb_la_SOURCES = \
diff --git a/vtep/automake.mk b/vtep/automake.mk
index 4e284d3..02024eb 100644
--- a/vtep/automake.mk
+++ b/vtep/automake.mk
@@ -14,7 +14,7 @@ vtep/vtep-idl.ovsidl: $(VTEP_IDL_FILES)
 # libvtep
 lib_LTLIBRARIES += vtep/libvtep.la
 vtep_libvtep_la_LDFLAGS = \
-	-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+	$(OVS_LTINFO) \
 	-Wl,--version-script=$(top_builddir)/vtep/libvtep.sym \
 	$(AM_LDFLAGS)
 nodist_vtep_libvtep_la_SOURCES = \
-- 
2.7.4



More information about the dev mailing list