Build and install PIC versions of libafsrpc and libafsauthent
authorRuss Allbery <rra@stanford.edu>
Tue, 7 Jul 2009 01:41:39 +0000 (18:41 -0700)
committerDerrick Brashear <shadow@dementia.org>
Fri, 10 Jul 2009 03:20:13 +0000 (21:20 -0600)
To include AFS code in loadable modules such as PAM modules, NSS modules,
or Perl/Python/PHP/Ruby extensions, it needs to be built PIC or one must
link with the AFS shared libraries.  Since we haven't historically been
that great about maintaining the shared library ABI, it's nice to have
static libraries built with PIC code that can be linked into such modules.

Based on a patch by Garrett Wollman updated with the build system changes
that happened after 1.4.

Make shlib makefiles have clean rules for PIC libraries.
Make RedHat specfile know how to deal with PIC libraries.

Reviewed-on: http://gerrit.openafs.org/8
Verified-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Derrick Brashear <shadow@dementia.org>

src/packaging/RedHat/openafs.spec.in
src/shlibafsauthent/Makefile.in
src/shlibafsrpc/Makefile.in

index 74bcf71..732f960 100644 (file)
@@ -1541,6 +1541,8 @@ dkms remove -m %{name} -v %{dkms_version} --rpm_safe_upgrade --all ||:
 %defattr(-,root,root)
 %{_libdir}/libafsauthent.a
 %{_libdir}/libafsrpc.a
+%{_libdir}/libafsauthent_pic.a
+%{_libdir}/libafsrpc_pic.a
 %if %{build_authlibs}
 %{_libdir}/libafsauthent.so
 %{_libdir}/libafsrpc.so
index 7d06027..54cf4af 100644 (file)
@@ -104,28 +104,40 @@ LIBOBJS = \
 
 LIBAFSAUTHENT = libafsauthent.${SHLIB_SUFFIX}.${LIBAFSAUTHENTMAJOR}.${LIBAFSAUTHENTMINOR}
 
-all: ${TOP_LIBDIR}/${LIBAFSAUTHENT}
+all: ${TOP_LIBDIR}/${LIBAFSAUTHENT} ${TOP_LIBDIR}/libafsauthent_pic.a
 
 ${TOP_LIBDIR}/${LIBAFSAUTHENT}: ${LIBAFSAUTHENT}
        ../config/shlib-install -d ${TOP_LIBDIR} \
                -l libafsauthent \
                -M ${LIBAFSAUTHENTMAJOR} -m ${LIBAFSAUTHENTMINOR}
 
-install: ${LIBAFSAUTHENT}
+${TOP_LIBDIR}/libafsauthent_pic.a: libafsauthent_pic.a
+       ${INSTALL_DATA} libafsauthent_pic.a $@
+
+install: ${LIBAFSAUTHENT} libafsauthent_pic.a
        ../config/shlib-install -d ${DESTDIR}${libdir} \
                -l libafsauthent \
                -M ${LIBAFSAUTHENTMAJOR} -m ${LIBAFSAUTHENTMINOR}
+       ${INSTALL_DATA} libafsauthent_pic.a \
+               ${DESTDIR}${libdir}/libafsauthent_pic.a
 
-dest: ${LIBAFSAUTHENT}
+dest: ${LIBAFSAUTHENT} libafsauthent_pic.a
        ../config/shlib-install -d ${DEST}/lib \
                -l libafsauthent \
                -M ${LIBAFSAUTHENTMAJOR} -m ${LIBAFSAUTHENTMINOR}
+       ${INSTALL_DATA} libafsauthent_pic.a \
+               ${DEST}/lib/libafsauthent_pic.a
 
 ${LIBAFSAUTHENT}: ${LIBOBJS}
        ../config/shlib-build -d $(srcdir) -l libafsauthent \
                -M ${LIBAFSAUTHENTMAJOR} -m ${LIBAFSAUTHENTMINOR} -- \
                -L${TOP_LIBDIR} -lafsrpc ${LIBOBJS} ${MT_LIBS}
 
+libafsauthent_pic.a: ${LIBOBJS}
+       $(RM) -f $@
+       $(AR) crv $@ ${LIBOBJS}
+       $(RANLIB) $@
+
 audit.o: ${AUDIT}/audit.c
        ${CCRULE}
 
@@ -278,4 +290,4 @@ pioctl.o: ${SYS}/pioctl.c
        ${CCRULE}
 
 clean:
-       $(RM) -f *.o *.a libafsauthent.a* libafsauthent.sl* libafsauthent.so*
+       $(RM) -f *.o *.a libafsauthent.a* libafsauthent.sl* libafsauthent.so* libafsauthent_pic.a libafsauthent.dylib.*
index a1df90c..c59a58b 100644 (file)
@@ -138,25 +138,35 @@ LIBOBJS = \
 
 LIBAFSRPC = libafsrpc.${SHLIB_SUFFIX}.${LIBAFSRPCMAJOR}.${LIBAFSRPCMINOR}
 
-all: ${TOP_LIBDIR}/${LIBAFSRPC}
+all: ${TOP_LIBDIR}/${LIBAFSRPC} ${TOP_LIBDIR}/libafsrpc_pic.a
 
 ${TOP_LIBDIR}/${LIBAFSRPC}: ${LIBAFSRPC}
        ../config/shlib-install -d ${TOP_LIBDIR} \
                -l libafsrpc -M ${LIBAFSRPCMAJOR} -m ${LIBAFSRPCMINOR}
 
-install: ${LIBAFSRPC}
+${TOP_LIBDIR}/libafsrpc_pic.a: libafsrpc_pic.a
+       ${INSTALL_DATA} libafsrpc_pic.a $@
+
+install: ${LIBAFSRPC} libafsrpc_pic.a
        ../config/shlib-install -d ${DESTDIR}${libdir} \
                -l libafsrpc -M ${LIBAFSRPCMAJOR} -m ${LIBAFSRPCMINOR}
+       ${INSTALL_DATA} libafsrpc_pic.a ${DESTDIR}${libdir}/libafsrpc_pic.a
 
-dest: ${LIBAFSRPC}
+dest: ${LIBAFSRPC} libafsrpc_pic.a
        ../config/shlib-install -d ${DEST}/lib \
                -l libafsrpc -M ${LIBAFSRPCMAJOR} -m ${LIBAFSRPCMINOR}
+       ${INSTALL_DATA} libafsrpc_pic.a ${DEST}/lib/libafsrpc_pic.a
 
 ${LIBAFSRPC}: ${LIBOBJS}
        ../config/shlib-build -d $(srcdir) -l libafsrpc \
                -M ${LIBAFSRPCMAJOR} -m ${LIBAFSRPCMINOR} -- \
                ${LIBOBJS} ${MT_LIBS}
 
+libafsrpc_pic.a: ${LIBOBJS}
+       $(RM) -f $@
+       $(AR) crv $@ ${LIBOBJS}
+       $(RANLIB) $@
+
 rx_event.o: ${RX}/rx_event.c
        ${CCRULE}
 
@@ -411,4 +421,4 @@ afsaux.o: ${FSINT}/afsaux.c
        ${CCRULE}
 
 clean:
-       $(RM) -f *.o libafsrpc.a* libafsrpc.sl* libafsrpc.so*
+       $(RM) -f *.o libafsrpc.a* libafsrpc.sl* libafsrpc.so* libafsrpc_pic.a libafsrpc.dylib.*