Build roken using libtool
authorBenjamin Kaduk <kaduk@mit.edu>
Thu, 18 Sep 2014 17:55:15 +0000 (13:55 -0400)
committerD Brashear <shadow@your-file-system.com>
Wed, 8 Oct 2014 14:52:53 +0000 (10:52 -0400)
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 <kaduk@mit.edu>
Reviewed-by: D Brashear <shadow@your-file-system.com>
Tested-by: D Brashear <shadow@your-file-system.com>

src/config/Makefile.config.in
src/roken/Makefile.in
src/roken/librokenafs.la.sym [new file with mode: 0644]
src/roken/librokenafs.map [deleted file]

index 4da9559..8a8f982 100644 (file)
@@ -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@
index 1a782c8..18d97dc 100644 (file)
@@ -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 (file)
index 0000000..6391954
--- /dev/null
@@ -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 (file)
index 3a1545f..0000000
+++ /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:
-               *;
-};