Group :: Networking/Other
RPM: openvswitch
Main Changelog Spec Patches Sources Download Gear Bugs and FR Repocop
Patch: 0001-Build-Add-support-for-shared-libraries-and-versioning.patch
Download
Download
From 7f2f24e379d9ca65c20d072a6c0adb1c6c8a9cce Mon Sep 17 00:00:00 2001
From: Scott Mann <smann@noironetworks.com>
Date: Fri, 7 Nov 2014 19:02:09 -0800
Subject: [PATCH] Build: Add support for shared libraries and versioning.
---
AUTHORS | 1 +
configure.ac | 43 ++++++++++++++++++++++++++++++++++++++++++-
lib/automake.mk | 8 ++++++--
lib/libopenvswitch.sym.in | 4 ++++
lib/libsflow.sym.in | 4 ++++
lib/util.c | 8 +++++++-
ofproto/automake.mk | 4 +++-
ofproto/libofproto.sym.in | 4 ++++
ovsdb/automake.mk | 4 +++-
ovsdb/libovsdb.sym.in | 4 ++++
12 files changed, 81 insertions(+), 6 deletions(-)
create mode 100644 lib/libopenvswitch.sym.in
create mode 100644 lib/libsflow.sym.in
create mode 100644 ofproto/libofproto.sym.in
create mode 100644 ovsdb/libovsdb.sym.in
diff --git a/configure.ac b/configure.ac
index 62224b9..c3b26ec 100644
--- a/configure.ac
+++ b/configure.ac
@@ -43,6 +43,41 @@ AC_SYS_LARGEFILE
LT_INIT([disable-shared])
m4_pattern_forbid([LT_INIT]) dnl Make autoconf fail if libtool is missing.
+# The following explanation may help to understand the use of the
+# version number fields: current, revision, and age.
+#
+# Consider that there are three possible kinds of reactions from
+# users of your library to changes in a shared library:
+#
+# 1. Programs using the previous version may use the new version as drop-in
+# replacement, and programs using the new version can also work with the
+# previous one. In other words, no recompiling nor relinking is needed.
+# In short, there are no changes to any symbols, no symbols removed,
+# and no symbols added. In this case, bump revision only, don't touch
+# current nor age.
+#
+# 2. Programs using the previous version may use the new version as drop-in
+# replacement, but programs using the new version may use APIs not
+# present in the previous one. In other words, new symbols have been
+# added and a program linking against the new version may fail with
+# “unresolved symbols.” If linking against the old version at runtime:
+# set revision to 0, bump current and age.
+#
+# 3. Programs may need to be changed, recompiled, relinked in order to use
+# the new version. This is the case when symbols have been modified or
+# deleted. Bump current, set revision and age to 0.
+
+m4_define([libopenvswitch_lt_current], [1])
+m4_define([libopenvswitch_lt_revision], [0])
+m4_define([libopenvswitch_lt_age], [0])
+
+LT_CURRENT=libopenvswitch_lt_current
+AC_SUBST([LT_CURRENT])
+LT_REVISION=libopenvswitch_lt_revision
+AC_SUBST([LT_REVISION])
+LT_AGE=libopenvswitch_lt_age
+AC_SUBST([LT_AGE])
+
AC_SEARCH_LIBS([pow], [m])
AC_SEARCH_LIBS([clock_gettime], [rt])
AC_SEARCH_LIBS([timer_create], [rt])
@@ -94,7 +129,13 @@ OVS_CHECK_LINUX_HOST
AX_FUNC_POSIX_MEMALIGN
OVS_CHECK_INCLUDE_NEXT([stdio.h string.h])
-AC_CONFIG_FILES([lib/stdio.h lib/string.h])
+AC_CONFIG_FILES([
+ lib/stdio.h
+ lib/string.h
+ ovsdb/libovsdb.sym
+ ofproto/libofproto.sym
+ lib/libsflow.sym
+ lib/libopenvswitch.sym])
OVS_ENABLE_OPTION([-Wall])
OVS_ENABLE_OPTION([-Wextra])
diff --git a/lib/automake.mk b/lib/automake.mk
index 783e657..f30459c 100644
--- a/lib/automake.mk
+++ b/lib/automake.mk
@@ -13,7 +13,9 @@ if WIN32
lib_libopenvswitch_la_LIBADD += ${PTHREAD_LIBS}
endif
-lib_libopenvswitch_la_LDFLAGS = -release $(VERSION)
+lib_libopenvswitch_la_LDFLAGS = \
+ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+ -Wl,--version-script=$(top_builddir)/lib/libopenvswitch.sym
lib_libopenvswitch_la_SOURCES = \
lib/aes128.c \
@@ -291,7 +293,9 @@ nodist_lib_libopenvswitch_la_SOURCES = \
CLEANFILES += $(nodist_lib_libopenvswitch_la_SOURCES)
lib_LTLIBRARIES += lib/libsflow.la
-lib_libsflow_la_LDFLAGS = -release $(VERSION)
+lib_libsflow_la_LDFLAGS = \
+ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+ -Wl,--version-script=$(top_builddir)/lib/libsflow.sym
lib_libsflow_la_SOURCES = \
lib/sflow_api.h \
lib/sflow.h \
diff --git a/lib/libopenvswitch.sym.in b/lib/libopenvswitch.sym.in
new file mode 100644
index 0000000..fdfc5bb
--- /dev/null
+++ b/lib/libopenvswitch.sym.in
@@ -0,0 +1,4 @@
+libopenvswitch_@LT_CURRENT@ {
+global:
+ *;
+};
diff --git a/lib/libsflow.sym.in b/lib/libsflow.sym.in
new file mode 100644
index 0000000..88b9cc1
--- /dev/null
+++ b/lib/libsflow.sym.in
@@ -0,0 +1,4 @@
+libsflow_@LT_CURRENT@ {
+global:
+ *;
+};
diff --git a/lib/util.c b/lib/util.c
index fb2ff51..1b9eea6 100644
--- a/lib/util.c
+++ b/lib/util.c
@@ -471,9 +471,15 @@ set_program_name__(const char *argv0, const char *version, const char *date,
assert_single_threaded();
free(program_name);
+ /* Remove libtool prefix, if it is there */
+ if (strncmp(basename, "lt-", 3) == 0) {
+ char *tmp_name = basename;
+ basename = xstrdup(basename + 3);
+ free(tmp_name);
+ }
program_name = basename;
- free(program_version);
+ free(program_version);
if (!strcmp(version, VERSION)) {
program_version = xasprintf("%s (Open vSwitch) "VERSION"\n"
"Compiled %s %s\n",
diff --git a/ofproto/automake.mk b/ofproto/automake.mk
index 399f2b6..bb4bc7e 100644
--- a/ofproto/automake.mk
+++ b/ofproto/automake.mk
@@ -6,7 +6,9 @@
# without warranty of any kind.
lib_LTLIBRARIES += ofproto/libofproto.la
-ofproto_libofproto_la_LDFLAGS = -release $(VERSION)
+ofproto_libofproto_la_LDFLAGS = \
+ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+ -Wl,--version-script=$(top_builddir)/ofproto/libofproto.sym
ofproto_libofproto_la_SOURCES = \
ofproto/bond.c \
ofproto/bond.h \
diff --git a/ofproto/libofproto.sym.in b/ofproto/libofproto.sym.in
new file mode 100644
index 0000000..cdd4327
--- /dev/null
+++ b/ofproto/libofproto.sym.in
@@ -0,0 +1,4 @@
+libofproto_@LT_CURRENT@ {
+global:
+ *;
+};
diff --git a/ovsdb/automake.mk b/ovsdb/automake.mk
index 00a0b01..7a8d7d2 100644
--- a/ovsdb/automake.mk
+++ b/ovsdb/automake.mk
@@ -1,6 +1,8 @@
# libovsdb
lib_LTLIBRARIES += ovsdb/libovsdb.la
-ovsdb_libovsdb_la_LDFLAGS = -release $(VERSION)
+ovsdb_libovsdb_la_LDFLAGS = \
+ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+ -Wl,--version-script=$(top_builddir)/ovsdb/libovsdb.sym
ovsdb_libovsdb_la_SOURCES = \
ovsdb/column.c \
ovsdb/column.h \
diff --git a/ovsdb/libovsdb.sym.in b/ovsdb/libovsdb.sym.in
new file mode 100644
index 0000000..71ae4e8
--- /dev/null
+++ b/ovsdb/libovsdb.sym.in
@@ -0,0 +1,4 @@
+libovsdb_@LT_CURRENT@ {
+global:
+ *;
+};
--
libgit2 0.21.4