From 3160b1ad38a87c0c7e132246de2e5f3c3fac92bd Mon Sep 17 00:00:00 2001 From: Benjamin Kaduk Date: Thu, 18 Sep 2014 13:55:15 -0400 Subject: [PATCH] Build roken using libtool Previously it was version 1.1; just in case I did something terrible, bump it to 2.0, as was done for the other libtool conversions. Install both the libtool archive and the static archive to $(TOP_LIBDIR), so that all our internal consumers can just use -L$(TOP_LIBDIR) -lrokenafs (well, via the LDFLAGS_roken and LIB_roken aliases) whether linking statically or shared. Installing the libtool archive gets us the shared library there, but we have to then remove the libtool archive, since this is not the location we told libtool we would install to (the prefix we configured with), and libtool would get confused trying to use this installed, but installed-at-the-wrong-place libtool archive. Add rk_vsyslog to the export list, for AIX. It is tempting to eschew this installation and instead point LIB_roken at the libtool archive file librokenafs.la directly (with empty LDFLAGS_roken), but this is not possible until all consumers of roken are converted to build using libtool. In practice, this will probably not happen until LWP is evicted from the tree. Change-Id: If6ab6c2d57c0a1b1511f9631b9aeb522d7e7392b Reviewed-on: http://gerrit.openafs.org/11477 Reviewed-by: Benjamin Kaduk Reviewed-by: D Brashear Tested-by: D Brashear --- src/config/Makefile.config.in | 2 +- src/roken/Makefile.in | 220 +++++++++++++++++----------------- src/roken/librokenafs.la.sym | 45 +++++++ src/roken/librokenafs.map | 49 -------- 4 files changed, 158 insertions(+), 158 deletions(-) create mode 100644 src/roken/librokenafs.la.sym delete mode 100644 src/roken/librokenafs.map diff --git a/src/config/Makefile.config.in b/src/config/Makefile.config.in index 4da95599c..8a8f9826a 100644 --- a/src/config/Makefile.config.in +++ b/src/config/Makefile.config.in @@ -95,7 +95,7 @@ REGEX_OBJ_PIC = @REGEX_OBJ_PIC@ RM = @RM@ RXDEBUG = @RXDEBUG@ ROKEN_HEADERS = @ROKEN_HEADERS@ -ROKEN_LIBOBJS = @LIBOBJS@ +ROKEN_LTLIBOBJS = @LTLIBOBJS@ SHLIB_CFLAGS = @SHLIB_CFLAGS@ SHLIB_LDFLAGS = @SHLIB_LDFLAGS@ SHLIB_LINKER = @SHLIB_LINKER@ diff --git a/src/roken/Makefile.in b/src/roken/Makefile.in index 1a782c8bd..18d97dcc5 100644 --- a/src/roken/Makefile.in +++ b/src/roken/Makefile.in @@ -1,12 +1,20 @@ # A roken library for AFS -LIBMAJOR=1 -LIBMINOR=1 - srcdir=@srcdir@ include @TOP_OBJDIR@/src/config/Makefile.config -include @TOP_OBJDIR@/src/config/Makefile.shared +include @TOP_OBJDIR@/src/config/Makefile.libtool +include @TOP_OBJDIR@/src/config/Makefile.pthread + +LT_current = 2 +LT_revision = 0 +LT_age = 0 +# ROKEN_LTLIBOBJS incorporates the pieces which configure has detected we +# need to replace/provide. The values contained therein include a prefix +# ${LIBOBJDIR}, which is not set, so they will be sought in this directory. +LT_objs = $(ROKEN_LTLIBOBJS) base64.lo cloexec.lo ct.lo hex.lo issuid.lo \ + mkdir.lo net_read.lo net_write.lo rename.lo socket.lo snprintf.lo \ + warnerr.lo HEADERS = ${TOP_INCDIR}/base64.h \ ${TOP_INCDIR}/roken.h \ @@ -14,55 +22,48 @@ HEADERS = ${TOP_INCDIR}/base64.h \ UPSTREAM = $(TOP_SRCDIR)/external/heimdal/roken -SHLIBOBJ = librokenafs.${SHLIB_SUFFIX}.${LIBMAJOR}.${LIBMINOR} - -all: $(ROKEN_HEADERS) $(HEADERS) \ - $(TOP_LIBDIR)/$(SHLIBOBJ) \ +# TOP_LIBDIR is a convenient place where we can ensure that both the shared +# and static versions of the library will end up (I'm looking at you, AIX). +# Otherwise we could just use .libs directly, since only openafs-internal +# tools will be linking roken from that directory. +all: $(ROKEN_HEADERS) $(HEADERS) $(TOP_LIBDIR)/librokenafs.$(SHLIB_SUFFIX) \ $(TOP_LIBDIR)/librokenafs.a -buildtools: $(ROKEN_HEADERS) $(HEADERS) $(TOP_LIBDIR)/librokenafs.a +buildtools: $(ROKEN_HEADERS) $(HEADERS) -install: librokenafs.a $(SHLIBOBJ) - $(TOP_OBJDIR)/src/config/shlib-install -d $(DESTDIR)$(libdir) \ - -l librokenafs -M $(LIBMAJOR) -m $(LIBMINOR) +install: librokenafs.la librokenafs.a + $(LT_INSTALL_DATA) librokenafs.la $(DESTDIR)$(libdir)/librokenafs.la + $(RM) $(DESTDIR)$(libdir)/librokenafs.la $(INSTALL_DATA) librokenafs.a $(DESTDIR)$(libdir)/librokenafs.a -dest: librokenafs.a $(SHLIBOBJ) - $(TOP_OBJDIR)/src/config/shlib-install -d $(DEST)/lib \ - -l librokenafs -M $(LIBMAJOR) -m $(LIBMINOR) +dest: librokenafs.la librokenafs.a + $(LT_INSTALL_DATA) librokenafs.la $(DEST)/lib/librokenafs.la + $(RM) $(DEST)/lib/librokenafs.la $(INSTALL_DATA) librokenafs.a $(DEST)/lib/librokenafs.a clean: - $(RM) -f $(OBJECTS) $(SHLIBOBJ) librokenafs.a librokenafs.exp \ - err.h + $(LT_CLEAN) + $(RM) -f $(OBJECTS) librokenafs.a err.h -OBJECTS = $(ROKEN_LIBOBJS) \ - base64.o \ - cloexec.o ct.o hex.o issuid.o mkdir.o net_read.o net_write.o \ - rename.o socket.o snprintf.o warnerr.o +$(TOP_LIBDIR)/librokenafs.$(SHLIB_SUFFIX): librokenafs.la + $(LT_INSTALL_DATA) librokenafs.la $(TOP_LIBDIR)/librokenafs.la + # libtool gets confused if we leave these around + $(RM) $(TOP_LIBDIR)/librokenafs.la -$(TOP_LIBDIR)/$(SHLIBOBJ): $(SHLIBOBJ) - $(TOP_OBJDIR)/src/config/shlib-install -d $(TOP_LIBDIR) \ - -l librokenafs -M $(LIBMAJOR) -m $(LIBMINOR) - -$(SHLIBOBJ): $(OBJECTS) librokenafs.map - $(TOP_OBJDIR)/src/config/shlib-build -i -d $(srcdir) -l librokenafs \ - -M $(LIBMAJOR) -m $(LIBMINOR) -- \ - $(OBJECTS) $(MT_LIBS) +librokenafs.la: librokenafs.la.sym $(LT_objs) + $(LT_LDLIB_shlib_missing) $(LT_objs) $(TOP_LIBDIR)/librokenafs.a: librokenafs.a $(INSTALL_DATA) $? $@ -librokenafs.a: $(OBJECTS) - $(RM) -f $@ - $(AR) crv $@ $(OBJECTS) - $(RANLIB) $@ +librokenafs.a: $(LT_objs) + $(LT_LDLIB_static) $(LT_objs) $(TOP_INCDIR)/base64.h: ${UPSTREAM}/base64.h $(INSTALL_DATA) $? $@ $(TOP_INCDIR)/err.h: ${UPSTREAM}/err.hin - cp $? $@ + $(INSTALL_DATA) $? $@ $(TOP_INCDIR)/roken.h: $(UPSTREAM)/roken.h.in $(INSTALL_DATA) $? $@ @@ -71,115 +72,118 @@ $(TOP_INCDIR)/roken-common.h: $(UPSTREAM)/roken-common.h $(INSTALL_DATA) $? $@ err.h: ${UPSTREAM}/err.hin - cp $? $@ + $(INSTALL_DATA) $? $@ -base64.o: $(UPSTREAM)/base64.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/base64.c +# Here we have explicit rules for all the libtool objects we might need to +# build. The implicit rules don't work since the sources are in a different +# castle. +base64.lo: $(UPSTREAM)/base64.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/base64.c -cloexec.o: ${UPSTREAM}/cloexec.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/cloexec.c +cloexec.lo: ${UPSTREAM}/cloexec.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/cloexec.c -ct.o: ${UPSTREAM}/ct.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/ct.c +ct.lo: ${UPSTREAM}/ct.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/ct.c -daemon.o: ${UPSTREAM}/daemon.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/daemon.c +daemon.lo: ${UPSTREAM}/daemon.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/daemon.c -ecalloc.o: ${UPSTREAM}/ecalloc.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/ecalloc.c +ecalloc.lo: ${UPSTREAM}/ecalloc.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/ecalloc.c -emalloc.o: ${UPSTREAM}/emalloc.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/emalloc.c +emalloc.lo: ${UPSTREAM}/emalloc.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/emalloc.c -erealloc.o: ${UPSTREAM}/erealloc.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/erealloc.c +erealloc.lo: ${UPSTREAM}/erealloc.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/erealloc.c -err.o: ${UPSTREAM}/err.c err.h ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/err.c +err.lo: ${UPSTREAM}/err.c err.h ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/err.c -errx.o: ${UPSTREAM}/errx.c err.h ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/errx.c +errx.lo: ${UPSTREAM}/errx.c err.h ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/errx.c -flock.o: ${UPSTREAM}/flock.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/flock.c +flock.lo: ${UPSTREAM}/flock.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/flock.c -getopt.o: ${UPSTREAM}/getopt.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/getopt.c +getopt.lo: ${UPSTREAM}/getopt.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/getopt.c -getprogname.o: ${UPSTREAM}/getprogname.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/getprogname.c +getprogname.lo: ${UPSTREAM}/getprogname.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/getprogname.c -hex.o: ${UPSTREAM}/hex.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/hex.c +hex.lo: ${UPSTREAM}/hex.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/hex.c -issuid.o: ${UPSTREAM}/issuid.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/issuid.c +issuid.lo: ${UPSTREAM}/issuid.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/issuid.c -mkstemp.o: ${UPSTREAM}/mkstemp.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/mkstemp.c +mkstemp.lo: ${UPSTREAM}/mkstemp.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/mkstemp.c -mkdir.o: ${UPSTREAM}/mkdir.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/mkdir.c +mkdir.lo: ${UPSTREAM}/mkdir.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/mkdir.c -net_read.o: ${UPSTREAM}/net_read.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/net_read.c +net_read.lo: ${UPSTREAM}/net_read.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/net_read.c -net_write.o: ${UPSTREAM}/net_write.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/net_write.c +net_write.lo: ${UPSTREAM}/net_write.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/net_write.c -rename.o: ${UPSTREAM}/rename.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/rename.c +rename.lo: ${UPSTREAM}/rename.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/rename.c -setenv.o: ${UPSTREAM}/setenv.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/setenv.c +setenv.lo: ${UPSTREAM}/setenv.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/setenv.c -setprogname.o: ${UPSTREAM}/setprogname.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/setprogname.c +setprogname.lo: ${UPSTREAM}/setprogname.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/setprogname.c -socket.o: ${UPSTREAM}/socket.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/socket.c +socket.lo: ${UPSTREAM}/socket.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/socket.c # The upstream snprintf.c has some pointer warnings in it -CFLAGS_snprintf.o = @CFLAGS_NOERROR@ +CFLAGS_snprintf.lo = @CFLAGS_NOERROR@ -snprintf.o: ${UPSTREAM}/snprintf.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/snprintf.c +snprintf.lo: ${UPSTREAM}/snprintf.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/snprintf.c -strlcat.o: ${UPSTREAM}/strlcat.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/strlcat.c +strlcat.lo: ${UPSTREAM}/strlcat.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/strlcat.c -strlcpy.o: ${UPSTREAM}/strlcpy.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/strlcpy.c +strlcpy.lo: ${UPSTREAM}/strlcpy.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/strlcpy.c -strnlen.o: ${UPSTREAM}/strnlen.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/strnlen.c +strnlen.lo: ${UPSTREAM}/strnlen.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/strnlen.c -strsep.o: ${UPSTREAM}/strsep.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/strsep.c +strsep.lo: ${UPSTREAM}/strsep.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/strsep.c -unsetenv.o: ${UPSTREAM}/unsetenv.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/unsetenv.c +unsetenv.lo: ${UPSTREAM}/unsetenv.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/unsetenv.c -verr.o: ${UPSTREAM}/verr.c err.h ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/verr.c +verr.lo: ${UPSTREAM}/verr.c err.h ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/verr.c -verrx.o: ${UPSTREAM}/verrx.c err.h ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/verrx.c +verrx.lo: ${UPSTREAM}/verrx.c err.h ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/verrx.c -vsyslog.o: ${UPSTREAM}/vsyslog.c ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/vsyslog.c +vsyslog.lo: ${UPSTREAM}/vsyslog.c ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/vsyslog.c -vwarn.o: ${UPSTREAM}/vwarn.c err.h ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/vwarn.c +vwarn.lo: ${UPSTREAM}/vwarn.c err.h ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/vwarn.c -vwarnx.o: ${UPSTREAM}/vwarnx.c err.h ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/vwarnx.c +vwarnx.lo: ${UPSTREAM}/vwarnx.c err.h ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/vwarnx.c -warn.o: ${UPSTREAM}/warn.c err.h ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/warn.c +warn.lo: ${UPSTREAM}/warn.c err.h ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/warn.c -warnerr.o: ${UPSTREAM}/warnerr.c err.h ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/warnerr.c +warnerr.lo: ${UPSTREAM}/warnerr.c err.h ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/warnerr.c -warnx.o: ${UPSTREAM}/warnx.c err.h ${HEADERS} - $(AFS_CCRULE) $(UPSTREAM)/warnx.c +warnx.lo: ${UPSTREAM}/warnx.c err.h ${HEADERS} + $(LT_CCRULE) $(UPSTREAM)/warnx.c diff --git a/src/roken/librokenafs.la.sym b/src/roken/librokenafs.la.sym new file mode 100644 index 000000000..63919545f --- /dev/null +++ b/src/roken/librokenafs.la.sym @@ -0,0 +1,45 @@ +base64_decode +base64_encode +ct_memcmp +err +errx +issuid +net_read +net_write +rk_asnprintf +rk_asprintf +rk_cloexec +rk_cloexec_file +rk_daemon +rk_ecalloc +rk_emalloc +rk_erealloc +rk_flock +rk_getopt +rk_getprogname +rk_getprogname +rk_gettimeofday +rk_hex_encode +rk_localtime_r +rk_mkdir +rk_mkstemp +rk_print_version +rk_setenv +rk_setprogname +rk_snprintf +rk_socket +rk_strlcat +rk_strlcpy +rk_strnlen +rk_strsep +rk_unsetenv +rk_vasnprintf +rk_vasprintf +rk_vsnprintf +rk_vsyslog +verr +verrx +vwarn +vwarnx +warn +warnx diff --git a/src/roken/librokenafs.map b/src/roken/librokenafs.map deleted file mode 100644 index 3a1545fe9..000000000 --- a/src/roken/librokenafs.map +++ /dev/null @@ -1,49 +0,0 @@ -{ - global: - base64_decode; - base64_encode; - ct_memcmp; - rk_daemon; - err; - errx; - rk_getopt; - rk_getprogname; - issuid; - net_read; - net_write; - rk_asnprintf; - rk_asprintf; - rk_cloexec; - rk_cloexec_file; - rk_ecalloc; - rk_emalloc; - rk_erealloc; - rk_flock; - rk_gettimeofday; - rk_getprogname; - rk_hex_encode; - rk_localtime_r; - rk_mkdir; - rk_mkstemp; - rk_print_version; - rk_setenv; - rk_setprogname; - rk_snprintf; - rk_socket; - rk_strlcat; - rk_strnlen; - rk_strlcpy; - rk_strsep; - rk_unsetenv; - rk_vasprintf; - rk_vasnprintf; - rk_vsnprintf; - verr; - verrx; - vwarn; - vwarnx; - warn; - warnx; - local: - *; -}; -- 2.39.5