SHELL = /bin/sh
MAJORVERSION =	2
MINORVERSION =	99
PATCHLEVEL =	21
#
CONF =	Config
SITECONF = SiteConfig
ZCONFIG = /etc/zmailer.conf
ZCONF   = ./zmailer.Config
ZDEPEND = Dependencies
TARGETS	= router/router scheduler-old/scheduler-old 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:	$(ZCONF)
	. $(ZCONF) ; \
	sed -e 's:^\(#define.*ZMAILER_ENV_FILE[ 	]*"\).*\("\):\1'$$ZCONFIG'\2:' < include/mail.h > include/mail.h.new
	mv include/mail.h include/mail.h.old
	mv include/mail.h.new include/mail.h
	cd proto ; $(MAKE) $(MFLAGS) config PZCONFIG="../$(ZCONF)"

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 libauth ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd libsh ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd libs ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd proto ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean  PZCONFIG="../$(ZCONF)"
	cd router ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd scheduler ; $(MAKE) $(MFLAGS) MAKE=$(MAKE) clean
	cd scheduler-old ; $(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 PZCONFIG="../$(ZCONF)"

install-bin:	# all
	. $(ZCONF) ; cp $(ZCONF) $$ZCONFIG ; chmod 644 $$ZCONFIG
	cd compat ; $(MAKE) $(MFLAGS) install
	cd router ; $(MAKE) $(MFLAGS) install
	cd scheduler ; $(MAKE) $(MFLAGS) install
	cd scheduler-old ; $(MAKE) $(MFLAGS) install
	cd smtpserver ; $(MAKE) $(MFLAGS) install
	cd transports ; $(MAKE) $(MFLAGS) install
	cd libc ; $(MAKE) $(MFLAGS) install

install:	dirs # all
	. $(ZCONF) ; cp $(ZCONF) $$ZCONFIG ; chmod 644 $$ZCONFIG
	cd proto ; $(MAKE) $(MFLAGS) install  PZCONFIG="../$(ZCONF)"
	cd compat ; $(MAKE) $(MFLAGS) install
	cd router ; $(MAKE) $(MFLAGS) install
	cd scheduler ; $(MAKE) $(MFLAGS) install
	cd scheduler-old ; $(MAKE) $(MFLAGS) install
	cd smtpserver ; $(MAKE) $(MFLAGS) install
	cd transports ; $(MAKE) $(MFLAGS) install
	cd libc ; $(MAKE) $(MFLAGS) install
	
#
#
#

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

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

scheduler-old/scheduler-old: makefiles
	cd scheduler-old ; $(MAKE) $(MFLAGS) all

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

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

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

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

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

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

libauth/libauth.a: makefiles libauth/authuser.c libauth/authuser.h
	cd libauth; $(MAKE) $(MFLAGS)

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

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


makesync:
	t=`find . -name Makefile -print`; for x in $$t; do /bin/cp -p $$x $$x.in;done
	rm Makefile.in

neat:
	-rm -f $(ZCONF) $(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
	rm -f `find . \( -name \*~ -o -name revision -o -name version.c -o -name Makefile.bak \) -print|egrep -v 'libmalloc/version.c'`

scrub-obsolete-tail:
	# No null entry at all, let it be generated into proper form
	# when real processing goes thru..
	# @echo 'typedef enum { nilHeaderSemantics = -1 } HeaderSemantics;' > include/rfc822.entry

dist:
	@echo 'Did you run "make scrub" first?' ; sleep 2
	find . -type d -o -type f -print | \
	  egrep -v -e '/(private[/$$]|RCS[/$$]|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 /tmp/MANIFEST #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  PZCONFIG="../$(ZCONF)"
	cd scheduler ; $(MAKE) $(MFLAGS) install-mailq
	cd smtpserver ; $(MAKE) $(MFLAGS) install

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

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

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

force:
	
version.c: force Makefile
	@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 *VersionNumb = \"$${VERSION} #$${REVISION}\";"; \
	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/.*/	-sed -f $${CONF}.sed < $$@.in > $$@.new \&\& mv $$@.new $$@ /' \
	    -e x -e G < eddep >> makedep
	awk 'BEGIN{stop=0;}/^# DO NOT DELETE THIS LINE/{stop=1;}{if (stop==0) {print}}' < Makefile > Makefile.new
	echo '# DO NOT DELETE THIS LINE -- It is used by 'make depend' to update this file' >> Makefile.new
	cat makedep >> Makefile.new
	mv Makefile Makefile.bak
	mv Makefile.new Makefile
	rm eddep makedep

# DO NOT DELETE THIS LINE -- It is used by make depend to update this file
makefiles: utils/makendbm/Makefile compat/Makefile compat/rmail/Makefile
makefiles: compat/sendmail/Makefile doc/Makefile doc/design/Makefile
makefiles: lib/Makefile libauth/Makefile libc/Makefile libmalloc/Makefile
makefiles: libmalloc/arena/Makefile libmalloc/splay/Makefile libs/Makefile
makefiles: libsh/Makefile man/Makefile proto/Makefile router/Makefile
makefiles: router/libdb/Makefile scheduler/Makefile smtpserver/Makefile
makefiles: ssl/Makefile support/bitnet/Makefile
makefiles: support/bitnet/namesfilter/Makefile support/mh4/Makefile
makefiles: support/nfslock/Makefile support/rlockd/Makefile
makefiles: support/texi2roff/Makefile support/vacation/Makefile
makefiles: transports/Makefile transports/errormail/Makefile
makefiles: transports/hold/Makefile transports/libta/Makefile
makefiles: transports/mailbox/Makefile transports/sm/Makefile
makefiles: transports/smtp/Makefile scheduler-old/Makefile

utils/makendbm/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
compat/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
compat/rmail/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
compat/sendmail/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
doc/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
doc/design/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
lib/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
libauth/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
libc/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
libmalloc/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
libmalloc/arena/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
libmalloc/splay/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
libs/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
libsh/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
man/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
proto/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
router/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
router/libdb/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
scheduler/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
smtpserver/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
ssl/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
support/bitnet/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
support/bitnet/namesfilter/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
support/mh4/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
support/nfslock/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
support/rlockd/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
support/texi2roff/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
support/vacation/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
transports/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
transports/errormail/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
transports/hold/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
transports/libta/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
transports/mailbox/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
transports/sm/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
transports/smtp/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
scheduler-old/Makefile:	${CONF}.sed
	-sed -f ${CONF}.sed < $@.in > $@.new && mv $@.new $@ 
