[Openais] [corosync] - lib versioning
Jan Friesse
jfriesse at redhat.com
Thu Apr 1 05:37:29 PDT 2010
Committed revision 2752.
All libraries now have own verso file. Tabbing is solved by printing
spaces (cycle, so all libs are in same column).
I will keep exec libs in my head and TODO list.
Regards,
Honza
Steven Dake wrote:
> Great work! Good for merge.
>
> Any chance you can make the verso files for the others in the lib
> directory?
>
> Also the tabbing is off when printed in configure.
>
> Can you make something like this for the exec directory libraries too?
>
> Regards
> -steve
>
>
> On Wed, 2010-03-31 at 15:47 +0200, Jan Friesse wrote:
>> Attached patch solves today very unpleasant situation about libraries
>> version (those files from trunk/lib/*).
>>
>> Current situation looks like this:
>> - Main number configure.ac - Used for all libraries -> problem if some
>> library added function (changed API)
>> - There is workaround for cpg and confdb. Sadly this workaround is
>> really ugly, need too much code duplicity, need changes in configure.ac
>> and Makefile.am after any API change.
>>
>> So main criteria for new system are following:
>> - Allow easy change of library version
>> - No change of configure.ac (we are changing library NOT configure system)
>> - No change in Makefile.am (again, we are changing library)
>> - No code duplicity
>>
>> Patch has two main parts:
>> - configure.ac part + *.verso. This one is able to:
>> * read version from lib$(LIB).verso file
>> * exports $(LIB)_SONAME with content from the file
>> * displays result in format $(LIB) Library SONAME = $(version)
>> - Makefile.am has ability to detect $(LIB)_SONAME and use version from
>> that variable or use SONAME if not such variable found.
>>
>> In other words, everything what developer must do for changing library
>> version is to change lib$(LIB).verso file and make maintainer-clean +
>> autogen.sh && configure && make.
>>
>> With this patch, only cpg and confdb are there, but adding new library
>> means only add LIB_SONAME_IMPORT([lib]) to configure.ac and create of
>> lib$(LIB).verso.
>>
>> Patch is tested on current trunk on Fedora 11 & FreeBSD 8.0, where it
>> produces correct build. Sadly, I'm not able to test Solaris and Darwin
>> build.
>>
>> Regards,
>> Honza
>> plain text document attachment (2010-03-31-verso.patch)
>> commit b526f1842c2f5ebc7fb2cf0869522794718c2f9d
>> Author: Jan Friesse <jfriesse at redhat.com>
>> Date: Wed Mar 31 14:59:58 2010 +0200
>>
>> Support for specific libraries version
>>
>> Patch adds support for changing version number of library simply by edit
>> lib$(LIB).verso file.
>>
>> diff --git a/trunk/configure.ac b/trunk/configure.ac
>> index 59f10fb..0e53136 100644
>> --- a/trunk/configure.ac
>> +++ b/trunk/configure.ac
>> @@ -136,6 +136,31 @@ AC_CONFIG_FILES([Makefile
>> ### Local business
>>
>> # ===============================================
>> +# Functions / global M4 variables
>> +# ===============================================
>> +# Global list of LIB names
>> +m4_define([local_soname_list], [])
>> +
>> +# Upcase parameter
>> +m4_define([local_upcase], [translit([$*], [a-z], [A-Z])])dnl
>> +
>> +# M4 macro for include lib/lib$1.soname and subst that
>> +m4_define([LIB_SONAME_IMPORT],[dnl
>> +m4_define([local_libname], local_upcase($1)[_SONAME])dnl
>> +m4_define([local_soname], translit(m4_sinclude(lib/lib$1.verso), [
>> +], []))dnl
>> +local_libname="local_soname"dnl
>> +m4_define([local_soname_list], m4_defn([local_soname_list])[,]local_libname[,]local_upcase($1))dnl
>> +AC_SUBST(local_libname)dnl
>> +])dnl
>> +
>> +# Show AC_MSG_RESULT for specific libraries
>> +m4_define([LIB_MSG_RESULT], [ifelse([$#], [1], ,[dnl
>> +AC_MSG_RESULT([ $2 Library SONAME = ${$1}])
>> +LIB_MSG_RESULT(m4_shift(m4_shift($@)))dnl
>> +])])dnl
>> +
>> +# ===============================================
>> # Helpers
>> # ===============================================
>>
>> @@ -168,17 +193,15 @@ PACKAGE_FEATURES=""
>> LINT_FLAGS="-weak -unrecog +posixlib +ignoresigns -fcnuse \
>> -badflag -D__gnuc_va_list=va_list -D__attribute\(x\)="
>>
>> -# libraries SONAME
>> +# default libraries SONAME
>> SOMAJOR="4"
>> SOMINOR="0"
>> SOMICRO="0"
>> SONAME="${SOMAJOR}.${SOMINOR}.${SOMICRO}"
>> -# Special for libcpg & libconfdb
>> -CPG_SOMICRO="1"
>> -CPG_SONAME="${SOMAJOR}.${SOMINOR}.${CPG_SOMICRO}"
>> -CONFDB_SOMICRO="0"
>> -CONFDB_SOMINOR="1"
>> -CONFDB_SONAME="${SOMAJOR}.${CONFDB_SOMINOR}.${CONFDB_SOMICRO}"
>> +
>> +# specific libraries SONAME
>> +LIB_SONAME_IMPORT([cpg])
>> +LIB_SONAME_IMPORT([confdb])
>>
>> # local options
>> AC_ARG_ENABLE([ansi],
>> @@ -437,8 +460,6 @@ AC_SUBST([SOMAJOR])
>> AC_SUBST([SOMINOR])
>> AC_SUBST([SOMICRO])
>> AC_SUBST([SONAME])
>> -AC_SUBST([CPG_SONAME])
>> -AC_SUBST([CONFDB_SONAME])
>> AC_SUBST([COVERAGE_LCRSO_EXTRA_LDFLAGS])
>> AC_SUBST([OS_DYFLAGS])
>>
>> @@ -488,8 +509,7 @@ AC_MSG_RESULT([ Features =${PACKAGE_FEATURES}])
>> AC_MSG_RESULT([])
>> AC_MSG_RESULT([$PACKAGE build info:])
>> AC_MSG_RESULT([ Library SONAME = ${SONAME}])
>> -AC_MSG_RESULT([ CPG Library SONAME = ${CPG_SONAME}])
>> -AC_MSG_RESULT([ CONFDB Library SONAME = ${CONFDB_SONAME}])
>> +LIB_MSG_RESULT(m4_shift(local_soname_list))dnl
>> AC_MSG_RESULT([ Default optimization = ${OPT_CFLAGS}])
>> AC_MSG_RESULT([ Default debug options = ${GDB_CFLAGS}])
>> AC_MSG_RESULT([ Extra compiler warnings = ${EXTRA_WARNING}])
>> diff --git a/trunk/lib/Makefile.am b/trunk/lib/Makefile.am
>> index d7c43e6..7e4974e 100644
>> --- a/trunk/lib/Makefile.am
>> +++ b/trunk/lib/Makefile.am
>> @@ -30,6 +30,13 @@
>> # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
>> # THE POSSIBILITY OF SUCH DAMAGE.
>>
>> +# Functions
>> +uc=$(shell echo $1 | tr a-z A-Z)
>> +get_soname=$(if $($(call uc,$1)_SONAME),$($(call uc,$1)_SONAME),$(SONAME))
>> +get_major=$(firstword $(subst ., ,$(call get_soname,$1)))
>> +get_sharedlibs=$(foreach lib,$(SHARED_LIBS_SO:lib%.so=%),lib$(lib).so.$(call get_soname,$(lib)))
>> +get_sharedlibs_two=$(foreach lib,$(SHARED_LIBS_SO:lib%.so=%),lib$(lib).so.$(call get_major,$(lib)))
>> +
>> MAINTAINERCLEANFILES = Makefile.in
>>
>> AM_CFLAGS = -fPIC
>> @@ -40,10 +47,7 @@ INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include
>>
>> lib_LIBRARIES = libcpg.a libconfdb.a libevs.a libcfg.a libquorum.a \
>> libvotequorum.a libpload.a libcoroipcc.a libsam.a
>> -SHARED_LIBS = $(filter-out libcpg.so.$(SONAME) libconfdb.so.$(SONAME), $(lib_LIBRARIES:%.a=%.so.$(SONAME))) \
>> - libcpg.so.$(CPG_SONAME) libconfdb.so.$(CONFDB_SONAME)
>> SHARED_LIBS_SO = $(lib_LIBRARIES:%.a=%.so)
>> -SHARED_LIBS_SO_TWO = $(lib_LIBRARIES:%.a=%.so.$(SOMAJOR))
>>
>> libcpg_a_SOURCES = cpg.c
>> libcfg_a_SOURCES = cfg.c
>> @@ -52,6 +56,7 @@ libpload_a_SOURCES = pload.c
>> libquorum_a_SOURCES = quorum.c
>> libvotequorum_a_SOURCES = votequorum.c
>> libconfdb_a_SOURCES = confdb.c sa-confdb.c
>> +libconfdb_a_LIBADD = ../lcr/lcr_ifact.o
>> libcoroipcc_a_SOURCES = coroipcc.c
>> libsam_a_SOURCES = sam.c
>>
>> @@ -72,21 +77,10 @@ libcoroipcc.so.$(SONAME): coroipcc.o
>> ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so
>> ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so.$(SOMAJOR)
>>
>> -libconfdb.so.$(CONFDB_SONAME): confdb.o sa-confdb.o libcoroipcc.so.$(SONAME)
>> - $(CC) $(LDFLAGS) $(DARWIN_OPTS) coroipcc.o confdb.o \
>> - sa-confdb.o ../lcr/lcr_ifact.o -o $@ -ldl $(AM_LDFLAGS)
>> - ln -sf libconfdb.so.$(CONFDB_SONAME) libconfdb.so
>> - ln -sf libconfdb.so.$(CONFDB_SONAME) libconfdb.so.$(SOMAJOR)
>> -
>> -libcpg.so.$(CPG_SONAME): cpg.o libcoroipcc.so.$(SONAME)
>> - $(CC) $(DARWIN_OPTS) $^ -o $@
>> - ln -sf $@ libcpg.so
>> - ln -sf $@ libcpg.so.$(SOMAJOR)
>> -
>> -lib%.so.$(SONAME): %.o libcoroipcc.so.$(SONAME)
>> - $(CC) $(DARWIN_OPTS) $^ -o $@
>> - ln -sf lib$*.so.$(SONAME) lib$*.so
>> - ln -sf lib$*.so.$(SONAME) lib$*.so.$(SOMAJOR)
>> +lib%.so: lib%.a libcoroipcc.so.$(SONAME)
>> + $(CC) $(DARWIN_OPTS) -Wl,-whole-archive $^ -Wl,-no-whole-archive -o $@
>> + ln -sf lib$*.so.$(call get_soname,$*) lib$*.so
>> + ln -sf lib$*.so.$(call get_soname,$*) lib$*.so.$(call get_major,$*)
>>
>> else
>>
>> @@ -97,21 +91,10 @@ libcoroipcc.so.$(SONAME): coroipcc.o
>> ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so
>> ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so.$(SOMAJOR)
>>
>> -libconfdb.so.$(CONFDB_SONAME): confdb.o sa-confdb.o libcoroipcc.so.$(SONAME)
>> - $(LD) $(LDFLAGS) $(SOLARIS_OPTS) -G coroipcc.o confdb.o \
>> - sa-confdb.o ../lcr/lcr_ifact.o -o $@ -ldl $(AM_LDFLAGS)
>> - ln -sf libconfdb.so.$(CONFDB_SONAME) libconfdb.so
>> - ln -sf libconfdb.so.$(CONFDB_SONAME) libconfdb.so.$(SOMAJOR)
>> -
>> -libcpg.so.$(CPG_SONAME): cpg.o libcoroipcc.so.$(SONAME)
>> - $(LD) $(SOLARIS_OPTS) -G $^ -o $@
>> - ln -sf $@ libcpg.so
>> - ln -sf $@ libcpg.so.$(SOMAJOR)
>> -
>> -lib%.so.$(SONAME): %.o libcoroipcc.so.$(SONAME)
>> - $(LD) $(SOLARIS_OPTS) -G $^ -o $@
>> - ln -sf lib$*.so.$(SONAME) lib$*.so
>> - ln -sf lib$*.so.$(SONAME) lib$*.so.$(SOMAJOR)
>> +lib%.so.$(SONAME): lib%.a libcoroipcc.so.$(SONAME)
>> + $(LD) $(SOLARIS_OPTS) -G -whole-archive $^ -no-whole-archive -o $@
>> + ln -sf lib$*.so.$(call get_soname,$*) lib$*.so
>> + ln -sf lib$*.so.$(call get_soname,$*) lib$*.so.$(call get_major,$*)
>>
>> else
>>
>> @@ -123,45 +106,29 @@ libcoroipcc.so.$(SONAME): coroipcc.o
>> ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so
>> ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so.$(SOMAJOR)
>>
>> -libconfdb.so.$(CONFDB_SONAME): confdb.o sa-confdb.o ../lcr/lcr_ifact.o libcoroipcc.so.$(SONAME)
>> - $(CC) -shared -o $@ \
>> - -Wl,-soname=libconfdb.so.$(SOMAJOR) \
>> - -Wl,-version-script=$(srcdir)/libconfdb.versions \
>> - $^ $(LDFLAGS) $(OS_DYFLAGS) $(OS_LDL) $(AM_LDFLAGS)
>> - ln -sf libconfdb.so.$(CONFDB_SONAME) libconfdb.so
>> - ln -sf libconfdb.so.$(CONFDB_SONAME) libconfdb.so.$(SOMAJOR)
>> -
>> -libcpg.so.$(CPG_SONAME): cpg.o libcoroipcc.so.$(SONAME)
>> - $(CC) -shared -o $@ \
>> - -Wl,-soname=libcpg.so.$(SOMAJOR) \
>> - -Wl,-version-script=$(srcdir)/libcpg.versions \
>> - $^ $(LDFLAGS) $(AM_LDFLAGS)
>> - ln -sf $@ libcpg.so
>> - ln -sf $@ libcpg.so.$(SOMAJOR)
>> -
>> -lib%.so.$(SONAME): %.o libcoroipcc.so.$(SONAME)
>> - $(CC) -shared -o $@ \
>> - -Wl,-soname=lib$*.so.$(SOMAJOR) \
>> +lib%.so: lib%.a libcoroipcc.so.$(SONAME)
>> + $(CC) -shared -o $@.$(call get_soname,$*) \
>> + -Wl,-soname=lib$*.so.$(call get_major,$*) \
>> -Wl,-version-script=$(srcdir)/lib$*.versions \
>> - $^ $(LDFLAGS) $(AM_LDFLAGS)
>> - ln -sf lib$*.so.$(SONAME) lib$*.so
>> - ln -sf lib$*.so.$(SONAME) lib$*.so.$(SOMAJOR)
>> + -Wl,-whole-archive $^ -Wl,-no-whole-archive $(LDFLAGS) $(AM_LDFLAGS)
>> + ln -sf lib$*.so.$(call get_soname,$*) lib$*.so
>> + ln -sf lib$*.so.$(call get_soname,$*) lib$*.so.$(call get_major,$*)
>>
>> endif
>>
>> endif
>>
>> -all-local: $(SHARED_LIBS)
>> +all-local: $(SHARED_LIBS_SO)
>> @echo Built shared libs
>>
>> install-exec-local:
>> $(INSTALL) -d $(DESTDIR)/$(libdir)
>> - $(INSTALL) -m 755 $(SHARED_LIBS) $(DESTDIR)/$(libdir)
>> - $(CP) -a $(SHARED_LIBS_SO) $(SHARED_LIBS_SO_TWO) $(DESTDIR)/$(libdir)
>> + $(INSTALL) -m 755 $(get_sharedlibs) $(DESTDIR)/$(libdir)
>> + $(CP) -a $(SHARED_LIBS_SO) $(get_sharedlibs_two) $(DESTDIR)/$(libdir)
>>
>> uninstall-local:
>> cd $(DESTDIR)/$(libdir)/ && \
>> - rm -f $(SHARED_LIBS) $(SHARED_LIBS_SO) $(SHARED_LIBS_SO_TWO)
>> + rm -f $(get_sharedlibs) $(SHARED_LIBS_SO) $(get_sharedlibs_two)
>>
>> clean-local:
>> rm -f *.o *.a *.so* *.da *.bb *.bbg
>> diff --git a/trunk/lib/libconfdb.verso b/trunk/lib/libconfdb.verso
>> new file mode 100644
>> index 0000000..ee74734
>> --- /dev/null
>> +++ b/trunk/lib/libconfdb.verso
>> @@ -0,0 +1 @@
>> +4.1.0
>> diff --git a/trunk/lib/libcpg.verso b/trunk/lib/libcpg.verso
>> new file mode 100644
>> index 0000000..1454f6e
>> --- /dev/null
>> +++ b/trunk/lib/libcpg.verso
>> @@ -0,0 +1 @@
>> +4.0.1
>> _______________________________________________
>> Openais mailing list
>> Openais at lists.linux-foundation.org
>> https://lists.linux-foundation.org/mailman/listinfo/openais
>
More information about the Openais
mailing list