[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