Browse Source

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 16 năm trước cách đây
mục cha
commit
4b18364c61
10 tập tin đã thay đổi với 75 bổ sung70 xóa
  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
 
+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
 # ===============================================
@@ -168,17 +197,21 @@ 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([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
 AC_ARG_ENABLE([ansi],
@@ -437,8 +470,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 +519,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}])

+ 26 - 59
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

+ 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