diff --git a/src/afs/FBSD/osi_vnodeops.c b/src/afs/FBSD/osi_vnodeops.c
index 5be9ad0..311b5a9 100644
--- a/src/afs/FBSD/osi_vnodeops.c
+++ b/src/afs/FBSD/osi_vnodeops.c
@@ -1590,7 +1590,10 @@ afs_vop_advlock(ap)
 
     AFS_GLOCK();
     error =
-	afs_lockctl(VTOAFS(ap->a_vp), ap->a_fl, ap->a_op, &cr, (int)ap->a_id);
+	afs_lockctl(VTOAFS(ap->a_vp),
+		ap->a_fl,
+		ap->a_op, &cr,
+		(int)(intptr_t)ap->a_id);	/* XXX: no longer unique! */
     AFS_GUNLOCK();
     return error;
 }
diff --git a/src/libafs/Makefile.common.in b/src/libafs/Makefile.common.in
index 55c6eb8..d5a1231 100644
--- a/src/libafs/Makefile.common.in
+++ b/src/libafs/Makefile.common.in
@@ -47,8 +47,8 @@ COMMON_INCLUDE = -I. -I.. -I../nfs \
 
 .c.o:
 	$(CC) $(COMMON_INCLUDE) $(CFLAGS) $(CFLAGS-$(@)) $(KERN_DBG) -c $<
-CRULE_NOOPT=	$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(CFLAGS) $(CFLAGS-$(@)) -o $@ -c $?
-CRULE_OPT=	$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(KERN_OPTMZ) $(CFLAGS) $(CFLAGS-$@) -o $@ -c $?
+CRULE_NOOPT=	$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(CFLAGS) $(CFLAGS-$(@)) -o $@ -c
+CRULE_OPT=	$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(KERN_OPTMZ) $(CFLAGS) $(CFLAGS-$@) -o $@ -c
 
 system:	all
 
@@ -262,147 +262,147 @@ AFSPAGOBJS = \
 # Compilation rules
 # These files are to be optimized
 base64.o: $(TOP_SRCDIR)/util/base64.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/util/base64.c
 afs_atomlist.o: $(TOP_SRCDIR)/util/afs_atomlist.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/util/afs_atomlist.c
 afs_lhash.o: $(TOP_SRCDIR)/util/afs_lhash.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/util/afs_lhash.c
 afs_analyze.o: $(TOP_SRC_AFS)/afs_analyze.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_analyze.c
 afs_axscache.o: $(TOP_SRC_AFS)/afs_axscache.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_axscache.c
 afs_buffer.o: $(TOP_SRC_AFS)/afs_buffer.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_buffer.c
 afs_bypasscache.o: $(TOP_SRC_AFS)/afs_bypasscache.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_bypasscache.c
 afs_cell.o: $(TOP_SRC_AFS)/afs_cell.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_cell.c
 afs_conn.o: $(TOP_SRC_AFS)/afs_conn.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_conn.c
 afs_dcache.o: $(TOP_SRC_AFS)/afs_dcache.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_dcache.c
 afs_disconnected.o: $(TOP_SRC_AFS)/afs_disconnected.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_disconnected.c
 afs_dynroot.o: 	$(TOP_SRC_AFS)/afs_dynroot.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_dynroot.c
 afs_error.o: $(TOP_SRC_AFS)/afs_error.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_error.c
 afs_init.o: $(TOP_SRC_AFS)/afs_init.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_init.c
 afs_mariner.o: $(TOP_SRC_AFS)/afs_mariner.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_mariner.c
 afs_osidnlc.o: $(TOP_SRC_AFS)/afs_osidnlc.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_osidnlc.c
 afs_osi.o: 	$(TOP_SRC_AFS)/afs_osi.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_osi.c
 afs_osi_alloc.o: $(TOP_SRC_AFS)/afs_osi_alloc.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_osi_alloc.c
 afs_osi_pag.o: $(TOP_SRC_AFS)/afs_osi_pag.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_osi_pag.c
 afs_osi_uio.o: $(TOP_SRC_AFS)/afs_osi_uio.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_osi_uio.c
 afs_osi_vget.o: $(TOP_SRC_AFS)/afs_osi_vget.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_osi_vget.c
 afs_osi_vm.o: 	$(TOP_SRC_AFS)/afs_osi_vm.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_osi_vm.c
 afs_segments.o: $(TOP_SRC_AFS)/afs_segments.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_segments.c
 afs_server.o: $(TOP_SRC_AFS)/afs_server.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_server.c
 afs_tokens.o: $(TOP_SRC_AFS)/afs_tokens.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_tokens.c
 afs_user.o: $(TOP_SRC_AFS)/afs_user.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_user.c
 afs_util.o: $(TOP_SRC_AFS)/afs_util.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_util.c
 afs_warn.o: $(TOP_SRC_AFS)/afs_warn.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_warn.c
 afs_vcache.o: $(TOP_SRC_AFS)/afs_vcache.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_vcache.c
 afs_vnop_access.o: $(TOP_SRC_VNOPS)/afs_vnop_access.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_access.c
 afs_vnop_attrs.o: $(TOP_SRC_VNOPS)/afs_vnop_attrs.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_attrs.c
 afs_vnop_create.o: $(TOP_SRC_VNOPS)/afs_vnop_create.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_create.c
 afs_vnop_dirops.o: $(TOP_SRC_VNOPS)/afs_vnop_dirops.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_dirops.c
 afs_vnop_fid.o: $(TOP_SRC_VNOPS)/afs_vnop_fid.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_fid.c
 afs_vnop_flock.o: $(TOP_SRC_VNOPS)/afs_vnop_flock.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_flock.c
 afs_vnop_link.o: $(TOP_SRC_VNOPS)/afs_vnop_link.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_link.c
 afs_vnop_lookup.o: $(TOP_SRC_VNOPS)/afs_vnop_lookup.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_lookup.c
 afs_vnop_open.o: $(TOP_SRC_VNOPS)/afs_vnop_open.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_open.c
 afs_vnop_read.o: $(TOP_SRC_VNOPS)/afs_vnop_read.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_read.c
 afs_vnop_readdir.o: $(TOP_SRC_VNOPS)/afs_vnop_readdir.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_readdir.c
 afs_vnop_remove.o: $(TOP_SRC_VNOPS)/afs_vnop_remove.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_remove.c
 afs_vnop_rename.o: $(TOP_SRC_VNOPS)/afs_vnop_rename.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_rename.c
 afs_vnop_strategy.o: $(TOP_SRC_VNOPS)/afs_vnop_strategy.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_strategy.c
 afs_vnop_symlink.o: $(TOP_SRC_VNOPS)/afs_vnop_symlink.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_symlink.c
 afs_vnop_write.o: $(TOP_SRC_VNOPS)/afs_vnop_write.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_VNOPS)/afs_vnop_write.c
 afs_volume.o: $(TOP_SRC_AFS)/afs_volume.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_AFS)/afs_volume.c
 rx_rdwr.o: $(TOP_SRC_RX)/rx_rdwr.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_RX)/rx_rdwr.c
 afs_uuid.o: $(TOP_SRCDIR)/util/uuid.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/util/uuid.c
 xdr_afsuuid.o: $(TOP_SRCDIR)/rx/xdr_afsuuid.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/rx/xdr_afsuuid.c
 xdr_mem.o: $(TOP_SRCDIR)/rx/xdr_mem.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/rx/xdr_mem.c
 xdr_len.o: $(TOP_SRCDIR)/rx/xdr_len.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/rx/xdr_len.c
 Ktoken.xdr.o: $(TOP_OBJDIR)/src/auth/Ktoken.xdr.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_OBJDIR)/src/auth/Ktoken.xdr.c
 
 # these files are not to be optimized - subject to change.
 afs_cbqueue.o: $(TOP_SRC_AFS)/afs_cbqueue.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_cbqueue.c
 afs_callback.o: $(TOP_SRC_AFS)/afs_callback.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_callback.c
 afs_chunk.o: $(TOP_SRC_AFS)/afs_chunk.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_chunk.c
 afs_daemons.o: $(TOP_SRC_AFS)/afs_daemons.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_daemons.c
 afs_dir.o: 	$(TOP_SRCDIR)/dir/dir.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/dir/dir.c
 afs_icl.o: $(TOP_SRC_AFS)/afs_icl.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_icl.c
 AFS_component_version_number.o: AFS_component_version_number.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) AFS_component_version_number.c
 afs_lock.o: $(TOP_SRC_AFS)/afs_lock.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_lock.c
 afs_memcache.o: $(TOP_SRC_AFS)/afs_memcache.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_memcache.c
 afs_pag_call.o: $(TOP_SRC_AFS)/afs_pag_call.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_pag_call.c
 afs_pag_cred.o: $(TOP_SRC_AFS)/afs_pag_cred.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_pag_cred.c
 afs_fetchstore.o: $(TOP_SRC_AFS)/afs_fetchstore.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_fetchstore.c
 afs_stat.o: $(TOP_SRC_AFS)/afs_stat.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_stat.c
 afs_syscall.o: $(TOP_SRC_AFS)/afs_syscall.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_syscall.c
 fcrypt.o: 	$(TOP_SRC_RXKAD)/fcrypt.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RXKAD)/fcrypt.c
 crypt_conn.o: $(TOP_SRC_RXKAD)/crypt_conn.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RXKAD)/crypt_conn.c
 rxkad_client.o: $(TOP_SRC_RXKAD)/rxkad_client.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RXKAD)/rxkad_client.c
 rxkad_common.o: $(TOP_SRC_RXKAD)/rxkad_common.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RXKAD)/rxkad_common.c
 
 CFLAGS-fcrypt.o = -I${TOP_SRCDIR}/rxkad -I$(TOP_OBJDIR)/src/rxkad
 CFLAGS-crypt_conn.o = -I${TOP_SRCDIR}/rxkad -I$(TOP_OBJDIR)/src/rxkad
@@ -410,249 +410,249 @@ CFLAGS-rxkad_client.o = -I${TOP_SRCDIR}/rxkad -I$(TOP_OBJDIR)/src/rxkad
 CFLAGS-rxkad_common.o = -I${TOP_SRCDIR}/rxkad -I$(TOP_OBJDIR)/src/rxkad
 
 afs_exporter.o: $(TOP_SRC_AFS)/afs_exporter.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_exporter.c
 afs_nfsclnt.o: $(TOP_SRC_AFS)/afs_nfsclnt.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_nfsclnt.c
 afs_nfsdisp.o: $(TOP_SRC_AFS)/afs_nfsdisp.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_nfsdisp.c
 rx.o: $(TOP_SRC_RX)/rx.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/rx.c
 rx_clock.o: $(TOP_SRC_RX)/rx_clock.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/rx_clock.c
 rx_event.o: $(TOP_SRC_RX)/rx_event.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/rx_event.c
 rx_globals.o: $(TOP_SRC_RX)/rx_globals.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/rx_globals.c
 rx_identity.o: $(TOP_SRC_RX)/rx_identity.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/rx_identity.c
 rx_misc.o: $(TOP_SRC_RX)/rx_misc.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/rx_misc.c
 rx_multi.o: $(TOP_SRC_RX)/rx_multi.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/rx_multi.c
 rx_null.o: $(TOP_SRC_RX)/rx_null.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/rx_null.c
 rx_opaque.o: $(TOP_SRC_RX)/rx_opaque.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRC_RX)/rx_opaque.c
 rx_getaddr.o: $(TOP_SRC_RX)/rx_getaddr.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/rx_getaddr.c
 rx_packet.o: $(TOP_SRC_RX)/rx_packet.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/rx_packet.c
 rx_stats.o: $(TOP_SRC_RX)/rx_stats.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/rx_stats.c
 xdr_rx.o: $(TOP_SRC_RX)/xdr_rx.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/xdr_rx.c
 Kcallback.ss.o: $(TOP_OBJ_FSINT)/Kcallback.ss.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_OBJ_FSINT)/Kcallback.ss.c
 rxstat.o: $(TOP_SRC_RXSTAT)/rxstat.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RXSTAT)/rxstat.c
 Kpagcb.cs.o: $(TOP_OBJ_FSINT)/Kpagcb.cs.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_OBJ_FSINT)/Kpagcb.cs.c
 Kpagcb.ss.o: $(TOP_OBJ_FSINT)/Kpagcb.ss.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_OBJ_FSINT)/Kpagcb.ss.c
 Kpagcb.xdr.o: $(TOP_OBJ_FSINT)/Kpagcb.xdr.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_OBJ_FSINT)/Kpagcb.xdr.c
 Krxstat.ss.o: $(TOP_OBJ_RXSTAT)/Krxstat.ss.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_OBJ_RXSTAT)/Krxstat.ss.c
 Krxstat.xdr.o: $(TOP_OBJ_RXSTAT)/Krxstat.xdr.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_OBJ_RXSTAT)/Krxstat.xdr.c
 Kvice.xdr.o: $(TOP_OBJ_FSINT)/Kvice.xdr.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_OBJ_FSINT)/Kvice.xdr.c
 Kvice.cs.o: $(TOP_OBJ_FSINT)/Kvice.cs.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_OBJ_FSINT)/Kvice.cs.c
 Krmtsys.xdr.o: $(TOP_OBJ_SYS)/Krmtsys.xdr.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_OBJ_SYS)/Krmtsys.xdr.c
 Krmtsys.cs.o: $(TOP_OBJ_SYS)/Krmtsys.cs.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_OBJ_SYS)/Krmtsys.cs.c
 afsaux.o: $(TOP_SRC_FSINT)/afsaux.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_FSINT)/afsaux.c
 xdr_arrayn.o: $(TOP_SRC_RX)/xdr_arrayn.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/xdr_arrayn.c
 xdr_array.o: $(TOP_SRC_RX)/xdr_array.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/xdr_array.c
 xdr_int32.o: $(TOP_SRC_RX)/xdr_int32.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/xdr_int32.c
 xdr_int64.o: $(TOP_SRC_RX)/xdr_int64.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/xdr_int64.c
 xdr.o: $(TOP_SRC_RX)/xdr.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/xdr.c
 Kvldbint.cs.o: ${TOP_OBJ_VLSERVER}/Kvldbint.cs.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) ${TOP_OBJ_VLSERVER}/Kvldbint.cs.c
 CFLAGS-Kvldbint.xdr.o= -DAFS_UUID_XG
 Kvldbint.xdr.o: ${TOP_OBJ_VLSERVER}/Kvldbint.xdr.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) ${TOP_OBJ_VLSERVER}/Kvldbint.xdr.c
 rx_kmutex.o: $(TOP_SRC_RX)/${MKAFS_OSTYPE}/rx_kmutex.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/${MKAFS_OSTYPE}/rx_kmutex.c
 rx_knet.o: $(TOP_SRC_RX)/${MKAFS_OSTYPE}/rx_knet.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/${MKAFS_OSTYPE}/rx_knet.c
 rx_kcommon.o: $(TOP_SRC_RX)/rx_kcommon.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/rx_kcommon.c
 
 # Files which do not contain NFS translator code.
 CFLAGS-afs_call.o= -DAFS_NONFSTRANS
 afs_call.o: $(TOP_SRC_AFS)/afs_call.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_call.c
 CFLAGS-afs_pioctl.o= -DAFS_NONFSTRANS
 afs_pioctl.o: $(TOP_SRC_AFS)/afs_pioctl.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_pioctl.c
 
 # NFS Translator versions of the above code.
 afs_call_nfs.o:	$(TOP_SRC_AFS)/afs_call.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_call.c
 afs_pioctl_nfs.o:	$(TOP_SRC_AFS)/afs_pioctl.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_AFS)/afs_pioctl.c
 
 # Special objects for the PAG module
 afs_pag_user.o: $(TOP_SRC_AFS)/afs_user.c
-	$(CRULE_OPT) -DAFS_PAG_MANAGER
+	$(CRULE_OPT) -DAFS_PAG_MANAGER $(TOP_SRC_AFS)/afs_user.c
 rx_pag_knet.o: $(TOP_SRC_RX)/${MKAFS_OSTYPE}/rx_knet.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRC_RX)/${MKAFS_OSTYPE}/rx_knet.c
 
 # Crypto
 md5.o: $(TOP_SRCDIR)/external/heimdal/hcrypto/md5.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/external/heimdal/hcrypto/md5.c
 
 evp.o: $(TOP_SRCDIR)/external/heimdal/hcrypto/evp.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/external/heimdal/hcrypto/evp.c
 CFLAGS-evp.o= -I$(TOP_INCDIR)/hcrypto \
 	      -DHAVE_CONFIG_H
 
 evp-algs.o: $(TOP_SRCDIR)/crypto/hcrypto/kernel/evp-algs.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/crypto/hcrypto/kernel/evp-algs.c
 CFLAGS-evp-algs.o = -I$(TOP_INCDIR)/hcrypto
 
 rand-kernel.o: $(TOP_SRCDIR)/crypto/hcrypto/kernel/rand.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/crypto/hcrypto/kernel/rand.c
 CFLAGS-rand-kernel.o = -I$(TOP_INCDIR)/hcrypto
 
 alloc-kernel.o: $(TOP_SRCDIR)/crypto/hcrypto/kernel/alloc.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/crypto/hcrypto/kernel/alloc.c
 
 aes.o: $(TOP_SRCDIR)/external/heimdal/hcrypto/aes.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/external/heimdal/hcrypto/aes.c
 
 rijndael-alg-fst.o:  $(TOP_SRCDIR)/external/heimdal/hcrypto/rijndael-alg-fst.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/external/heimdal/hcrypto/rijndael-alg-fst.c
 
 sha.o: $(TOP_SRCDIR)/external/heimdal/hcrypto/sha.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/external/heimdal/hcrypto/sha.c
 
 RFC3961_INCLUDES = -I$(TOP_SRCDIR)/crypto/rfc3961 \
 		   -I$(TOP_SRCDIR)/external/heimdal/krb5
 
 n-fold.o: $(TOP_SRCDIR)/external/heimdal/krb5/n-fold.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/external/heimdal/krb5/n-fold.c
 CFLAGS-n-fold.o = $(RFC3961_INCLUDES)
 
 crypto.o: $(TOP_SRCDIR)/external/heimdal/krb5/crypto.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/external/heimdal/krb5/crypto.c
 CFLAGS-crypto.o = $(RFC3961_INCLUDES)
 
 crypto-aes.o: $(TOP_SRCDIR)/external/heimdal/krb5/crypto-aes.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/external/heimdal/krb5/crypto-aes.c
 CFLAGS-crypto-aes.o = $(RFC3961_INCLUDES)
 
 crypto-evp.o: $(TOP_SRCDIR)/external/heimdal/krb5/crypto-evp.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/external/heimdal/krb5/crypto-evp.c
 CFLAGS-crypto-evp.o = $(RFC3961_INCLUDES)
 
 crypto-data.o: $(TOP_SRCDIR)/external/heimdal/krb5/data.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/external/heimdal/krb5/data.c
 CFLAGS-crypto-data.o = $(RFC3961_INCLUDES)
 
 crypto-keyblock.o: $(TOP_SRCDIR)/external/heimdal/krb5/keyblock.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/external/heimdal/krb5/keyblock.c
 CFLAGS-crypto-keyblock.o = $(RFC3961_INCLUDES)
 
 crypto-store-int.o: $(TOP_SRCDIR)/external/heimdal/krb5/store-int.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/external/heimdal/krb5/store-int.c
 CFLAGS-crypto-store-int.o = $(RFC3961_INCLUDES)
 
 crypto-random.o: $(TOP_SRCDIR)/crypto/rfc3961/kernel/random.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/crypto/rfc3961/kernel/random.c
 CFLAGS-crypto-random.o = -I$(TOP_SRCDIR)/crypto/kernel
 
 crypto-algs.o: $(TOP_SRCDIR)/crypto/rfc3961/kernel/algs.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/crypto/rfc3961/kernel/algs.c
 CFLAGS-crypto-algs.o = $(RFC3961_INCLUDES)
 
 crypto-copy.o: $(TOP_SRCDIR)/crypto/rfc3961/copy.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/crypto/rfc3961/copy.c
 CFLAGS-crypto-copy.o = $(RFC3961_INCLUDES)
 
 crypto-context.o: $(TOP_SRCDIR)/crypto/rfc3961/context.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/crypto/rfc3961/context.c
 CFLAGS-crypto-context.o = $(RFC3961_INCLUDES)
 
 crypto-ct.o: $(TOP_SRCDIR)/external/heimdal/roken/ct.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/external/heimdal/roken/ct.c
 CFLAGS-crypto-ct.o = $(RFC3961_INCLUDES)
 
 # Files which are specific to particular architectures/targets
 # but have common build rules. Place here instead of duplicating
 # in the per-platform Makefiles.
 osi_groups.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_groups.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_groups.c
 osi_gcpags.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_gcpags.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_gcpags.c
 osi_inode.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_inode.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_inode.c
 osi_file.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_file.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_file.c
 osi_sleep.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_sleep.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_sleep.c
 osi_misc.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_misc.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_misc.c
 CFLAGS-osi_vfsops_nfs.o= -DAFS_WRAPPER=${LIBAFS}_wrapper -DAFS_CONF_DATA=${LIBAFS}_conf_data
 osi_vfsops_nfs.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_vfsops.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_vfsops.c
 CFLAGS-osi_vfsops.o= -DAFS_NONFSTRANS -DAFS_WRAPPER=${LIBAFSNONFS}_wrapper -DAFS_CONF_DATA=${LIBAFSNONFS}_conf_data
 osi_vfsops.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_vfsops.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_vfsops.c
 osi_vm.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_vm.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_vm.c
 osi_vnodeops.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_vnodeops.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_vnodeops.c
 CFLAGS-osi_debug.o = -I${TOP_SRCDIR}/rxkad
 osi_debug.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_debug.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_debug.c
 osi_ioctl.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_ioctl.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_ioctl.c
 osi_module.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_module.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_module.c
 osi_pag_module.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_pag_module.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_pag_module.c
 osi_proc.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_proc.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_proc.c
 osi_probe.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_probe.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_probe.c
 osi_syscall.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_syscall.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_syscall.c
 osi_sysctl.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_sysctl.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_sysctl.c
 osi_flush.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_flush.s
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_flush.s
 osi_export.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_export.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_export.c
 osi_nfssrv.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_nfssrv.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_nfssrv.c
 osi_alloc.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_alloc.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_alloc.c
 osi_cred.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_cred.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_cred.c
 osi_idbg.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_idbg.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_idbg.c
 osi_config.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_config.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_config.c
 osi_timeout.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_timeout.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_timeout.c
 osi_pagecopy.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_pagecopy.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_pagecopy.c
 osi_fetchstore.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_fetchstore.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_fetchstore.c
 osi_vcache.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_vcache.c
-	$(CRULE_NOOPT)
+	$(CRULE_NOOPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_vcache.c
 osi_crypto.o: $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_crypto.c
-	$(CRULE_OPT)
+	$(CRULE_OPT) $(TOP_SRCDIR)/afs/$(MKAFS_OSTYPE)/osi_crypto.c
 
 clean:
 	-$(RM) -rf STATIC* MODLOAD* $(AFS_OS_CLEAN)
diff --git a/src/libafs/MakefileProto.DARWIN.in b/src/libafs/MakefileProto.DARWIN.in
index 322ad58..aaded80 100644
--- a/src/libafs/MakefileProto.DARWIN.in
+++ b/src/libafs/MakefileProto.DARWIN.in
@@ -94,14 +94,14 @@ include Makefile.common
 	fi \
 	lipo -create ${OBJ_ppc} ${OBJ_x86} ${OBJ_amd64} -output $@;
 
-CRULE_NOOPT_ppc=$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(CFLAGS_ppc) $(CFLAGS-$@) -o $(patsubst %.o,%.o.ppc,$@) -c $?
-CRULE_NOOPT_x86=$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(CFLAGS_x86) $(CFLAGS-$@) -o $(patsubst %.o,%.o.x86,$@) -c $?
-CRULE_NOOPT_amd64=$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(CFLAGS_amd64) $(CFLAGS-$@) -o $(patsubst %.o,%.o.amd64,$@) -c $?
+CRULE_NOOPT_ppc=$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(CFLAGS_ppc) $(CFLAGS-$@) -o $(patsubst %.o,%.o.ppc,$@) -c
+CRULE_NOOPT_x86=$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(CFLAGS_x86) $(CFLAGS-$@) -o $(patsubst %.o,%.o.x86,$@) -c
+CRULE_NOOPT_amd64=$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(CFLAGS_amd64) $(CFLAGS-$@) -o $(patsubst %.o,%.o.amd64,$@) -c
 CRULE_NOOPT=$(shell echo "${ARCH_ppc}" | grep -q -w yes && echo "${CRULE_NOOPT_ppc} && "; echo "${ARCH_x86}" | grep -q -w yes && echo "${CRULE_NOOPT_x86} && "; echo "${ARCH_amd64}" | grep -q -w yes && echo "${CRULE_NOOPT_amd64} && "; echo " lipo -create ${OBJ_ppc} ${OBJ_x86} ${OBJ_amd64} -output $@")
 
-CRULE_OPT_ppc=$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(KERN_OPTMZ) $(CFLAGS_ppc) $(CFLAGS-$@) -o $(patsubst %.o,%.o.ppc,$@) -c $? 
-CRULE_OPT_x86=$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(KERN_OPTMZ) $(CFLAGS_x86) $(CFLAGS-$@) -o $(patsubst %.o,%.o.x86,$@) -c $? 
-CRULE_OPT_amd64=$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(KERN_OPTMZ) $(CFLAGS_amd64) $(CFLAGS-$@) -o $(patsubst %.o,%.o.amd64,$@) -c $? 
+CRULE_OPT_ppc=$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(KERN_OPTMZ) $(CFLAGS_ppc) $(CFLAGS-$@) -o $(patsubst %.o,%.o.ppc,$@) -c
+CRULE_OPT_x86=$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(KERN_OPTMZ) $(CFLAGS_x86) $(CFLAGS-$@) -o $(patsubst %.o,%.o.x86,$@) -c
+CRULE_OPT_amd64=$(CC) $(COMMON_INCLUDE) $(KERN_DBG) $(KERN_OPTMZ) $(CFLAGS_amd64) $(CFLAGS-$@) -o $(patsubst %.o,%.o.amd64,$@) -c
 CRULE_OPT=$(shell echo "${ARCH_ppc}" | grep -q -w yes && echo "${CRULE_OPT_ppc} && "; echo "${ARCH_x86}" | grep -q -w yes && echo "${CRULE_OPT_x86} && "; echo "${ARCH_amd64}" | grep -q -w yes && echo "${CRULE_OPT_amd64} && ";echo "lipo -create ${OBJ_ppc} ${OBJ_x86} ${OBJ_amd64} -output $@")
 
 <all -ppc_darwin_80 -x86_darwin_80 -ppc_darwin_90 -x86_darwin_90 -x86_darwin_100 -x86_darwin_110>
diff --git a/src/libafs/MakefileProto.FBSD.in b/src/libafs/MakefileProto.FBSD.in
index 3bb4a62..5a2ff9e 100644
--- a/src/libafs/MakefileProto.FBSD.in
+++ b/src/libafs/MakefileProto.FBSD.in
@@ -7,25 +7,34 @@
 #
 srcdir=@srcdir@
 include @TOP_OBJDIR@/src/config/Makefile.config
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-
-
-# OS specific object files:
-AFS_OS_OBJS = \
-	osi_crypto.o \
-	osi_gcpags.o \
-	osi_groups.o \
-	osi_file.o \
-	osi_inode.o \
-	osi_misc.o \
-	osi_sleep.o \
-	osi_vcache.o \
-	osi_vm.o \
-	osi_vnodeops.o \
-	osi_module.o 
+
+# rx_event is miscompiled by gcc at -O0, causing panic on startup
+.if empty(${CFLAGS:M-O})
+CFLAGS+=	-O
+.endif
+
+# tell bsd.kmod.mk to build us vnode_if*
+SRCS=	vnode_if.h
+
+# We must set SRCS to include at least one .c file if we are also using
+# vnode_if.h, due to a bug in the system makefiles where the empty string
+# gets expanded to a ".o" entry in OBJS, which there is (correctly) no
+# rule to make.  For simplicity, just set this as all of what would
+# otherwise be AFS_OS_OBJS so that people have a familiar list to look for.
+#
+# OS specific "object" files:
+SRCS+= \
+	osi_crypto.c \
+	osi_gcpags.c \
+	osi_groups.c \
+	osi_file.c \
+	osi_inode.c \
+	osi_misc.c \
+	osi_sleep.c \
+	osi_vcache.c \
+	osi_vm.c \
+	osi_vnodeops.c \
+	osi_module.c
 
 #AFS_OS_NFSOBJS = \
 #	osi_vfsops_nfs.o
@@ -33,27 +42,20 @@ AFS_OS_OBJS = \
 AFS_OS_NONFSOBJS = \
 	osi_vfsops.o
 
-
 # System specific build commands and flags
 KSRC = @BSD_KERNEL_PATH@
 KBLD = @BSD_KERNEL_BUILD@
-<amd64>
-KOPTS = -fPIC -mno-red-zone
-<all>
-
-KDEFS=-Wall -nostdinc -I/usr/include -D_KERNEL -DKLD_MODULE \
-	-elf \
-<i386_fbsd_60>
-	-mno-mmx -mno-3dnow -mno-sse -mno-sse2 \
-<all>
-	-mno-align-long-strings -fno-common -ffreestanding \
-	-I${KBLD} -include opt_global.h -fno-strict-aliasing
-
-DBUG = -O2
-#DBUG = -O -g
-DEFINES= -DAFSDEBUG -DKERNEL -DAFS -DVICE -DNFS -DUFS -DINET -DQUOTA -DGETMOUNT
-CFLAGS=-I. -I.. -I${TOP_OBJDIR}/src/config ${FSINCLUDES} $(DEFINES) $(KDEFS) $(KOPTS) ${DBUG}
 
+# We are not doing very well (WARNS=2 brings in printf format type checking)
+WARNS= 1
+# We have some sketchy code that redeclares prototypes
+CWARNFLAGS+= -Wno-redundant-decls
+
+# setup for bsd.kmod.mk infrastructure
+.PATH:	${TOP_SRCDIR}/afs/FBSD
+KMODDIR=/boot/modules
+KMOD=	libafs
+SYSDIR= ${KSRC}
 
 # Name of directory to hold object files and libraries.
 KOBJ = MODLOAD
@@ -63,35 +65,29 @@ COMPDIRS = single_compdir
 INSTDIRS = single_instdir
 DESTDIRS = single_destdir
 
-include Makefile.common
-
+# The common sysincludes code needs the 'h' symlink.
+# We cannot include bsd.kmod.mk in this file directly, because it will start
+# generating headers and objects in this directory, which we want in $(KOBJ).
+# We also need the install target from bsd.kmod.mk in $(KOBJ), but the one
+# from Makefile.common in this directory.  A prime candidate for cleanup.
 setup:
 	-mkdir $(KOBJ)
 	-$(RM) $(KOBJ)/Makefile $(KOBJ)/Makefile.common
-	ln -fs ../Makefile $(KOBJ)/Makefile
-	ln -fs ../Makefile.common $(KOBJ)/Makefile.common
-	-$(RM) -f  h net netinet rpc ufs nfs  machine sys vm
-	-ln -fs ${KSRC}/net net
-	-ln -fs ${KSRC}/@HOST_CPU@/include machine
-	-ln -fs ${KSRC}/netinet netinet
-	-ln -fs ${KSRC}/nfs nfs
-<all -fbsd_71 -fbsd_72 -fbsd_72 -fbsd_73 -fbsd_74 -fbsd_80 -fbsd_81 -fbsd_82 -fbsd_90>
-	-ln -fs /usr/include/rpc rpc
-<fbsd_71 fbsd_72 fbsd_73 fbsd_74 fbsd_80 fbsd_81 fbsd_82 fbsd_90>
-	-ln -fs ${KSRC}/rpc rpc
-<all>
-	-ln -fs ${KSRC}/sys sys
-	-ln -fs ${KSRC}/ufs/ufs ufs
+	$(CP) Makefile $(KOBJ)/Makefile
+	echo ".include <bsd.kmod.mk>" >> $(KOBJ)/Makefile
+	sed -e 's/^install:/afsinstall:/' Makefile.common > $(KOBJ)/Makefile.common
+	-$(RM) -f h
 	-ln -fs ${KSRC}/sys h
-	-ln -fs ${KSRC}/vm vm
-	-touch $(KOBJ)/sec_net.h
 
+# Makefile.common sets AFSAOBJS, COMMON_INCLUDE, TOP_{SRC,OBJ}*, and the like.
+# We must live with its other pollution of targets and build rules.
+include Makefile.common
 
-depsrcs:	vnode_if.h
+# we only do the no-NFS case
+OBJS=	${AFSAOBJS} ${AFSNONFSOBJS}
 
-# Below this line are targets when in the COMMON directory:
-LIBAFS = libafsnfs.ko
-LIBAFSNONFS = libafs.ko
+DEFINES= -DAFSDEBUG -DKERNEL -DAFS -DVICE -DNFS -DUFS -DINET -DQUOTA -DGETMOUNT
+CFLAGS+= $(DEFINES) ${COMMON_INCLUDE} -I@/sys -Imachine
 
 INST_LIBAFS = ${DESTDIR}${afskerneldir}/${LIBAFS}
 INST_LIBAFSNONFS = ${DESTDIR}${afskerneldir}/${LIBAFSNONFS}
@@ -99,43 +95,12 @@ INST_LIBAFSNONFS = ${DESTDIR}${afskerneldir}/${LIBAFSNONFS}
 DEST_LIBAFS = ${DEST}/root.client/bin/${LIBAFS}
 DEST_LIBAFSNONFS = ${DEST}/root.client/bin/${LIBAFSNONFS}
 
-
-# Without this line, gmake tries to build libafs
-.PHONY: libafs
-
-# libafs:	$(LIBAFS) $(LIBAFSNONFS)
-libafs:	$(LIBAFSNONFS)
-
-install_libafs:	$(LIBAFSNONFS)
-	${INSTALL} -d ${DESTDIR}${afskerneldir}
-	${INSTALL} -m 644 $(LIBAFSNONFS) $(INST_LIBAFSNONFS)
+install_libafs:	$(LIBAFSNONFS) install
 
 dest_libafs: $(LIBAFSNONFS)
 	${INSTALL} -d ${DEST}/root.client/bin
 	${INSTALL} -m 644 $(LIBAFSNONFS) $(DEST_LIBAFSNONFS)
 
-${LIBAFS}: $(AFSAOBJS) $(AFSNFSOBJS)
-	$(LD) -r -o ${LIBAFS}.kld ${AFSAOBJS} ${AFSNFSOBJS}
-	gensetdefs ${LIBAFS}.kld
-	$(MAKE) setdef0.o setdef1.o
-	$(LD) -Bshareable -o ${LIBAFS} setdef0.o ${LIBAFS}.kld setdef1.o
-
-${LIBAFSNONFS}:  $(AFSAOBJS) $(AFSNONFSOBJS)
-	$(LD) -r -d -warn-common -o libafs.kld ${AFSAOBJS} ${AFSNONFSOBJS}
-	touch export_syms
-	awk -f ${KSRC}/conf/kmod_syms.awk libafs.kld export_syms | xargs -J% objcopy % libafs.kld
-	$(LD) -Bshareable -d -warn-common -o ${LIBAFSNONFS} libafs.kld
-
-
-# Object build rules:
-setdef0.o: setdef0.c
-	$(CRULE_NOOPT)
-setdef1.o: setdef1.c
-	$(CRULE_NOOPT)
-
-# vnode_if.h build rules:
-vnode_if.h:	${KSRC}/kern/vnode_if.src
-	awk -f ${KSRC}/tools/vnode_if.awk ${KSRC}/kern/vnode_if.src -h
-	awk -f ${KSRC}/tools/vnode_if.awk ${KSRC}/kern/vnode_if.src -q
-	awk -f ${KSRC}/tools/vnode_if.awk ${KSRC}/kern/vnode_if.src -p
-<all>
+# This is ugly, but the common infrastructure needs a libafs target.
+libafs: depend libafs.ko
+
