Ver Fonte

Support for specific libraries version

Patch adds support for changing version number of library simply by edit
lib$(LIB).verso file.


git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2752 fd59a12c-fef9-0310-b244-a6a79926bd2f
Jan Friesse há 16 anos atrás
pai
commit
4b18364c61
10 ficheiros alterados com 75 adições e 70 exclusões
  1. 41 11
      configure.ac
  2. 26 59
      lib/Makefile.am
  3. 1 0
      lib/libcfg.verso
  4. 1 0
      lib/libconfdb.verso
  5. 1 0
      lib/libcpg.verso
  6. 1 0
      lib/libevs.verso
  7. 1 0
      lib/libpload.verso
  8. 1 0
      lib/libquorum.verso
  9. 1 0
      lib/libsam.verso
  10. 1 0
      lib/libvotequorum.verso

+ 41 - 11
configure.ac

@@ -135,6 +135,35 @@ AC_CONFIG_FILES([Makefile
 
 
 ### Local business
 ### Local business
 
 
+dnl ===============================================
+dnl Functions / global M4 variables
+dnl ===============================================
+dnl Global list of LIB names
+m4_define([local_soname_list], [])dnl
+
+dnl Upcase parameter
+m4_define([local_upcase], [translit([$*], [a-z], [A-Z])])dnl
+
+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
+
+dnl M4 macro for print padspaces (used in LIB_MSG_RESULT). It takes 2 arguments, length of string to pad and desired
+dnl (padded) length
+m4_define([m4_printpadspace],[ifelse(m4_eval([$2 - $1 < 1]),[1],,[ ][m4_printpadspace([$1],m4_eval([$2 - 1]))])])dnl
+
+dnl Show AC_MSG_RESULT for specific libraries
+m4_define([LIB_MSG_RESULT], [ifelse([$#], [1],  ,[dnl
+AC_MSG_RESULT([  $2 Library SONAME m4_printpadspace(len($2),8) = ${$1}])
+LIB_MSG_RESULT(m4_shift(m4_shift($@)))dnl
+])])dnl
+
 # ===============================================
 # ===============================================
 # Helpers
 # Helpers
 # ===============================================
 # ===============================================
@@ -168,17 +197,21 @@ PACKAGE_FEATURES=""
 LINT_FLAGS="-weak -unrecog +posixlib +ignoresigns -fcnuse \
 LINT_FLAGS="-weak -unrecog +posixlib +ignoresigns -fcnuse \
 	-badflag -D__gnuc_va_list=va_list -D__attribute\(x\)="
 	-badflag -D__gnuc_va_list=va_list -D__attribute\(x\)="
 
 
-# libraries SONAME
+# default libraries SONAME
 SOMAJOR="4"
 SOMAJOR="4"
 SOMINOR="0"
 SOMINOR="0"
 SOMICRO="0"
 SOMICRO="0"
 SONAME="${SOMAJOR}.${SOMINOR}.${SOMICRO}"
 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([cfg])
+LIB_SONAME_IMPORT([confdb])
+LIB_SONAME_IMPORT([cpg])
+LIB_SONAME_IMPORT([evs])
+LIB_SONAME_IMPORT([pload])
+LIB_SONAME_IMPORT([quorum])
+LIB_SONAME_IMPORT([sam])
+LIB_SONAME_IMPORT([votequorum])
 
 
 # local options
 # local options
 AC_ARG_ENABLE([ansi],
 AC_ARG_ENABLE([ansi],
@@ -437,8 +470,6 @@ AC_SUBST([SOMAJOR])
 AC_SUBST([SOMINOR])
 AC_SUBST([SOMINOR])
 AC_SUBST([SOMICRO])
 AC_SUBST([SOMICRO])
 AC_SUBST([SONAME])
 AC_SUBST([SONAME])
-AC_SUBST([CPG_SONAME])
-AC_SUBST([CONFDB_SONAME])
 AC_SUBST([COVERAGE_LCRSO_EXTRA_LDFLAGS])
 AC_SUBST([COVERAGE_LCRSO_EXTRA_LDFLAGS])
 AC_SUBST([OS_DYFLAGS])
 AC_SUBST([OS_DYFLAGS])
 
 
@@ -488,8 +519,7 @@ AC_MSG_RESULT([  Features                 =${PACKAGE_FEATURES}])
 AC_MSG_RESULT([])
 AC_MSG_RESULT([])
 AC_MSG_RESULT([$PACKAGE build info:])
 AC_MSG_RESULT([$PACKAGE build info:])
 AC_MSG_RESULT([  Library SONAME           = ${SONAME}])
 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 optimization     = ${OPT_CFLAGS}])
 AC_MSG_RESULT([  Default debug options    = ${GDB_CFLAGS}])
 AC_MSG_RESULT([  Default debug options    = ${GDB_CFLAGS}])
 AC_MSG_RESULT([  Extra compiler warnings  = ${EXTRA_WARNING}])
 AC_MSG_RESULT([  Extra compiler warnings  = ${EXTRA_WARNING}])

+ 26 - 59
lib/Makefile.am

@@ -30,6 +30,13 @@
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 # THE POSSIBILITY OF SUCH DAMAGE.
 # 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
 MAINTAINERCLEANFILES    = Makefile.in
 
 
 AM_CFLAGS		= -fPIC
 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 \
 lib_LIBRARIES		= libcpg.a libconfdb.a libevs.a libcfg.a libquorum.a \
 			  libvotequorum.a libpload.a libcoroipcc.a libsam.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		= $(lib_LIBRARIES:%.a=%.so)
-SHARED_LIBS_SO_TWO	= $(lib_LIBRARIES:%.a=%.so.$(SOMAJOR))
 
 
 libcpg_a_SOURCES	= cpg.c
 libcpg_a_SOURCES	= cpg.c
 libcfg_a_SOURCES	= cfg.c
 libcfg_a_SOURCES	= cfg.c
@@ -52,6 +56,7 @@ libpload_a_SOURCES	= pload.c
 libquorum_a_SOURCES	= quorum.c
 libquorum_a_SOURCES	= quorum.c
 libvotequorum_a_SOURCES	= votequorum.c
 libvotequorum_a_SOURCES	= votequorum.c
 libconfdb_a_SOURCES	= confdb.c sa-confdb.c
 libconfdb_a_SOURCES	= confdb.c sa-confdb.c
+libconfdb_a_LIBADD	= ../lcr/lcr_ifact.o
 libcoroipcc_a_SOURCES	= coroipcc.c
 libcoroipcc_a_SOURCES	= coroipcc.c
 libsam_a_SOURCES	= sam.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
 	ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so.$(SOMAJOR)
 	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
 else
 
 
@@ -97,21 +91,10 @@ libcoroipcc.so.$(SONAME): coroipcc.o
 	ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so
 	ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so
 	ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so.$(SOMAJOR)
 	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
 else
 
 
@@ -123,45 +106,29 @@ libcoroipcc.so.$(SONAME): coroipcc.o
 	ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so
 	ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so
 	ln -sf libcoroipcc.so.$(SONAME) libcoroipcc.so.$(SOMAJOR)
 	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 \
 		-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
 
 
 endif
 endif
 
 
-all-local: $(SHARED_LIBS)
+all-local: $(SHARED_LIBS_SO)
 	@echo Built shared libs
 	@echo Built shared libs
 
 
 install-exec-local:
 install-exec-local:
 	$(INSTALL) -d $(DESTDIR)/$(libdir)
 	$(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:
 uninstall-local:
 	cd $(DESTDIR)/$(libdir)/ && \
 	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:
 clean-local:
 	rm -f *.o *.a *.so* *.da *.bb *.bbg
 	rm -f *.o *.a *.so* *.da *.bb *.bbg

+ 1 - 0
lib/libcfg.verso

@@ -0,0 +1 @@
+4.0.0

+ 1 - 0
lib/libconfdb.verso

@@ -0,0 +1 @@
+4.1.0

+ 1 - 0
lib/libcpg.verso

@@ -0,0 +1 @@
+4.0.1

+ 1 - 0
lib/libevs.verso

@@ -0,0 +1 @@
+4.0.0

+ 1 - 0
lib/libpload.verso

@@ -0,0 +1 @@
+4.0.0

+ 1 - 0
lib/libquorum.verso

@@ -0,0 +1 @@
+4.0.0

+ 1 - 0
lib/libsam.verso

@@ -0,0 +1 @@
+4.0.0

+ 1 - 0
lib/libvotequorum.verso

@@ -0,0 +1 @@
+4.0.0