diff --git a/configure.ac b/configure.ac index 59f10fbd..66d718f7 100644 --- a/configure.ac +++ b/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}]) diff --git a/lib/Makefile.am b/lib/Makefile.am index d7c43e61..7e4974e3 100644 --- a/lib/Makefile.am +++ b/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/lib/libcfg.verso b/lib/libcfg.verso new file mode 100644 index 00000000..fcdb2e10 --- /dev/null +++ b/lib/libcfg.verso @@ -0,0 +1 @@ +4.0.0 diff --git a/lib/libconfdb.verso b/lib/libconfdb.verso new file mode 100644 index 00000000..ee74734a --- /dev/null +++ b/lib/libconfdb.verso @@ -0,0 +1 @@ +4.1.0 diff --git a/lib/libcpg.verso b/lib/libcpg.verso new file mode 100644 index 00000000..1454f6ed --- /dev/null +++ b/lib/libcpg.verso @@ -0,0 +1 @@ +4.0.1 diff --git a/lib/libevs.verso b/lib/libevs.verso new file mode 100644 index 00000000..fcdb2e10 --- /dev/null +++ b/lib/libevs.verso @@ -0,0 +1 @@ +4.0.0 diff --git a/lib/libpload.verso b/lib/libpload.verso new file mode 100644 index 00000000..fcdb2e10 --- /dev/null +++ b/lib/libpload.verso @@ -0,0 +1 @@ +4.0.0 diff --git a/lib/libquorum.verso b/lib/libquorum.verso new file mode 100644 index 00000000..fcdb2e10 --- /dev/null +++ b/lib/libquorum.verso @@ -0,0 +1 @@ +4.0.0 diff --git a/lib/libsam.verso b/lib/libsam.verso new file mode 100644 index 00000000..fcdb2e10 --- /dev/null +++ b/lib/libsam.verso @@ -0,0 +1 @@ +4.0.0 diff --git a/lib/libvotequorum.verso b/lib/libvotequorum.verso new file mode 100644 index 00000000..fcdb2e10 --- /dev/null +++ b/lib/libvotequorum.verso @@ -0,0 +1 @@ +4.0.0