auth: local realms configuration
[openafs.git] / src / libuafs / Makefile.common.in
index 6ed5e8e..2439c7a 100644 (file)
@@ -14,11 +14,16 @@ UOBJ        =../UAFS
 PICOBJ  =../UAFS.pic
 JUAFS  =../JUAFS
 WEBOBJ=../AFSWEB
+PERLUAFS = PERLUAFS
 AFS    =../afs
 RX     =../rx
 AFSINT=../afsint
 LIB    =../lib
 NS_INCL =SRC/../afsweb/netscape_includes
+SWIG_PERL_CFLAGS = -fPIC `perl -MExtUtils::Embed -e ccopts`
+SWIG_PERL_LDFLAGS = -fPIC `perl -MExtUtils::Embed -e ldopts`
+SWIG = @SWIG@
+LIBUAFS_BUILD_PERL = @LIBUAFS_BUILD_PERL@
 
 TOP_OBJ_AUTH = ${TOP_OBJDIR}/src/auth
 TOP_OBJ_FSINT = ${TOP_OBJDIR}/src/fsint
@@ -58,7 +63,7 @@ COMMON_INCLUDE = -I. -I.. -I../nfs \
 # Build rules - CC and CFLAGS are defined in system specific MakefileProtos.
 
 all: ${TOP_LIBDIR}/$(LIBJUAFS) ${TOP_LIBDIR}/$(LIBUAFS) \
-       ${TOP_LIBDIR}/libuafs_pic.a linktest
+       ${TOP_LIBDIR}/libuafs_pic.a linktest @LIBUAFS_BUILD_PERL@
 
 ${TOP_LIBDIR}/$(LIBAFSWEB): AFSWEB/$(LIBAFSWEB)
        ${INSTALL_DATA} $? $@
@@ -75,11 +80,17 @@ ${TOP_LIBDIR}/libuafs_pic.a: UAFS.pic/libuafs_pic.a
 ${TOP_LIBDIR}/$(LIBJUAFS): JUAFS/$(LIBJUAFS)
        ${INSTALL_DATA} $? $@
 
-${TOP_LIBDIR}/perl/AFS/ukernel.so: PERLUAFS/ukernel.so
-       ${INSTALL_DATA} $? $@
+setup_perllib:
+       ${INSTALL} -d ${TOP_LIBDIR}/perl
+       ${INSTALL} -d ${TOP_LIBDIR}/perl/AFS
 
-${TOP_LIBDIR}/perl/AFS/ukernel.pm: PERLUAFS/ukernel.pm
-       ${INSTALL_DATA} $? $@
+${TOP_LIBDIR}/perl/ukernel.so: setup_perllib PERLUAFS/ukernel.so
+       ${INSTALL_DATA} PERLUAFS/ukernel.so $@
+
+${TOP_LIBDIR}/perl/AFS/ukernel.pm: setup_perllib PERLUAFS/ukernel.pm
+       ${INSTALL_DATA} PERLUAFS/ukernel.pm $@
+
+LIBUAFS_BUILD_PERL: ${TOP_LIBDIR}/perl/ukernel.so ${TOP_LIBDIR}/perl/AFS/ukernel.pm
 
 webinstall: all \
        ${TOP_LIBDIR}/$(LIBAFSWEB) \
@@ -90,7 +101,7 @@ linktest: UAFS/$(LIBUAFS)
                $(LDFLAGS_roken) $(LDFLAGS_hcrypto) -o linktest \
                ${srcdir}/linktest.c $(COMMON_INCLUDE) -DUKERNEL \
                UAFS/$(LIBUAFS) ${TOP_LIBDIR}/libcmd.a \
-               ${TOP_LIBDIR}/libafsutil.a \
+               ${TOP_LIBDIR}/libafsutil.a $(TOP_LIBDIR)/libopr.a \
                $(LIB_hcrypto) $(LIB_roken) $(LIB_crypt) $(TEST_LIBS) $(XLIBS)
 
 CRULE1=        $(CC) $(COMMON_INCLUDE) $(CPPFLAGS_roken) $(OPTF) -DKERNEL $(LIBJUAFS_FLAGS) $(CFLAGS) -c $?
@@ -158,6 +169,8 @@ UAFSOBJ = \
        $(UOBJ)/afsd_uafs.o \
        $(UOBJ)/xdr.o \
        $(UOBJ)/xdr_afsuuid.o \
+       $(UOBJ)/xdr_update.o \
+       $(UOBJ)/xdr_refernce.o \
        $(UOBJ)/afs_uuid.o \
        $(UOBJ)/assert.o \
        $(UOBJ)/osi_vnodeops.o \
@@ -188,6 +201,9 @@ UAFSOBJ = \
        $(UOBJ)/rx_stats.o \
        $(UOBJ)/rx_packet.o \
        $(UOBJ)/rx_conncache.o \
+       $(UOBJ)/rx_call.o \
+       $(UOBJ)/rx_conn.o \
+       $(UOBJ)/rx_peer.o \
        $(UOBJ)/xdr_rx.o \
        $(UOBJ)/Kvldbint.cs.o \
        $(UOBJ)/Kvldbint.xdr.o \
@@ -212,6 +228,7 @@ UAFSOBJ = \
        $(UOBJ)/authcon.o \
        $(UOBJ)/cellconfig.o \
        $(UOBJ)/keys.o \
+       $(UOBJ)/realms.o \
        $(UOBJ)/client.o \
        $(UOBJ)/acfg_errors.o \
        $(UOBJ)/kaaux.o \
@@ -301,6 +318,8 @@ PICUAFSOBJ = \
        $(PICOBJ)/afsd_uafs.o \
        $(PICOBJ)/xdr.o \
        $(PICOBJ)/xdr_afsuuid.o \
+       $(PICOBJ)/xdr_update.o \
+       $(PICOBJ)/xdr_refernce.o \
        $(PICOBJ)/afs_uuid.o \
        $(PICOBJ)/assert.o \
        $(PICOBJ)/osi_vnodeops.o \
@@ -331,6 +350,9 @@ PICUAFSOBJ = \
        $(PICOBJ)/rx_stats.o \
        $(PICOBJ)/rx_packet.o \
        $(PICOBJ)/rx_conncache.o \
+       $(PICOBJ)/rx_call.o \
+       $(PICOBJ)/rx_conn.o \
+       $(PICOBJ)/rx_peer.o \
        $(PICOBJ)/xdr_rx.o \
        $(PICOBJ)/Kvldbint.cs.o \
        $(PICOBJ)/Kvldbint.xdr.o \
@@ -355,6 +377,7 @@ PICUAFSOBJ = \
        $(PICOBJ)/authcon.o \
        $(PICOBJ)/cellconfig.o \
        $(PICOBJ)/keys.o \
+       $(PICOBJ)/realms.o \
        $(PICOBJ)/client.o \
        $(PICOBJ)/acfg_errors.o \
        $(PICOBJ)/kaaux.o \
@@ -444,6 +467,8 @@ AFSWEBOBJ = \
        $(WEBOBJ)/afsd_uafs.o \
        $(WEBOBJ)/xdr.o \
        $(WEBOBJ)/xdr_afsuuid.o \
+       $(WEBOBJ)/xdr_update.o \
+       $(WEBOBJ)/xdr_refernce.o \
        $(WEBOBJ)/afs_uuid.o \
        $(WEBOBJ)/assert.o \
        $(WEBOBJ)/osi_vnodeops.o \
@@ -474,6 +499,9 @@ AFSWEBOBJ = \
        $(WEBOBJ)/rx_stats.o \
        $(WEBOBJ)/rx_packet.o \
        $(WEBOBJ)/rx_conncache.o \
+       $(WEBOBJ)/rx_call.o \
+       $(WEBOBJ)/rx_conn.o \
+       $(WEBOBJ)/rx_peer.o \
        $(WEBOBJ)/xdr_rx.o \
        $(WEBOBJ)/Kvldbint.cs.o \
        $(WEBOBJ)/Kvldbint.xdr.o \
@@ -499,6 +527,7 @@ AFSWEBOBJ = \
        $(WEBOBJ)/cellconfig.o \
        $(WEBOBJ)/client.o \
        $(WEBOBJ)/keys.o \
+       $(WEBOBJ)/realms.o \
        $(WEBOBJ)/acfg_errors.o \
        $(WEBOBJ)/kaaux.o \
        $(WEBOBJ)/kalocalcell.o \
@@ -613,6 +642,9 @@ AFSWEBOBJKRB = \
        $(WEBOBJ)/rx_stats.o \
        $(WEBOBJ)/rx_packet.o \
        $(WEBOBJ)/rx_conncache.o \
+       $(WEBOBJ)/rx_call.o \
+       $(WEBOBJ)/rx_conn.o \
+       $(WEBOBJ)/rx_peer.o \
        $(WEBOBJ)/xdr_rx.o \
        $(WEBOBJ)/Kvldbint.cs.o \
        $(WEBOBJ)/Kvldbint.xdr.o \
@@ -638,6 +670,7 @@ AFSWEBOBJKRB = \
        $(WEBOBJ)/cellconfig.o \
        $(WEBOBJ)/client.o \
        $(WEBOBJ)/keys.o \
+       $(WEBOBJ)/realms.o \
        $(WEBOBJ)/acfg_errors.o \
        $(WEBOBJ)/kaaux.o \
        $(WEBOBJ)/kalocalcell.o \
@@ -725,6 +758,8 @@ JUAFSOBJ = \
        $(JUAFS)/afsd_uafs.o \
        $(JUAFS)/xdr.o \
        $(JUAFS)/xdr_afsuuid.o \
+       $(JUAFS)/xdr_update.o \
+       $(JUAFS)/xdr_refernce.o \
        $(JUAFS)/afs_uuid.o \
        $(JUAFS)/assert.o \
        $(JUAFS)/osi_vnodeops.o \
@@ -754,6 +789,9 @@ JUAFSOBJ = \
        $(JUAFS)/rx_stats.o \
        $(JUAFS)/rx_packet.o \
        $(JUAFS)/rx_conncache.o \
+       $(JUAFS)/rx_call.o \
+       $(JUAFS)/rx_conn.o \
+       $(JUAFS)/rx_peer.o \
        $(JUAFS)/xdr_rx.o \
        $(JUAFS)/Kvldbint.cs.o \
        $(JUAFS)/Kvldbint.xdr.o \
@@ -778,6 +816,7 @@ JUAFSOBJ = \
        $(JUAFS)/authcon.o \
        $(JUAFS)/cellconfig.o \
        $(JUAFS)/keys.o \
+       $(JUAFS)/realms.o \
        $(JUAFS)/client.o \
        $(JUAFS)/acfg_errors.o \
        $(JUAFS)/kaaux.o \
@@ -955,6 +994,12 @@ $(UOBJ)/rx_packet.o: $(TOP_SRC_RX)/rx_packet.c
        $(CRULE1)
 $(UOBJ)/rx_conncache.o: $(TOP_SRCDIR)/rx/rx_conncache.c
        $(CRULE1)
+$(UOBJ)/rx_call.o: $(TOP_SRCDIR)/rx/rx_call.c
+       $(CRULE1)
+$(UOBJ)/rx_conn.o: $(TOP_SRCDIR)/rx/rx_conn.c
+       $(CRULE1)
+$(UOBJ)/rx_peer.o: $(TOP_SRCDIR)/rx/rx_peer.c
+       $(CRULE1)
 $(UOBJ)/xdr_rx.o: $(TOP_SRC_RX)/xdr_rx.c
        $(CRULE1)
 $(UOBJ)/xdr_int32.o: $(TOP_SRC_RX)/xdr_int32.c
@@ -969,10 +1014,14 @@ $(UOBJ)/afsd_uafs.o: $(TOP_SRC_AFS)/UKERNEL/afsd_uafs.c
        $(CRULE1)
 $(UOBJ)/afs_uuid.o: $(TOP_SRCDIR)/util/uuid.c
        $(CRULE1) -o afs_uuid.o
-$(UOBJ)/assert.o: $(TOP_SRCDIR)/util/assert.c
+$(UOBJ)/assert.o: $(TOP_SRCDIR)/opr/assert.c
        $(CRULE1)
 $(UOBJ)/xdr_afsuuid.o: $(TOP_SRCDIR)/rx/xdr_afsuuid.c
        $(CRULE1)
+$(UOBJ)/xdr_update.o: $(TOP_SRCDIR)/rx/xdr_update.c
+       $(CRULE1)
+$(UOBJ)/xdr_refernce.o: $(TOP_SRCDIR)/rx/xdr_refernce.c
+       $(CRULE1)
 $(UOBJ)/xdr.o: $(TOP_SRCDIR)/rx/xdr.c
        $(CRULE1)
 $(UOBJ)/osi_vnodeops.o: $(TOP_SRC_AFS)/UKERNEL/osi_vnodeops.c
@@ -1059,7 +1108,9 @@ $(UOBJ)/cellconfig.o: $(TOP_SRCDIR)/auth/cellconfig.c
        $(CRULE1)
 $(UOBJ)/keys.o: $(TOP_SRCDIR)/auth/keys.c
        $(CRULE1)
-$(UOBJ)/casestrcpy.o: $(TOP_SRCDIR)/util/casestrcpy.c
+$(UOBJ)/casestrcpy.o: $(TOP_SRCDIR)/opr/casestrcpy.c
+       $(CRULE1)
+$(UOBJ)/realms.o: $(TOP_SRCDIR)/auth/realms.c
        $(CRULE1)
 $(UOBJ)/dirpath.o: $(TOP_SRCDIR)/util/dirpath.c
        $(CRULE1)
@@ -1248,6 +1299,12 @@ $(PICOBJ)/rx_packet.o: $(TOP_SRC_RX)/rx_packet.c
        $(CRULEPIC)
 $(PICOBJ)/rx_conncache.o: $(TOP_SRCDIR)/rx/rx_conncache.c
        $(CRULEPIC)
+$(PICOBJ)/rx_call.o: $(TOP_SRCDIR)/rx/rx_call.c
+       $(CRULEPIC)
+$(PICOBJ)/rx_conn.o: $(TOP_SRCDIR)/rx/rx_conn.c
+       $(CRULEPIC)
+$(PICOBJ)/rx_peer.o: $(TOP_SRCDIR)/rx/rx_peer.c
+       $(CRULEPIC)
 $(PICOBJ)/xdr_rx.o: $(TOP_SRC_RX)/xdr_rx.c
        $(CRULEPIC)
 $(PICOBJ)/xdr_int32.o: $(TOP_SRC_RX)/xdr_int32.c
@@ -1262,10 +1319,14 @@ $(PICOBJ)/afsd_uafs.o: $(TOP_SRC_AFS)/UKERNEL/afsd_uafs.c
        $(CRULEPIC)
 $(PICOBJ)/afs_uuid.o: $(TOP_SRCDIR)/util/uuid.c
        $(CRULEPIC) -o afs_uuid.o
-$(PICOBJ)/assert.o: $(TOP_SRCDIR)/util/assert.c
+$(PICOBJ)/assert.o: $(TOP_SRCDIR)/opr/assert.c
        $(CRULEPIC)
 $(PICOBJ)/xdr_afsuuid.o: $(TOP_SRCDIR)/rx/xdr_afsuuid.c
        $(CRULEPIC)
+$(PICOBJ)/xdr_update.o: $(TOP_SRCDIR)/rx/xdr_update.c
+       $(CRULEPIC)
+$(PICOBJ)/xdr_refernce.o: $(TOP_SRCDIR)/rx/xdr_refernce.c
+       $(CRULEPIC)
 $(PICOBJ)/xdr.o: $(TOP_SRCDIR)/rx/xdr.c
        $(CRULEPIC)
 $(PICOBJ)/osi_vnodeops.o: $(TOP_SRC_AFS)/UKERNEL/osi_vnodeops.c
@@ -1352,7 +1413,9 @@ $(PICOBJ)/cellconfig.o: $(TOP_SRCDIR)/auth/cellconfig.c
        $(CRULEPIC)
 $(PICOBJ)/keys.o: $(TOP_SRCDIR)/auth/keys.c
        $(CRULEPIC)
-$(PICOBJ)/casestrcpy.o: $(TOP_SRCDIR)/util/casestrcpy.c
+$(PICOBJ)/casestrcpy.o: $(TOP_SRCDIR)/opr/casestrcpy.c
+       $(CRULEPIC)
+$(PICOBJ)/realms.o: $(TOP_SRCDIR)/auth/realms.c
        $(CRULEPIC)
 $(PICOBJ)/dirpath.o: $(TOP_SRCDIR)/util/dirpath.c
        $(CRULEPIC)
@@ -1543,6 +1606,12 @@ $(WEBOBJ)/rx_packet.o: $(TOP_SRC_RX)/rx_packet.c
        $(CRULE2)
 $(WEBOBJ)/rx_conncache.o: $(TOP_SRCDIR)/rx/rx_conncache.c
        $(CRULE2)
+$(WEBOBJ)/rx_call.o: $(TOP_SRCDIR)/rx_rx_call.c
+       $(CRULE2)
+$(WEBOBJ)/rx_conn.o: $(TOP_SRCDIR)/rx/rx_conn.c
+       $(CRULE2)
+$(WEBOBJ)/rx_peer.o: $(TOP_SRCDIR)/rx/rx_peer.c
+       $(CRULE2)
 $(WEBOBJ)/xdr_rx.o: $(TOP_SRC_RX)/xdr_rx.c
        $(CRULE2)
 $(WEBOBJ)/afs_usrops.o: $(TOP_SRC_AFS)/UKERNEL/afs_usrops.c
@@ -1553,10 +1622,14 @@ $(WEBOBJ)/afsd_uafs.o: $(TOP_SRC_AFS)/UKERNEL/afsd_uafs.c
        $(CRULE2)
 $(WEBOBJ)/afs_uuid.o: $(TOP_SRCDIR)/util/uuid.c
        $(CRULE2) -o afs_uuid.o
-$(WEBOBJ)/assert.o: $(TOP_SRCDIR)/util/assert.c
+$(WEBOBJ)/assert.o: $(TOP_SRCDIR)/opr/assert.c
        $(CRULE1)
 $(WEBOBJ)/xdr_afsuuid.o: $(TOP_SRCDIR)/rx/xdr_afsuuid.c
        $(CRULE2)
+$(WEBOBJ)/xdr_update.o: $(TOP_SRCDIR)/rx/xdr_update.c
+       $(CRULE2)
+$(WEBOBJ)/xdr_refernce.o: $(TOP_SRCDIR)/rx/xdr_refernce.c
+       $(CRULE2)
 $(WEBOBJ)/xdr.o: $(TOP_SRCDIR)/rx/xdr.c
        $(CRULE2)
 $(WEBOBJ)/osi_vnodeops.o: $(TOP_SRC_AFS)/UKERNEL/osi_vnodeops.c
@@ -1654,8 +1727,10 @@ $(WEBOBJ)/cellconfig.o: $(TOP_SRCDIR)/auth/cellconfig.c
        $(CRULE2)
 $(WEBOBJ)/keys.o: $(TOP_SRCDIR)/auth/keys.c
        $(CRULE2)
-$(WEBOBJ)/casestrcpy.o: $(TOP_SRCDIR)/util/casestrcpy.c
+$(WEBOBJ)/casestrcpy.o: $(TOP_SRCDIR)/opr/casestrcpy.c
        $(CRULE1)
+$(WEBOBJ)/realms.o: $(TOP_SRCDIR)/auth/realms.c
+       $(CRULE2)
 $(WEBOBJ)/dirpath.o: $(TOP_SRCDIR)/util/dirpath.c
        $(CRULE1)
 $(WEBOBJ)/fileutil.o: $(TOP_SRCDIR)/util/fileutil.c
@@ -1842,6 +1917,12 @@ $(JUAFS)/rx_packet.o: $(TOP_SRC_RX)/rx_packet.c
        $(CRULE1)
 $(JUAFS)/rx_conncache.o: $(TOP_SRCDIR)/rx/rx_conncache.c
        $(CRULE1)
+$(JUAFS)/rx_call.o: $(TOP_SRC_RX)/rx_call.c
+       $(CRULE1)
+$(JUAFS)/rx_conn.o: $(TOP_SRC_RX)/rx_conn.c
+       $(CRULE1)
+$(JUAFS)/rx_peer.o: $(TOP_SRC_RX)/rx_peer.c
+       $(CRULE1)
 $(JUAFS)/xdr_rx.o: $(TOP_SRC_RX)/xdr_rx.c
        $(CRULE1)
 $(JUAFS)/xdr_int64.o: $(TOP_SRC_RX)/xdr_int64.c
@@ -1854,10 +1935,14 @@ $(JUAFS)/afsd_uafs.o: $(TOP_SRC_AFS)/UKERNEL/afsd_uafs.c
        $(CRULE1)
 $(JUAFS)/afs_uuid.o: $(TOP_SRCDIR)/util/uuid.c
        $(CRULE1) -o afs_uuid.o
-$(JUAFS)/assert.o: $(TOP_SRCDIR)/util/assert.c
+$(JUAFS)/assert.o: $(TOP_SRCDIR)/opr/assert.c
        $(CRULE1)
 $(JUAFS)/xdr_afsuuid.o: $(TOP_SRCDIR)/rx/xdr_afsuuid.c
        $(CRULE1)
+$(JUAFS)/xdr_update.o: $(TOP_SRCDIR)/rx/xdr_update.c
+       $(CRULE1)
+$(JUAFS)/xdr_refernce.o: $(TOP_SRCDIR)/rx/xdr_refernce.c
+       $(CRULE1)
 $(JUAFS)/xdr.o: $(TOP_SRCDIR)/rx/xdr.c
        $(CRULE1)
 $(JUAFS)/osi_vnodeops.o: $(TOP_SRC_AFS)/UKERNEL/osi_vnodeops.c
@@ -1942,7 +2027,9 @@ $(JUAFS)/cellconfig.o: $(TOP_SRCDIR)/auth/cellconfig.c
        $(CRULE1)
 $(JUAFS)/keys.o: $(TOP_SRCDIR)/auth/keys.c
        $(CRULE1)
-$(JUAFS)/casestrcpy.o: $(TOP_SRCDIR)/util/casestrcpy.c
+$(JUAFS)/casestrcpy.o: $(TOP_SRCDIR)/opr/casestrcpy.c
+       $(CRULE1)
+$(JUAFS)/realms.o: $(TOP_SRCDIR)/auth/realms.c
        $(CRULE1)
 $(JUAFS)/dirpath.o: $(TOP_SRCDIR)/util/dirpath.c
        $(CRULE1)
@@ -1983,23 +2070,52 @@ $(JUAFS)/xdr_mem.o: $(TOP_SRC_RX)/xdr_mem.c
 $(JUAFS)/xdr_len.o: $(TOP_SRC_RX)/xdr_len.c
        $(CRULE1)
 
-clean:
-       -$(RM) -rf UAFS* JUAFS* AFSWEB* nsapi afs afsint config rx
-       -$(RM) -f  h net netinet rpc ufs machine inet nfs sys linktest $(AFS_OS_CLEAN)
+$(PERLUAFS)/ukernel.pm: $(PERLUAFS)/ukernel_swig_perl.c
+$(PERLUAFS)/ukernel_swig_perl.c: ${srcdir}/ukernel_swig.i
+       mkdir -p $(PERLUAFS)
+       $(SWIG) -perl5 -o $@ ${srcdir}/ukernel_swig.i
 
+$(PERLUAFS)/ukernel_swig_perl.o: $(PERLUAFS)/ukernel_swig_perl.c
+       ${CC} -c ${CPPFLAGS} ${UAFS_CFLAGS} $(SWIG_PERL_CFLAGS) \
+               $(COMMON_INCLUDE) -DUKERNEL $(SHLIB_CFLAGS) -o $@ \
+               $(PERLUAFS)/ukernel_swig_perl.c
 
-install: UAFS/$(LIBUAFS) JUAFS/$(LIBJUAFS) UAFS.pic/libuafs_pic.a
+$(PERLUAFS)/ukernel.so: $(PERLUAFS)/ukernel_swig_perl.o UAFS.pic/libuafs_pic.a
+       ${TOP_OBJDIR}/src/config/shlib-build -d $(srcdir) -p -f $@ -- \
+               $(SWIG_PERL_LDFLAGS) $(LDFLAGS) \
+               $(PERLUAFS)/ukernel_swig_perl.o \
+               UAFS.pic/libuafs_pic.a ${TOP_LIBDIR}/libcmd_pic.a \
+               ${TOP_LIBDIR}/libafsutil_pic.a \
+               $(TOP_LIBDIR)/libopr.a \
+               $(LDFLAGS_roken) $(LDFLAGS_hcrypto) $(LIB_hcrypto) \
+               $(LIB_roken) $(LIB_crypt) \
+               $(XLIBS)
+
+clean:
+       -$(RM) -rf UAFS* JUAFS* AFSWEB* PERLUAFS nsapi afsd afs afsint config rx
+       -$(RM) -rf h
+       -$(RM) -f linktest $(AFS_OS_CLEAN)
+
+install: UAFS/$(LIBUAFS) JUAFS/$(LIBJUAFS) UAFS.pic/libuafs_pic.a \
+               @LIBUAFS_BUILD_PERL@
        ${INSTALL} -d ${DESTDIR}${libdir}
        ${INSTALL_DATA} UAFS/$(LIBUAFS) ${DESTDIR}${libdir}/$(LIBUAFS)
        ${INSTALL_DATA} JUAFS/$(LIBJUAFS) ${DESTDIR}${libdir}/$(LIBJUAFS)
        ${INSTALL_DATA} UAFS.pic/libuafs_pic.a ${DESTDIR}${libdir}/libuafs_pic.a
+       if [ "x$(LIBUAFS_BUILD_PERL)" != "x" ] ; then \
+               ${INSTALL} -d ${DESTDIR}${libdir}/perl; \
+               ${INSTALL} -d ${DESTDIR}${libdir}/perl/AFS; \
+               ${INSTALL_DATA} PERLUAFS/ukernel.so ${DESTDIR}${libdir}/perl/ukernel.so; \
+               ${INSTALL_DATA} PERLUAFS/ukernel.pm ${DESTDIR}${libdir}/perl/AFS/ukernel.pm; \
+       fi;
 
 dest: $(TOP_INCDIR)/afs/param.h $(TOP_INCDIR)/afs/stds.h \
                $(TOP_INCDIR)/afs/afs_sysnames.h \
                $(TOP_INCDIR)/afs/afs_stats.h \
                $(TOP_SRCDIR)/afs/sysincludes.h \
                $(TOP_SRCDIR)/afs/UKERNEL/afs_usrops.h \
-               UAFS/$(LIBUAFS) JUAFS/$(LIBJUAFS) UAFS.pic/libuafs_pic.a
+               UAFS/$(LIBUAFS) JUAFS/$(LIBJUAFS) UAFS.pic/libuafs_pic.a \
+               @LIBUAFS_BUILD_PERL@
        ${INSTALL} -d ${DEST}/root.perf/include/afs
        ${INSTALL} -d ${DEST}/root.perf/lib
        ${INSTALL_DATA} $(TOP_INCDIR)/afs/param.h \
@@ -2010,13 +2126,19 @@ dest: $(TOP_INCDIR)/afs/param.h $(TOP_INCDIR)/afs/stds.h \
                ${DEST}/root.perf/include/afs/afs_sysnames.h
        ${INSTALL_DATA} $(TOP_INCDIR)/afs/afs_stats.h \
                ${DEST}/root.perf/include/afs/afs_stats.h
-       ${INSTALL_DATA} $(TOP_SRCDIR)/afs/sysincludes.h \
+       ${INSTALL_DATA} $(TOP_SRCDIR)/afs/UKERNEL/sysincludes.h \
                ${DEST}/root.perf/include/afs/sysincludes.h
        ${INSTALL_DATA} $(TOP_SRCDIR)/afs/UKERNEL/afs_usrops.h \
                ${DEST}/root.perf/include/afs/afs_usrops.h
        ${INSTALL_DATA} UAFS/$(LIBUAFS) ${DEST}/root.perf/lib/$(LIBUAFS)
        ${INSTALL_DATA} JUAFS/$(LIBJUAFS) ${DEST}/root.perf/lib/$(LIBJUAFS)
        ${INSTALL_DATA} UAFS.pic/libuafs_pic.a ${DEST}/root.perf/lib/libuafs_pic.a
+       if [ "x$(LIBUAFS_BUILD_PERL)" != "x" ] ; then \
+               ${INSTALL} -d ${DEST}/root.perf/lib/perl; \
+               ${INSTALL} -d ${DEST}/root.perf/lib/perl/AFS; \
+               ${INSTALL_DATA} PERLUAFS/ukernel.so ${DEST}/root.perf/lib/perl/ukernel.so; \
+               ${INSTALL_DATA} PERLUAFS/ukernel.pm ${DEST}/root.perf/lib/perl/AFS/ukernel.pm; \
+       fi;
 
 #
 # Common directory and other build targets
@@ -2033,16 +2155,13 @@ JUAFS:
 AFSWEB:
        mkdir -p $@
 
-setup_common:
-       -$(RM) -f h net netinet rpc ufs nfs machine sys inet nsapi afsd
-       -ln -s ${ISYSROOT}/usr/include/sys h
-       -ln -s ${ISYSROOT}/usr/include/net net
-       -ln -s ${ISYSROOT}/usr/include/netinet netinet
-       -ln -s ${ISYSROOT}/usr/include/rpc rpc
-       -ln -s ${ISYSROOT}/usr/include/sys sys
-       -ln -s ${ISYSROOT}/usr/include/nfs nfs
-       -ln -s ${ISYSROOT}/usr/include/inet inet
-       -ln -s ${ISYSROOT}/usr/include/ufs ufs
+h: $(TOP_SRC_AFS)/*.c $(TOP_SRC_VNOPS)/*.c $(TOP_SRC_RX)/*.c
+       -$(RM) -rf h
+       @TOP_SRCDIR@/libuafs/make_h_tree $(TOP_SRC_AFS) $(TOP_SRC_VNOPS) \
+               $(TOP_SRC_RX)
+
+setup_common: h
+       -$(RM) -f nsapi afsd
        -ln -s $(TOP_SRCDIR)/afsd afsd
        -ln -s $(NS_INCL) nsapi
 
@@ -2078,7 +2197,7 @@ UAFS.pic/libuafs_pic.a: setup_picuafs
 
 JUAFS/$(LIBJUAFS): setup_juafs
        cd JUAFS && \
-       $(MAKE) $(LIBJUAFS) DESTDIR=${DESTDIR} LIBJUAFS_FLAGS=-DAFS_WEB_ENHANCEMENTS && \
+       $(MAKE) $(LIBJUAFS) DESTDIR=${DESTDIR} LIBJUAFS_FLAGS=&& \
        $(RANLIB) $(LIBJUAFS)
 
 AFSWEB/$(LIBAFSWEB): setup_nsafs