P_BINARIES = UNDEFINED
OWNER   = pfs
GROUP   = pfs
INSTALL = install

CC      = gcc
CFLAGS  = -g
F_CC	= ${CFLAGS} -c 
F_CCL   = $(CFLAGS)
F_CPP	= ${P_INC} ${MACHDEF} -DDEBUG 


# For Kerberos.
K_INC   =
KRB_LIBS=

MAKE	= make

PASTHRU = P_BINARIES=${P_BINARIES} INSTALL="${INSTALL}" OWNER=${OWNER} \
	  GROUP=${GROUP} CC=${CC} F_CC="${F_CC}" F_CCL="${F_CCL}" \
	  K_INC="${K_INC}" MAKE=${MAKE} KRB_LIBS="${KRB_LIBS}" LIBS="${LIBS}" \
	  MACHDEF="${MACHDEF}"

P_INC	= -I../include

# libraries should be relative to this dir
PFS_LIB	= ../lib/pfs/libpfs.a
FIL_LIB  = ../lib/filters/libfilter.a  
CMP_LIB  = ../lib/pcompat/libpcompat.a
RDP_LIB  = ../lib/ardp/libardp.a

CFILES	= \
	p__vfsetup.c \
	vls.c \
	set_atr.c \
	psrvchat.c \
	pstatus.c \
	list_acl.c \
	set_acl.c \
	als.c \
	aq_query.c \
	cfp.c \
	vcopydir.c \
	vget.c \
	gen_vfsetup.c \
	newpsite.c \
	newvs.c \
	archie.c \
	pfs.c \
	pkl.c \
	p__vcd.c \
	vln.c \
	vmkdir.c \
	vrm.c 

OBJECTS	= \
	p__vfsetup.o \
	pstatus.o \
	vls.o \
	set_atr.o \
	psrvchat.o \
	als.o \
	aq_query.o \
	cfp.o \
	list_acl.o \
	vcopydir.o \
	vget.o \
	gen_vfsetup.o \
	newpsite.o \
	newvs.o \
	archie.o \
	pfs.o \
	pkl.o \
	set_acl.o \
	p__vcd.o \
	vln.o \
	vmkdir.o \
	vrm.o 


NORMALPROGS = p__vfsetup vls set_atr pstatus list_acl set_acl p__vcd psrvchat vln vmkdir vrm pfs 

PROGS	= $(NORMALPROGS) vget

OTHERPROGS = pkl newvs newpsite als cfp vcopydir

CODE	= ${CFILES} Makefile

all:	${PROGS} vcache.dir vfsetup.source vfsetup.profil

vcache.dir:
	cd vcache ; \
	${MAKE} ${PASTHRU} all 2>&1 | sed -e '/^[a-z_\/]*\.[ch]:/s/^/vcache\//'

install:
	-for i in ${PROGS}; do \
	    (${INSTALL} -o ${OWNER} -g ${GROUP} $$i ${P_BINARIES}/$$i); \
    	done 
	-${INSTALL} -o ${OWNER} -g ${GROUP} vfsetup.source ${P_BINARIES}/vfsetup.source 
	-${INSTALL} -o ${OWNER} -g ${GROUP} vfsetup.profil ${P_BINARIES}/vfsetup.profil 
	cd vcache ; \
	${MAKE} ${PASTHRU} install; 

clean:
	rm -f a.out core *~ tags TAGS ${OBJECTS} ${PROGS} $(OTHERPROGS) *.o makedep vfsetup.source vfsetup.profil gen_vfsetup
	cd vcache ; \
	${MAKE} clean; 

hide:
	-mkdir .hide
	-mv -f a.out core *~ tags TAGS ${OBJECTS} ${PROGS} $(OTHERPROGS) *.o makedep vfsetup.source vfsetup.profil gen_vfsetup .hide
	cd vcache ; ${MAKE} hide

unhide:
	-mv .hide/* .hide/.??* .
	-rmdir .hide

src:	${CODE}

${CODE}:
	co -q $@;

${OBJECTS}:
	${CC} ${F_CC} ${F_CPP} $*.c

${NORMALPROGS} ${OTHERPROGS}: ${PFS_LIB} ${FIL_LIB} ${RDP_LIB}
	${CC} ${F_CCL} -o $@ $@.o ${PFS_LIB} ${FIL_LIB} ${PFS_LIB} ${RDP_LIB} ${KRB_LIBS} ${LIBS}


vget: ${PFS_LIB} ${FIL_LIB} ${RDP_LIB} ../lib/pcompat/pmap_nfs.o
	${CC} ${F_CCL} -o $@ $@.o ../lib/pcompat/pmap_nfs.o ${PFS_LIB} ${FIL_LIB} ${PFS_LIB} ${RDP_LIB} ${KRB_LIBS} ${LIBS}


archie: ${PFS_LIB} ${FIL_LIB} aq_query.o archie.o
	${CC} ${F_CCL} -o $@ $@.o aq_query.o ${PFS_LIB} ${FIL_LIB} ${PFS_LIB} ${KRB_LIBS} ${RDP_LIB} ${LIBS}

vfsetup.source:	gen_vfsetup
	./gen_vfsetup csh > vfsetup.source

vfsetup.profil:	gen_vfsetup
	./gen_vfsetup sh > vfsetup.profil

gen_vfsetup:	gen_vfsetup.o 
	${CC} -o gen_vfsetup gen_vfsetup.o

# Hand-maintained DEPENDENCIES.  My script is not clever enough to produce
# these in an automated fashion.

als: als.o
cfp: cfp.o
list_acl: list_acl.o
newpsite: newpsite.o
newvs: newvs.o
pfs: pfs.o
pkl: pkl.o
psrvchat: psrvchat.o
pstatus: pstatus.o
set_acl: set_acl.o
set_atr: set_atr.o
p__vcd: p__vcd.o
vcopydir: vcopydir.o
p__vfsetup: p__vfsetup.o
vget: vget.o
vls: vls.o
vln: vln.o
vmkdir: vmkdir.o
vrm: vrm.o


# Dependencies
p__vfsetup.o : \
  ../include/psite.h ../include/pfs.h ../include/ardp.h \
  ../include/list_macros.h ../include/pcompat.h ../include/perrno.h ../include/pmachine.h 
vls.o : \
  ../include/pfs.h ../include/ardp.h \
  ../include/list_macros.h ../include/perrno.h 
set_atr.o : \
  ../include/pfs.h ../include/ardp.h \
  ../include/list_macros.h ../include/perrno.h 
psrvchat.o : \
  ../include/ardp.h \
  ../include/list_macros.h ../include/pfs.h ../include/perrno.h ../include/pprot.h \
  ../include/pcompat.h 
pstatus.o : \
  ../include/pfs.h ../include/ardp.h \
  ../include/list_macros.h ../include/perrno.h 
list_acl.o : \
  ../include/pfs.h ../include/ardp.h \
  ../include/list_macros.h ../include/perrno.h ../include/pmachine.h 
set_acl.o : \
  ../include/pfs.h ../include/ardp.h \
  ../include/list_macros.h ../include/perrno.h ../include/pprot.h \
  ../include/pmachine.h 
als.o : \
  ../include/pfs.h ../include/ardp.h \
  ../include/list_macros.h \
  ../include/pcompat.h ../include/perrno.h 
aq_query.o : \
  ../include/pfs.h ../include/ardp.h \
  ../include/list_macros.h ../include/perrno.h ../include/pmachine.h ../include/archie.h 
cfp.o : \
  ../include/ardp.h \
  ../include/list_macros.h ../include/pfs.h ../include/perrno.h ../include/pmachine.h 
vcopydir.o : ../include/psite.h \
  ../include/pfs.h ../include/ardp.h \
  ../include/list_macros.h ../include/perrno.h 
vget.o : \
  ../include/pfs.h ../include/ardp.h \
  ../include/list_macros.h ../include/psite.h ../include/perrno.h ../include/pcompat.h \
  ../include/pmachine.h 
gen_vfsetup.o : \
  ../include/psite.h ../include/pmachine.h 
newpsite.o : \
  ../include/pfs.h ../include/ardp.h \
  ../include/list_macros.h ../include/perrno.h ../include/psite.h ../include/pmachine.h 
newvs.o : ../include/psite.h \
  ../include/pfs.h ../include/ardp.h \
  ../include/list_macros.h ../include/perrno.h 
archie.o : \
  ../include/ardp.h \
  ../include/list_macros.h ../include/pfs.h ../include/perrno.h ../include/archie.h 
pfs.o : \
  ../include/pfs.h ../include/ardp.h \
  ../include/list_macros.h ../include/pcompat.h ../include/pmachine.h 
pkl.o : \
  ../include/ardp.h \
  ../include/list_macros.h ../include/pfs.h ../include/perrno.h ../include/pprot.h \
  ../include/pcompat.h 
p__vcd.o : \
  ../include/pfs.h ../include/ardp.h \
  ../include/list_macros.h ../include/perrno.h ../include/pmachine.h 
vln.o : \
  ../include/ardp.h \
  ../include/list_macros.h ../include/pfs.h ../include/perrno.h ../include/pmachine.h 
vmkdir.o : \
  ../include/pfs.h ../include/ardp.h \
  ../include/list_macros.h ../include/perrno.h 
vrm.o : \
  ../include/perrno.h 
