# Makefile
#	by Tim O'Malley
#	modified by Mike Bauer
#	Rewritten by Chris Caldwell (NDA 6/14/93)
#
# Theoretically, you need only type type "make install_client" on a client
# machine and "make install_both" on the server.
#
# The following are the only interesting targets:
#	servers			Build all the server software
#	clients			Build all the client software
#	all			Build all of the software
#	install_server		Install all the server software
#	install_client		Install all the client software
#	install_both		Install server and client software
#	databases.compressed	Create compressed tar archive of all of the
#				databases to move elsewhere
#	databases		Take compressed tar archive created elsewhere
#				and setup databases on this system
#
# These are needed for the client.
BINDIR=/usr/local/inquir
MANPAGE=/usr/local/man/manl/inquir.l
CLIENT_BINS=inquir-backend
EMACS_IFACE=/usr/local/emacs/lisp/inquir.el

# These are needed for the server
DBDIR=/var/spool/inquir
SRVDIR=/usr/local/inquir
TCPMUXD_SERVERS = /etc/tcpmuxd.servers
MMDF=/var/spool/mmdf/table
HOST=mintaka
FILELOCS=-DMMDF=\"${MMDF}\" -DINQD=\"${DBDIR}\" -DSRVDIR=\"${SRVDIR}\"
SERVER_BINS=inquir inquir-update-krb uid_grant uid_put useraliasbuild \
	uiddbase_cvt inquir_cvt topuid_cvt tcpmuxd hakinq forward-builder

# This is the set of programs to use
CC=gcc

# These are general
KLIBDIR=-L/usr/local/athena/lib
KLIBS=-lkrb -ldes
LIBDIR=
LIBS=
INCDIRS=-I/usr/local/athena/include
CFLAGS = -g -fpcc-struct-return $(INCDIRS)
LDFLAGS = $(LIBDIR) $(LIBS)

OWNER=inquir
#OWNER=100
GROUP=mmdf
#GROUP=9

BINS=${SERVER_BINS} ${CLIENT_BINS}

all:
			make servers
			make clients

servers:
			@echo ""
			@echo "[ Building server code ]"
			@echo ""
			@make ${SERVER_BINS}

clients:
			@echo ""
			@echo "[ Building client code ]"
			@echo ""
			@make ${CLIENT_BINS}

inquir:			inquir.o error.o stringfrobs.o getline.o strings.o
			$(CC) $(LDFLAGS) -o $@ inquir.o error.o stringfrobs.o \
			getline.o strings.o

inquir-update-krb:	inquir-update-krb.o strings.o
			$(CC) $(KLIBDIR) -o $@ \
			    inquir-update-krb.o strings.o $(KLIBS)

uid_grant:		uid_grant.o strings.o
			$(CC) $(LDFLAGS) -o $@ uid_grant.o strings.o

uid_put:		uid_put.o strings.o
			$(CC) $(LDFLAGS) -o $@ uid_put.o strings.o

useraliasbuild:		useraliasbuild.o strings.o
			$(CC) $(LDFLAGS) -o $@ useraliasbuild.o strings.o

uiddbase_cvt:		cvt.o uiddbase_cvt.o strings.o
			$(CC) $(LDFLAGS) -o $@ \
			    cvt.o uiddbase_cvt.o strings.o -ldbm

inquir_cvt:		cvt.o inquir_cvt.o strings.o
			$(CC) ${LDFLAGS} -o $@ \
			    cvt.o inquir_cvt.o strings.o -ldbm

topuid_cvt:		cvt.o topuid_cvt.o strings.o
			$(CC) ${LDFLAGS} -o $@ \
			    cvt.o topuid_cvt.o strings.o -ldbm

tcpmuxd:		tcpmuxd.c
			$(CC) $(CFLAGS) -o $@ \
			    -DTCPMUX_DIRECTORY=\"${TCPMUXD_SERVERS}/\" \
			    ${LDFLAGS} tcpmuxd.c

strings.o:		strings.c
			$(CC) $(CFLAGS) -c $(FILELOCS) $*.c

inquir-backend: 	inquir-backend.o
			$(CC) -o $@ $(KLIBDIR) inquir-backend.o $(KLIBS)

inquir-backend.o:	inquir-backend.c
			$(CC) -c $(CFLAGS) '-DINQUIR_HOST="$(HOST)"' \
			    -DINQUIR_KRB inquir-backend.c

install:
			@echo "You must type type either:"
			@echo "    make install_server"
			@echo "or"
			@echo "    make install_client"
			@echo "or"
			@echo "    make install_both"
			@false

install_both:		install_server install_client

install_server:		servers
	@echo ""
	@echo "[ Installing ${DBDIR} and ${SRVDIR} ]"
	@echo ""
	[ -d ${SRVDIR} ] || mkdir -p ${SRVDIR}
	cd $(SRVDIR) ; rm -f $(SERVER_BINS) README
	/lib/cpp -P -DSRVDIR=${SRVDIR} -DTCPMUXD_SERVERS=${TCPMUXD_SERVERS} \
	    -DDBDIR=${DBDIR} < README > $(SRVDIR)/README
	cp $(SERVER_BINS) $(SRVDIR)
	[ -d $(DBDIR) ] || mkdir -p $(DBDIR)
	cp $(SRVDIR)/README ${DBDIR}
	touch $(DBDIR)/inquire.bin.pag $(DBDIR)/inquire.bin.dir
	touch $(DBDIR)/uiddbase.bin.pag $(DBDIR)/uiddbase.bin.dir
	cp config $(DBDIR)
	/etc/chown ${OWNER} $(SRVDIR)/* $(DBDIR)/* $(DBDIR)/.
	chgrp ${GROUP} $(SRVDIR)/* $(DBDIR)/* $(DBDIR)/.
	@echo ""
	@echo "[ Setting up ${TCPMUXD_SERVERS} ]"
	@echo ""
	[ -d ${TCPMUXD_SERVERS} ] || mkdir -p ${TCPMUXD_SERVERS}
	rm -f $(TCPMUXD_SERVERS)/inquir-*
	ln -s $(SRVDIR)/inquir $(TCPMUXD_SERVERS)/inquir-config
	ln -s $(SRVDIR)/inquir $(TCPMUXD_SERVERS)/inquir-update
	ln -s $(SRVDIR)/inquir $(TCPMUXD_SERVERS)/inquir-lookup
	ln -s $(SRVDIR)/inquir-update-krb $(TCPMUXD_SERVERS)/inquir-update-krb
	ln -s $(SRVDIR)/uid_grant $(TCPMUXD_SERVERS)/inquir-new-uid
	chmod ug=sxrw $(TCPMUXD_SERVERS)/*
	@if grep '^tcpmux' /etc/inetd.conf >/dev/null ; then : ; else \
	    echo "tcpmux stream tcp nowait root ${SRVDIR}/tcpmuxd" \
		>>/etc/inetd.conf ;\
	    echo "/etc/inetd.conf updated." ; \
	fi
	@if grep '^tcpmux' /etc/services >/dev/null ; then : ; else \
	    echo "tcpmux 1/tcp # rf-1078" >>/etc/services ;\
	    echo "/etc/services updated." ; \
	fi
	@echo
	@if [ ! -s ${DBDIR}/inquire.bin.pag ] ; then \
	    echo "Please create ${DBDIR}/inquire.bin with inquir_cvt." ; \
	    echo "" ; \
	fi
	@if [ ! -s ${DBDIR}/uiddbase.bin.pag ] ; then \
	    echo "Please create ${DBDIR}/uiddbase.bin with uiddbase_cvt." ; \
	    echo "" ; \
	fi

install_client:	clients
	@echo ""
	@echo "[ Installing ${BINDIR} ]"
	@echo ""
	[ -d ${BINDIR} ] || mkdir -p ${BINDIR}
	cd $(BINDIR) ; rm -f $(CLIENT_BINS)
	cp $(CLIENT_BINS) $(BINDIR)
	cd $(BINDIR) ; chmod 755 $(CLIENT_BINS)
	cp inquir.man ${MANPAGE}
	cp inquir.el ${EMACS_IFACE}
	mv $(CLIENT_BINS) /usr/local/bin
	chmod 644 ${MANPAGE} ${EMACS_IFACE}
	cd ${BINDIR}; chown ${OWNER} ${MANPAGE} ${EMACS_IFACE} ${CLIENT_BINS}
	cd ${BINDIR}; chgrp ${GROUP} ${MANPAGE} ${EMACS_IFACE} ${CLIENT_BINS}

    
databases:	inquir_cvt uiddbase_cvt topuid_cvt
	uncompress < databases.compressed | tar xvf -
	cat /dev/null > $(DBDIR)/inquire.bin.dir
	cat /dev/null > $(DBDIR)/inquire.bin.pag
	cat /dev/null > $(DBDIR)/uiddbase.bin.dir
	cat /dev/null > $(DBDIR)/uiddbase.bin.pag
	./inquir_cvt -b $(DBDIR)/inquire.bin < inquire.ascii
	./uiddbase_cvt -b $(DBDIR)/uiddbase.bin < uiddbase.ascii
	./topuid_cvt -b $(DBDIR)/topuid < topuid.ascii
	cp config $(DBDIR)/config
	chown ${OWNER} ${DBDIR}/*
	chgrp ${GROUP} ${DBDIR}/*
	: rm -f config inquire.ascii uiddbase.ascii topuid.ascii

databases.compressed:	inquir_cvt uiddbase_cvt topuid_cvt
	[ -f $(DBDIR)/config ]
	cp $(DBDIR)/config config
	./inquir_cvt -a $(DBDIR)/inquire.bin > inquire.ascii
	./uiddbase_cvt -a $(DBDIR)/uiddbase.bin > uiddbase.ascii
	./topuid_cvt -a $(DBDIR)/topuid > topuid.ascii
	tar cf - inquire.ascii uiddbase.ascii topuid.ascii config | \
	    compress > databases.compressed
	: rm -f config inquire.ascii uiddbase.ascii topuid.ascii

.c.o:
	$(CC) $(CFLAGS) -c $*.c

.SUFFIXES:		.pl

.pl:
	rm -f $@
	sed -e 's+SRVDIR+${SRVDIR}+' -e 's+DBDIR+${DBDIR}+' -e 's+BINDIR+${BINDIR}+' < $@.pl > $@
	chmod 755 $@
 
clean:
	rm -f core *~ *.bak *.o *.ascii databases.compressed $(BINS)
