SHELL = /bin/sh
MAJORVERSION =	2
MINORVERSION =	2
PATCHLEVEL =	e3
#
CONF =	Config
ZCONFIG = ./zmailer.conf
ZDEPEND = Dependencies
TARGETS	= router/router scheduler/scheduler scheduler/mailq \
	smtpserver/smtpserver transports/-ok compat/rmail/rmail \
	compat/sendmail/sendmail
MAKE=	make

all:	include/libsupport.h $(TARGETS)

it:	clean depend config
# We just made new makefiles, so we have to re-invoke make
	$(MAKE) $(MFLAGS) all

so:	install

config:	$(ZCONFIG)
	. $(ZCONFIG) ; cp $(ZCONFIG) $$ZCONFIG ; \
	echo '/^#define.*ZMAILER_ENV_FILE/s:[ 	]*".*":	"'$$ZCONFIG'":' > eddep
	echo 'w' >> eddep
	/bin/ed - include/mail.h < eddep
	rm eddep
	cd proto ; $(MAKE) $(MFLAGS) config

clean:	neat
	cd compat ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd doc ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd lib ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd libc ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd libmalloc ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd libsh ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd proto ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd router ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd scheduler ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd smtpserver ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd ssl ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd transports ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
#	cd utils ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean

dirs:
	cd proto ; $(MAKE) $(MFLAGS) dirs

install:	all dirs
	cd compat ; $(MAKE) $(MFLAGS) install
	cd proto ; $(MAKE) $(MFLAGS) install
	cd router ; $(MAKE) $(MFLAGS) install
	cd scheduler ; $(MAKE) $(MFLAGS) install
	cd smtpserver ; $(MAKE) $(MFLAGS) install
	cd transports ; $(MAKE) $(MFLAGS) install

#
#
#

router/router: makefiles
	cd router ; $(MAKE) $(MFLAGS) router

scheduler/scheduler: makefiles
	cd scheduler ; $(MAKE) $(MFLAGS) scheduler

scheduler/mailq: makefiles
	cd scheduler ; $(MAKE) $(MFLAGS) mailq

smtpserver/smtpserver: makefiles
	cd smtpserver ; $(MAKE) $(MFLAGS) smtpserver

compat/rmail/rmail: makefiles
	cd compat ; $(MAKE) $(MFLAGS) rmail/rmail

compat/sendmail/sendmail: makefiles
	cd compat ; $(MAKE) $(MFLAGS) sendmail/sendmail

lib/libz.a: makefiles lib/*.c
	cd lib ; $(MAKE) $(MFLAGS)

libc/libc.a: makefiles libc/*.c
	cd libc ; $(MAKE) $(MFLAGS)

transports/libta/libta.a: makefiles transports/libta/*.c
	cd transports/libta ; $(MAKE) $(MFLAGS)

transports/-ok:
	cd transports ; $(MAKE) $(MFLAGS)

neat:
	-rm -f $(ZCONFIG) $(CONF).sed eddep makedep Makefile.bak *.tar

scrub:	clean
	-rm -f make.log make.out make.err* errs
	rm -f include/libsupport.h
	rm -f include/rfc822.entry
	@echo 'typedef enum { nilHeaderSemantics = -1 } HeaderSemantics;' > include/rfc822.entry
	rm -f `find . \( -name revision -o -name version.c -o -name Makefile.bak \) -print`

dist:
	@echo 'Did you run "make scrub" first?' ; sleep 2
	find . -type d -o -type f -print | \
	egrep -v -e '/(private[/$$]|RCS[/$$]|README.toronto|TODO$$|ID$$|.*\.o$$|fc[/$$])' | \
	CWD=`pwd` sed -e /\.tar.*/d -e "s/^\./`sh -c 'basename \`pwd\`'`/" | \
	sort -t/ | egrep -v '/include/(arpa|netdb.h|resolv.h)' > MANIFEST
	cp MANIFEST /tmp
	(cd .. ; tar cvf - `cat /tmp/MANIFEST` ) > zmailer.tar
	rm -f MANIFEST /tmp/MANIFEST

client:	clean config compat/sendmail/sendmail scheduler/mailq smtpserver/smtpserver

install-client: compat/sendmail/sendmail scheduler/mailq smtpserver/smtpserver
	cd compat/sendmail ; $(MAKE) $(MFLAGS) install
	cd proto ; $(MAKE) $(MFLAGS) clientdirs
	cd scheduler ; $(MAKE) $(MFLAGS) install-mailq
	cd smtpserver ; $(MAKE) $(MFLAGS) install

include/libsupport.h: $(CONF).sed
	@$(MAKE) $(MFLAGS) makefiles

$(CONF).sed:	$(CONF) $(ZCONFIG) $(ZDEPEND) bin/mklibsupport Makefile
	sed -n -e 's:^\([^ 	]*\)=[ 	]*\(.*\):s~^\1=.*~&~:p' < $(CONF) > $@
	. $(ZCONFIG) ; bin/mklibsupport $(CONF) $(ZDEPEND) < hostenv/$$HOSTENV

$(ZCONFIG):	$(CONF)
	(echo '# Do not edit this file, instead edit '`pwd`'/Config' ; \
	sed -n  -e '/^[^ 	]*=[ 	]*[^#].*/!d' \
		-e 's:^\([^ 	]*\)=[ 	]*\([^#].*\):\1=\2:' \
		-e 's:=\([^# 	]*[ 	][^#]*\)\(.*\):="\1"\2:' \
		-e 's:\([ 	][ 	]*\)":"\1:' \
		-e 's:"\([^ 	]*\)":\1:' -e 's:""::' -e p < $(CONF)) > $@

force:
	
version.c: force
	@sh -c ': $${USER=$${LOGNAME-root}} ; \
	REVISION=`cat revision 2>/dev/null || (echo 0 | tee revision)` ; \
	HOSTNAME=`(/bin/hostname || /bin/uname) 2>/dev/null` ; \
	case "$$REVISION" in \
	[0-9]|[0-9][0-9]|[0-9][0-9][0-9]) \
		REVISION=`expr $$REVISION + 1` ;; \
	*)	REVISION=0 ;; \
	esac ; \
	case "${PATCHLEVEL}" in \
	0)	VERSION="${MAJORVERSION}.${MINORVERSION}" ;; \
	*)	VERSION="${MAJORVERSION}.${MINORVERSION}.${PATCHLEVEL}" ;; \
	esac ; \
	echo $$REVISION > revision ; \
	exec > version.c ; \
	echo "char *Version = \"$${VERSION} #$${REVISION}: `date`\";"; \
	echo "char *CC_user = \"$${USER}@$${HOSTNAME}\";"; \
	echo "char *CC_pwd = \"`pwd`\";" '

depend:
	find . \( -name Makefile -o -name makefile \) -print | \
		grep -v /private/ > eddep
	sed -e 's:^\./::' -e '/^Makefile/d' -e '/private/d' < eddep | \
	    bin/bunchup | \
	    sed -e 's/^/makefiles: /' > makedep
	echo >> makedep
	sed -e 's:^\./::' -e '/^Makefile/d' -e 's/$$/:	$${CONF}.sed/' -e x \
	    -e 's/.*/	mv $$@ $$@.bak ; sed -f $${CONF}.sed < $$@.bak > $$@/' \
	    -e x -e G < eddep >> makedep
	echo '/^# DO NOT DELETE THIS LINE/+1,$$d' >eddep
	echo '$$r makedep' >>eddep
	echo 'w' >>eddep
	cp Makefile Makefile.bak
	/bin/ed - Makefile < eddep
	rm eddep makedep

# DO NOT DELETE THIS LINE -- It is used by 'make depend' to update this file
makefiles: compat/rmail/Makefile compat/sendmail/Makefile compat/Makefile
makefiles: doc/Makefile lib/Makefile libc/Makefile libmalloc/splay/Makefile
makefiles: libmalloc/Makefile libsh/Makefile proto/Makefile
makefiles: router/libdb/Makefile router/Makefile scheduler/Makefile
makefiles: smtpserver/Makefile ssl/Makefile support/mh4/Makefile
makefiles: support/texi2roff/Makefile support/nfslock/Makefile
makefiles: support/rlockd/Makefile support/sdbm/makefile
makefiles: transports/errormail/Makefile transports/libta/Makefile
makefiles: transports/mailbox/Makefile transports/sm/Makefile
makefiles: transports/smtp/Makefile transports/hold/Makefile transports/Makefile

compat/rmail/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
compat/sendmail/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
compat/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
doc/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
lib/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
libc/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
libmalloc/splay/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
libmalloc/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
libsh/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
proto/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
router/libdb/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
router/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
scheduler/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
smtpserver/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
ssl/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
support/mh4/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
support/texi2roff/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
support/nfslock/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
support/rlockd/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
support/sdbm/makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
transports/errormail/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
transports/libta/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
transports/mailbox/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
transports/sm/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
transports/smtp/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
transports/hold/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
transports/Makefile:	${CONF}.sed
	mv $@ $@.bak ; sed -f ${CONF}.sed < $@.bak > $@
