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}


# For Kerberos.
K_INC    =
KRB_LIBS =

MAKE	= make

# MORE_USER_PROGS is a subset of OTHERPROGS that are compiled by default.
# You can set this in the top-level Makefile and it will be passed down.
MORE_USER_PROGS =

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 \
	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 \
	padmin.c \
	ppw.c \
	p__vcd.c \
	vln.c \
	vmkdir.c \
	vrm.c

OBJECTS	= \
	p__vfsetup.o \
	pstatus.o \
	vls.o \
	set_atr.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 \
	padmin.o \
	ppw.o \
	p__vcd.o \
	set_acl.o \
	vln.o \
	vmkdir.o \
	vrm.o


# These are the programs which follow the default rule for making and 
# which are installed by default.
# 'archie' is also installed by default, but it has its own special rules 
# for making.
PROGS	= p__vfsetup vls set_atr pstatus list_acl set_acl p__vcd padmin vln vmkdir vrm pfs vget ppw als 

# These programs also follow the default making rules, but are not 
# compiled or installed by default.  NEWVS and NEWPSITE are only of interest 
# to site administrators; CFP and VCOPYDIR are experimental.
OTHERPROGS = newvs newpsite cfp vcopydir

CODE	= ${CFILES} Makefile

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

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

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

install:
	-for i in ${PROGS} archie ${MORE_USER_PROGS}; do \
	    (${INSTALL} -o ${OWNER} -g ${GROUP} $$i ${P_BINARIES}/$$i); \
	done 
	-rm -f $(P_BINARIES)/pkl 
	-ln $(P_BINARIES)/padmin $(P_BINARIES)/pkl
	-${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; 
	cd menu ; \
	${MAKE} ${PASTHRU} install; 

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

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

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

src:	${CODE}

${CODE}:
	co -q $@;

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

${PROGS} ${OTHERPROGS}: ${PFS_LIB} ${FIL_LIB} ${RDP_LIB}
	${CC} ${F_CCL} -o $@ $@.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
padmin: padmin.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
ppw: ppw.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 
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/ardp.h \
  ../include/list_macros.h ../include/pfs.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 
padmin.o : \
  ../include/ardp.h \
  ../include/list_macros.h ../include/pfs.h ../include/perrno.h ../include/pprot.h \
  ../include/pcompat.h 
ppw.o : \
  ../include/ardp.h \
  ../include/list_macros.h ../include/psite.h ../include/pfs.h ../include/pprot.h \
  ../include/perrno.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 
