Please ignore this patch as it has an incorrect commit message. On Wed, Oct 29, 2014 at 2:55 PM, Scott Mann <sm...@noironetworks.com> wrote:
> These changes cause shared libraries to be built by default. > In particular, lib/libopenvwitch.so, lib/libsflow.so, > ofproto/libofproto.so, > and ovsdb/libovsdb.so will be built. Original behavior of building static > objects excusively may be accomplished by providing the --disable-shared > argument to configure. > > Additionally, versioning is introduced to each of the libraries objects > paving the way for APIs to be built around them. A detailed comment > outlining the rules for changing a version number is provided in > configure.ac. Note that at this time, the version number is set to > 1.0.0, no API is specified yet, and there are no requirements to > maintain any sort of compatibility in any of the libraries. > > Signed-off-by: Scott Mann <sm...@noironetworks.com> > --- > This is v2 of the shared library build patch. Changes include: > make static build default (attribute to Ben Pfaff) > remove changes to vlog.h and await a better fix > (attribute to Ben Pfaff and Thomas Graf) > fix C-style issues (attribute to Ben Pfaff) > fix --with-dpdk build issues (attribute to Thomas Graf) > --- > .gitignore | 1 + > .travis/build.sh | 2 ++ > 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 ++++ > 11 files changed, 80 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/.gitignore b/.gitignore > index 800352c..8201d50 100644 > --- a/.gitignore > +++ b/.gitignore > @@ -16,6 +16,7 @@ > *.pyc > *.so > *.suo > +**/*.sym > *~ > *,cover > .#* > diff --git a/.travis/build.sh b/.travis/build.sh > index 5dba4fe..d56350f 100755 > --- a/.travis/build.sh > +++ b/.travis/build.sh > @@ -24,6 +24,8 @@ function install_dpdk() > cd dpdk-1.7.1 > find ./ -type f | xargs sed -i > 's/max-inline-insns-single=100/max-inline-insns-single=400/' > sed -ri 's,(CONFIG_RTE_BUILD_COMBINE_LIBS=).*,\1y,' > config/common_linuxapp > + sed -ri '/CONFIG_RTE_LIBNAME/a CONFIG_RTE_BUILD_FPIC=y' > config/common_linuxapp > + sed -ri '/EXECENV_CFLAGS = -pthread -fPIC/{s/$/\nelse ifeq > ($(CONFIG_RTE_BUILD_FPIC),y)/;s/$/\nEXECENV_CFLAGS = -pthread -fPIC/}' > mk/exec-env/linuxapp/rte.vars.mk > make config CC=gcc T=x86_64-native-linuxapp-gcc > make CC=gcc RTE_KERNELDIR=$KERNELSRC > echo "Installed DPDK source in $(pwd)" > diff --git a/configure.ac b/configure.ac > index 62224b9..9fa94f3 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 7572e95..d79bb2c 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 \ > @@ -289,7 +291,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: > + *; > +}; > -- > 1.9.3 > > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev