#/*////////////////////////////////////////////////////////////////////////
#Copyright (c) 1994 Electrotechnical Laboratry (ETL), AIST, MITI
#
#Permission to use, copy, modify, and distribute this material for any
#purpose and without fee is hereby granted, provided that the above
#copyright notice and this permission notice appear in all copies, and
#that the name of ETL not be used in advertising or publicity pertaining
#to this material without the specific, prior written permission of an
#authorized representative of ETL.
#ETL MAKES NO REPRESENTATIONS ABOUT THE ACCURACY OR SUITABILITY OF THIS
#MATERIAL FOR ANY PURPOSE.  IT IS PROVIDED "AS IS", WITHOUT ANY EXPRESS
#OR IMPLIED WARRANTIES.
#/////////////////////////////////////////////////////////////////////////
#Content-Type:	program/C; charset=US-ASCII
#Program:	Makefile for DeleGate
#Author:	Yutaka Sato <ysato@etl.go.jp>
#Description:
#History:
#	Mar.94	created
#	970105	rewriten to port to Windows
#//////////////////////////////////////////////////////////////////////#*/

#####
##### You MUST define the following ADMIN.  It MUST be the 
##### mail address of yourself or the administrator of your delegated.
#####

ADMIN = undef
ADMINPASS =

#
#
#

LFILES =	Makefile mkmkmk.c \
		sample.shio \
		version.c \
		editconf.c admin.c notify.c shutter.c \
		process.c \
		delegate.h vaddr.h vaddr.c conf.c ddi.c textconv.c \
		syslog.c log.c svstat.c \
		iotimeout.c \
		misc.c msg.c sopen.c \
		shio.c shiomain.c \
		db.c \
		hostlist.h hostlist.c cond.c \
		script.c param.h param.c env.c \
		delegated.c svport.c remote.c \
		commands.c croncom.c \
		delegate.c \
		service.h service.c svconf.c \
		filter.h filter.c \
		master.c \
		gacl.c access.c ident.c \
		lock.c ccache.c cache.c distrib.c \
		ipno.c \
		inets.c uns.c rident.c \
		utmpident.c \
		inetd.c \
		thruwayd.c dget.c urlfind.c durl.c \
		mount.c url.c urlesc.c \
		gopher.c \
		icp.c \
		http.h http.c httplog.c httphead.c httpd.c cgi.c ssi.c \
		htmlgen.c \
		nntp.c nntplist.c nntpgw.c enews.c httpmail.c mailer.c \
		pop.c smtp.c telnet.c ftp.c xferlog.c X.c wais.c whois.c \
		imap.c \
		ldap.c smtpgate.c alias.c \
		domain.c sh.c nsh.c \
		lpr.c \
		pgps.c \
		socks.c socks4.c \
		cuseeme.c coupler.c vsap.c tcprelay.c udprelay.c \
		ftpgw.c filetype.c \
		embed.c builtin \
		dtot.c \
		smtp_lib.c inets_lib.c

#		WhatIsDeleGate NOTE\
#		delegate_access \

FILES =		$(LFILES)

INC_DEPEND_COMMON = \
		../include/config.h \
		../include/log.h \
		../include/vsocket.h \
		../include/ysocket.h

SRC_DEPEND =	delegate.h vaddr.h ../include/ysocket.h

DOBJS =		delegated.o commands.o croncom.o remote.o _builtin.o

NETYOBJS =	inets_lib.o \
		smtp_lib.o

LIBOBJS	=	version.o \
		editconf.o admin.o notify.o shutter.o \
		process.o \
		vaddr.o conf.o svport.o ddi.o textconv.o \
		script.o param.o env.o \
		syslog.o log.o svstat.o \
		iotimeout.o \
		misc.o msg.o sopen.o \
		shio.o \
		db.o \
		hostlist.o cond.o \
		service.o svconf.o filter.o \
		master.o \
		delegate.o \
		gacl.o access.o ident.o \
		lock.o ccache.o cache.o distrib.o \
		ipno.o \
		inets.o uns.o rident.o \
		inetd.o \
		thruwayd.o dget.o urlfind.o durl.o \
		mount.o url.o urlesc.o \
		gopher.o \
		icp.o \
		http.o httplog.o httphead.o httpd.o cgi.o ssi.o htmlgen.o \
		nntp.o nntplist.o nntpgw.o enews.o httpmail.o mailer.o \
		pop.o smtp.o telnet.o ftp.o xferlog.o X.o wais.o whois.o \
		imap.o \
		ldap.o smtpgate.o alias.o \
		domain.o sh.o nsh.o \
		lpr.o \
		pgps.o \
		socks.o socks4.o \
		cuseeme.o coupler.o vsap.o tcprelay.o udprelay.o \
		ftpgw.o filetype.o

LIBSRCS =	TELEPORT=../teleport \
		RESOLVY=../resolvy \
		RARY=../rary \
		MIMEKIT=../mimekit \
		CFI=../filters \
		MD5=../pds/md5 \
		SUBST=../maker

MYLIBDIR =	../lib

LIBNETYF =	$(MYLIBDIR)/libnety.a
LIBDGF =	$(MYLIBDIR)/libdelegate.a
RESOLVYF =	$(MYLIBDIR)/libresolvy.a
LIBMKITF =	$(MYLIBDIR)/libmimekit.a
TELEPORTF =	$(MYLIBDIR)/libteleport.a
LIBMD5F =	$(MYLIBDIR)/libmd5.a
LIBCFIF =	$(MYLIBDIR)/libcfi.a
LIBRARYF =	$(MYLIBDIR)/library.a

LIBSUBSTF =	$(MYLIBDIR)/libsubst.a

MYLIBS0 =	$(RESOLVYF) \
		$(LIBMKITF) \
		$(LIBMD5F) \
		$(LIBCFIF) \
		$(LIBRARYF)

MYLIBS =	$(TELEPORTF) \
		$(MYLIBS0)

EXE_DEPEND =	Makefile Makefile.go $(MYLIBS) $(LIBSUBST)

######## if you use external libresolv.a
#RESLIB =	-lresolv
######## else
RESLIB =	$(RESOLVYF)
RESLIBF =	$(RESOLVYF)
######## endif

LIBMKIT =	$(LIBMKITF)
LIBSUBST =	$(LIBSUBSTF)

CFLAGS =	-O
#
# WSOCK32.LIB      ... socket library on Win32
# ADVAPI32.LIB     ... running as a Service on WindowsNT
#
#NETLIB =	-lnsl -lsocket WSOCK32.LIB ADVAPI32.LIB -llwp
#NETLIB =	-lnsl -lsocket WSOCK32.LIB ADVAPI32.LIB -pthread
NETLIB =	-lnsl -lsocket WSOCK32.LIB ADVAPI32.LIB
HDRDIRS =	-I../include
LIBDIRS =	-L$(MYLIBDIR)

#ifdef MSWIN ######################################################
CFLAGSPLUS =	-nologo
EMBED =		embed.exe
COPY =		copy
CCOUT =		-Fo$*.o
ARC =		lib /out:$@
LDFLAGS =
RANLIB =	dir
TAR =		echo
RM =		del
EXE =		.exe
#endif #############
#ifdef OS2EMX #####################################################
EMBED =		embed.exe
LDOPTS =	-s -Zbin-files -Zbsd-signals
EXE =		.exe
#endif #############
#ifdef UNIX #######################################################
EMBED =		./embed
EXE =
#endif #############
#ifdef UNIX,OS2EMX ################################################
CFLAGSPLUS =
COPY =		cp -p
CCOUT =
ARC =		ar cr $@
#RANLIB =	ranlib
RANLIB =	ar ts
LDFLAGS =
TAR =		tar
RM =		rm -f
#endif #############

TARGET = delegated$(EXE)

MKMAKE =	../mkmake.exe
MKMKMK =	../mkmkmk.exe
LNCONF =	$(MKMAKE) +r -lnconf
MAKEIT =	$(MKMAKE)    -makeit
MAKEAT =	$(MKMAKE)    -makeat
CKCONF =	$(MKMAKE) +r -ckconf

MAKEALL =	$(MAKEIT) "$(MAKE)" -f Makefile.go start2 \
		SHELL="$(SHELL)" HDRDIRS="$(HDRDIRS)" LIBDIRS="$(LIBDIRS)"

#---BGN---
start0:		Makefile.go
		@$(MAKEALL)
#---END---
start1:;	$(MAKEALL)
start2:		$(TARGET)

LDFLAGS =	$(LDOPTS) $(LIBDIRS)
XCFLAGS =	$(CFLAGS) $(CFLAGSPLUS)

MAKEENV =	MAKE="$(MAKE)" SHELL="$(SHELL)" \
		CC="$(CC)" CFLAGS="$(XCFLAGS)" HDRDIR="$(HDRDIRS)" \
		RANLIB="$(RANLIB)" LDFLAGS="$(LDFLAGS)" LIBDIR="$(LIBDIRS)" \
		NETLIB="$(NETLIB)" \
		TAR="$(TAR)"

LIBSC0 =	$(RESLIB) $(LIBS) \
		$(TELEPORTF) $(LIBMD5F) $(LIBCFIF) $(LIBRARYF) $(LIBMKIT) \
		$(NETLIB)

LIBSC =		$(LIBSC0) $(LIBC) $(LIBSUBST)

CCCO =		$(CC) $(XCFLAGS) $(HDRDIRS) -c $(CCOUT)
CCLD =		$(CC) $(XCFLAGS) $(HDRDIRS) $(LDFLAGS) -o $@

.c.o:;		$(CCCO) $*.c

MKMAKE_SRC =	Makefile mkmkmk.c ../maker/mkmake.c

$(MKMAKE):	Makefile $(MKMAKE_SRC)
		$(CC) -DMKMKMK -DDEFCC=\"$(CC)\" $(HDRDIRS) $(LIBDIRS) mkmkmk.c -o $(MKMKMK)
		"$(MKMKMK)" -mkmkmk "$(CC)" $(HDRDIRS) $(LIBDIRS) ../maker/mkmake.c -o $@

DELEGATE_CONF:
		-@echo "searching $@ ..."
		$(LNCONF) $@

CONF_GOT:	$(MKMAKE) DELEGATE_CONF
		echo "GOT by MKMAKE=$(MKMAKE)" > $@

Makefile.tst:	CONF_GOT
		@echo "creating $@ ..."
		-@$(RM) $@
		"$(MKMAKE)" -mkmake "$(MAKE)" $@ "$(CFLAGS)" "$(LDFLAGS)" "$(RANLIB)" "$(NETLIB)" NETLIB

check_conf:
		$(CKCONF) Makefile.chk Makefile.tst DELEGATE_CONF "$(ADMIN)" "$(ADMINPASS)"

Makefile.chk:	Makefile.tst
		-@$(RM) $@
		"$(MKMAKE)" -makeit "$(MAKE)" -f Makefile.tst check_conf SHELL="$(SHELL)"

Makefile.go:	Makefile.chk
		"$(MKMAKE)" -mkmake "$(MAKE)" $@ "$(CFLAGS)" "$(LDFLAGS)" "$(RANLIB)" "$(NETLIB)" NETLIB "$(LIBSRCS)"

conf.o:		Makefile.go $(SRC_DEPEND) conf.c
		$(CCCO) conf.c \
			-DADMIN=\"$(ADMIN)\" \
			-DADMINPASS=\"$(ADMINPASS)\"

param.o:	param.h param.c

delegated$(EXE): $(EXE_DEPEND) $(LIBDGF) $(DOBJS) $(LIBNETYF)
		$(CCLD) $(DOBJS) $(LIBDGF) $(LIBSC)

delegatedp:	delegated
		$(CCLD) -p $(DOBJS) $(LIBDGF) $(LIBSC)

shio$(EXE):	$(EXE_DEPEND) shiomain.o shio.o _builtin.o
		$(CCLD) shiomain.o shio.o $(LIBSC)

url.o:		$(SRC_DEPEND) url.c
		$(CCCO) url.c

$(LIBNETYF):	Makefile $(NETYOBJS)
		-$(RM) $@
		$(ARC) $(NETYOBJS)
		-$(RANLIB) $@

$(LIBDGF):	Makefile $(LIBOBJS)
		-$(RM) $@
		$(ARC) $(LIBOBJS)
		-$(RANLIB) $@

$(EMBED):	Makefile embed.c $(LIBMD5F) $(LIBSUBST)
		$(CCLD) -DADMINPASS=\"$(ADMINPASS)\" \
			embed.c $(LIBMD5F) $(LIBSUBST)

_builtin.c:	$(EMBED)
		$(EMBED) data > _builtin.c "builtin/**/*.gif" "builtin/**/*.ico" "builtin/**/*.dhtml" "builtin/config/smtpgate/**/conf"

dtot:		dtot.c
		$(CCLD) dtot.c

lpr:;		lpr $(FILES)

clean:;		$(RM) $(LIBOBJS) _builtin.c _builtin.o \
		$(DOBJS) \
		shiomain.o \
		$(LIBSUBSTF)
		$(MAKEAT) "" ../maker "" "$(MAKE)" clean

files:;		ls -d $(FILES)
srcfiles:;	@echo $(FILES)
ver:;		grep "#.*VERSION" version.c | sed -e 's/^[^"]*"//' -e 's/".*//'

SRC_LOG_DEPEND = $(SRC_DEPEND) ../include/log.h

inets.o:	$(SRC_DEPEND) inets.c
inets_lib.o:	$(SRC_DEPEND) inets.c inets_lib.c
smtp_lib.o:	$(SRC_DEPEND) smtp.c smtp_lib.c

access.o:	$(SRC_DEPEND) hostlist.h access.c
hostlist.o:	$(SRC_DEPEND) hostlist.h hostlist.c
ident.o:	$(SRC_DEPEND) hostlist.h ident.c
master.o:	$(SRC_DEPEND) hostlist.h filter.h master.c
delegated.o:	$(SRC_LOG_DEPEND) ../include/config.h ../include/yselect.h delegated.c
env.o:		$(SRC_LOG_DEPEND) ../include/config.h param.h env.c
httplog.o:	$(SRC_LOG_DEPEND) httplog.c
log.o:		$(SRC_LOG_DEPEND) log.c
script.o:	$(SRC_LOG_DEPEND) script.c
service.o:	$(SRC_DEPEND) service.h filter.h service.c
svconf.o:	$(SRC_DEPEND) service.h svconf.c

admin.o:	$(SRC_DEPEND) admin.c
ccache.o:	$(SRC_DEPEND) ccache.c
cgi.o:		$(SRC_DEPEND) http.h cgi.c
coupler.o:	$(SRC_DEPEND) coupler.c
cuseeme.o:	$(SRC_DEPEND) cuseeme.c
ddi.o:		$(SRC_DEPEND) ddi.c
delegate.o:	$(SRC_DEPEND) delegate.c
distrib.o:	$(SRC_DEPEND) distrib.c
domain.o:	$(SRC_DEPEND) domain.c
editconf.o:	$(SRC_DEPEND) editconf.c
filter.o:	$(SRC_DEPEND) filter.h filter.c
ftp.o:		$(SRC_DEPEND) filter.h ftp.c
ftpgw.o:	$(SRC_DEPEND) ftpgw.c
gacl.o:		$(SRC_DEPEND) gacl.c
gopher.o:	$(SRC_DEPEND) gopher.c
htmlgen.o:	$(SRC_DEPEND) htmlgen.c
http.o:		$(SRC_DEPEND) filter.h http.h http.c
httpd.o:	$(SRC_DEPEND) http.h httpd.c
httphead.o:	$(SRC_DEPEND) http.h httphead.c
imap.o:		$(SRC_DEPEND) filter.h imap.c
ldap.o:		$(SRC_DEPEND) ldap.c
nntp.o:		$(SRC_DEPEND) filter.h nntp.c
nntpgw.o:	$(SRC_DEPEND) nntpgw.c
nsh.o:		$(SRC_DEPEND) nsh.c
pgps.o:		$(SRC_DEPEND) pgps.c
pop.o:		$(SRC_DEPEND) filter.h pop.c
process.o:	$(SRC_DEPEND) process.c
sh.o:		$(SRC_DEPEND) sh.c
shutter.o:	$(SRC_DEPEND) shutter.c
smtp.o:		$(SRC_DEPEND) filter.h smtp.c
smtpgate.o:	$(SRC_DEPEND) smtpgate.c
socks.o:	$(SRC_DEPEND) socks.c
sopen.o:	$(SRC_DEPEND) sopen.c
svport.o:	$(SRC_DEPEND) ../include/yselect.h svport.c
tcprelay.o:	$(SRC_DEPEND) tcprelay.c
telnet.o:	$(SRC_DEPEND) telnet.c
textconv.o:	$(SRC_DEPEND) textconv.c
udprelay.o:	$(SRC_DEPEND) udprelay.c
vaddr.o:	$(SRC_DEPEND) vaddr.c
vsap.o:		$(SRC_DEPEND) vsap.c
wais.o:		$(SRC_DEPEND) wais.c
whois.o:	$(SRC_DEPEND) whois.c
X.o:		$(SRC_DEPEND) X.c

MKAT =		$(MAKEAT) $@
LMAKE =		"$(MAKE)" libx $(MAKEENV)
LIB_DEPEND0 =	Makefile.go
LIB_DEPEND =	$(LIB_DEPEND0) $(INC_DEPEND_COMMON)

filters:
		$(MAKEAT) "" ../filters     "" \
			"$(MAKE)" filters $(MAKEENV) \
			CFLAGS="$(XCFLAGS)" LIBSC="$(LIBSC)" LIBDGF=-ldelegate

$(TELEPORTF):	$(LIB_DEPEND) $(LIBSRC_TELEPORT)
		$(MKAT) ../teleport libteleport.a $(LMAKE)

$(RESOLVYF):	$(LIB_DEPEND) $(LIBSRC_RESOLVY)
		$(MKAT) ../resolvy  libresolvy.a  $(LMAKE)

$(LIBRARYF):	$(LIB_DEPEND) $(LIBSRC_RARY)
		$(MKAT) ../rary     library.a     $(LMAKE)

$(LIBMKITF):	$(LIB_DEPEND) $(LIBSRC_MIMEKIT)
		$(MKAT) ../mimekit  libmimekit.a  $(LMAKE)

$(LIBCFIF):	$(LIB_DEPEND) $(LIBSRC_CFI)
		$(MKAT) ../filters  libcfi.a      $(LMAKE)

$(LIBMD5F):	$(LIB_DEPEND) $(LIBSRC_MD5)
		$(MKAT) ../pds/md5  libmd5.a      $(LMAKE)

$(LIBSUBSTF):	$(LIB_DEPEND0) $(LIBSRC_SUBST)
		$(MKAT) ../maker    libsubst.a    $(LMAKE) \
			LDLIBS="$(LIBSC0) $(LIBRARYF) $(LIBC)"
