# /*////////////////////////////////////////////////////////////////////////
# Copyright (c) 1994-2000 Yutaka Sato and ETL,AIST,MITI
# Copyright (c) 2001-2004 National Institute of Advanced Industrial Science and Technology (AIST)
#
# Permission to use this material for noncommercial and/or evaluation
# purpose, copy this material for your own use, and distribute the copies
# via publicly accessible on-line media, without fee, is hereby granted
# provided that the above copyright notice and this permission notice
# appear in all copies.
# AIST 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@delegate.org>
# 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 =

#####
##### Don't change the following LICENSEE line if you don't have your
##### commercial license granted by AIST
#####
##### LICENSEE = "anyone for evaluation or non-commercial purpose"
LICENSEE = ""

#
#
#

LFILES =	Makefile mkmkmk.c \
		sample.shio \
		version.c \
		editconf.c admin.c notify.c shutter.c abort.c \
		process.c \
		delegate.h vaddr.h vaddr.c conf.c ddi.c textconv.c \
		dglib.h auth.h \
		syslog.c log.c svstat.c \
		iotimeout.c \
		misc.c msg.c \
		shio.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 \
		stls.c \
		gacl.c access.c ident.c dgauth.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 \
		mount.c url.c \
		gopher.c \
		icp.c \
		url.h \
		http.h http.c httpx.c httplog.c httphead.c \
		httpd.c cgi.c ssi.c htaccept.c \
		htswitch.h htswitch.c \
		htmlgen.c \
		nntp.c nntplist.c nntpgw.c enews.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 \
		lpr.c \
		socks.c socks4.c sox.c \
		cuseeme.c coupler.c vsap.c tcprelay.c udprelay.c \
		ftpgw.c filetype.c \
		embed.c builtin.c builtin randld \
		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 =		builtin.o delegated.o commands.o croncom.o remote.o

NETYOBJS =	inets_lib.o \
		smtp_lib.o

LIBOBJS	=	version.o \
		editconf.o admin.o notify.o shutter.o abort.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 \
		shio.o \
		db.o \
		hostlist.o cond.o \
		service.o svconf.o filter.o \
		master.o \
		delegate.o \
		stls.o \
		gacl.o access.o ident.o dgauth.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 \
		mount.o url.o \
		gopher.o \
		icp.o \
		http.o httpx.o httplog.o httphead.o \
		httpd.o cgi.o ssi.o htaccept.o \
		htswitch.o \
		htmlgen.o \
		nntp.o nntplist.o nntpgw.o enews.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 \
		lpr.o \
		socks.o socks4.o sox.o \
		cuseeme.o coupler.o vsap.o tcprelay.o udprelay.o \
		ftpgw.o filetype.o

LIBSRCS =	TELEPORT=../teleport \
		FSX=../fsx \
		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
LIBSUBSTXF =	$(MYLIBDIR)/libsubstx.a
TYPEDEF =	typedefs
LIBFSX =	$(MYLIBDIR)/libfsx.a

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

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)

#
# 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
#SOLLIB =	-lnsl -lsocket -ldl
SOLLIB =	-lnsl -lsocket
#WINLIB =	WSOCK32.LIB ADVAPI32.LIB OLE32.LIB SHELL32.LIB UUID.LIB
WINLIB =	WS2_32.LIB ADVAPI32.LIB OLE32.LIB SHELL32.LIB UUID.LIB
SSLDIR =	../../SSL
SSLLIB =	$(SSLDIR)/libcrypto.a $(SSLDIR)/libssl.a -lcrypto -lssl \
		$(SSLDIR)/LIBEAY32.LIB $(SSLDIR)/SSLEAY32.LIB
NETLIB =	$(SOLLIB) $(WINLIB) -lpam -lstdc++
HDRDIRS =	-I../include
LIBDIRS =	-L$(MYLIBDIR)

#ifdef MSWIN ######################################################
CFLAGSPLUS =	-nologo -DQS
EMBED =		embed.exe
COPY =		copy
CFLAGS =	-O
CCINX =		.cpp
CCINOUT =	$*$(CCINX) -Fo$*.o
MKCPPF =	..\mkcpp.exe
MKMKCPP =	$(MKCPPF)
MKCPP =		$(MKCPPF) < $*.c > $*.cpp
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 =
SUBIN = subin
#endif #############
#ifdef UNIX,OS2EMX ################################################
CFLAGSPLUS =	if(UNIX,OS2EMX) -x c++ -DQS
COPY =		cp -p
CFLAGS =	if(UNIX,OS2EMX) -O
CCINX =		.c
CCINOUT =	$*$(CCINX)
MKCPPF =	../mkcpp
LIBC =		-lc
ARC =		$(AR) cr $@
#RANLIB =	ranlib
RANLIB =	$(AR) ts
LDFLAGS =
TAR =		tar
RM =		rm -f
#endif #############
#ifdef NONC99 #####################################################
CCINX =		.cc
CCINOUT =	$*$(CCINX)
MKMKCPP =	$(MKCPPF)
MKCPP =		$(MKCPPF) $*.c $*$(CCINX)
#endif #############

TARGET = delegated$(EXE) $(SUBIN) $(LIBSUBSTXF)

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)" \
		AR="$(AR)" TAR="$(TAR)"

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

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

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

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

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_IS_GOT:	$(MKMAKE) DELEGATE_CONF
		echo "GOT by MKMAKE=$(MKMAKE)" > $@

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

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

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

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

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

version.o:	Makefile.go $(SRC_DEPEND) version.c
		$(MKCPP)
		$(CCCO) \
			-DLICENSEE=\"$(LICENSEE)\"

param.o:	param.h param.c

MKBUILTIN =	$(EMBED) > _builtin.c \
		"builtin/**/*.gif" \
		"builtin/**/*.ico" \
		"builtin/**/*.dhtml" \
		"builtin/config/smtpgate/**/conf"

delegated$(EXE): $(MKMKCPP) $(EXE_DEPEND) $(LIBDGF) $(DOBJS) $(LIBNETYF)
		"$(MKMAKE)" -randtext ../include/randtext.c
		$(MKBUILTIN)
		$(CCLD) $(DOBJS) $(LIBDGF) $(LIBSC)

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

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

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

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

embed.o:	Makefile embed.c
		$(MKCPP)
		$(CCCO) -DADMINPASS=\"$(ADMINPASS)\"
$(EMBED):	embed.o
		$(CCLD) embed.o $(LIBMD5F) $(LIBRARYF) $(NETLIB) $(LIBSUBST)

new:;		-@$(RM) _builtin.c

_builtin.c:	$(EMBED) version.c
		$(MKBUILTIN)

builtin.o:	_builtin.c builtin.c

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

lpr:;		lpr $(FILES)

clean:;		$(RM) $(LIBOBJS) _builtin.c builtin.o \
		$(DOBJS) \
		$(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 url.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) url.h admin.c
ccache.o:	$(SRC_DEPEND) ccache.c
cgi.o:		$(SRC_DEPEND) url.h 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
dgauth.o:	$(SRC_DEPEND) ../include/credhy.h dgauth.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) url.h htmlgen.c
htswitch.o:	$(SRC_DEPEND) htswitch.h htswitch.c
http.o:		$(SRC_DEPEND) filter.h url.h http.h http.c
httpx.o:	$(SRC_DEPEND) filter.h http.h httpx.c
httpd.o:	$(SRC_DEPEND) url.h http.h httpd.c
httphead.o:	$(SRC_DEPEND) url.h http.h httphead.c
htaccept.o:	$(SRC_DEPEND) url.h http.h htaccept.c
imap.o:		$(SRC_DEPEND) filter.h imap.c
ldap.o:		$(SRC_DEPEND) ldap.c
mount.o:	$(SRC_DEPEND) url.h mount.c
nntp.o:		$(SRC_DEPEND) filter.h nntp.c
nntpgw.o:	$(SRC_DEPEND) ../include/ystring.h htswitch.h nntpgw.c
pop.o:		$(SRC_DEPEND) filter.h pop.c
process.o:	$(SRC_DEPEND) process.c
rident.o:	$(SRC_DEPEND) vaddr.h rident.c
shutter.o:	$(SRC_DEPEND) shutter.c
smtp.o:		$(SRC_DEPEND) ../include/ystring.h filter.h smtp.c
smtpgate.o:	$(SRC_DEPEND) smtpgate.c
socks.o:	$(SRC_DEPEND) socks.c
sox.o:		$(SRC_DEPEND) ../include/credhy.h sox.c
ssi.o:		$(SRC_DEPEND) url.h http.h ssi.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
thruway.o:	$(SRC_DEPEND) vaddr.h thruway.o
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
../include/yselect.h:	../include/ywinsock.h

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

subin:		../subin/dgpam ../lib/library.a

../subin/dgpam:	../subin/Makefile ../subin/dgpam.c ../rary/pam.c
		$(MAKEAT) "" ../subin       "" \
			"$(MAKE)" commands $(MAKEENV) \
			CFLAGS="$(XCFLAGS)" LIBSC="$(LIBSC)" LIBDGF=-ldelegate

$(MKCPPF):	../include/mkcpp.c
		$(CC) -o $@ ../include/mkcpp.c
		$(MKCPPF) delegate.h delegate.h
		$(MKCPPF) htswitch.h htswitch.h
		$(MKCPPF) vaddr.h vaddr.h
		$(MKCPPF) http.h http.h
		$(MKCPPF) url.h url.h

TYPEDEFS_H = ../include/typedefs.h
typedefs:	$(TYPEDEFS_H)
$(TYPEDEFS_H):	Makefile.go ../include/Makefile ../include/mkdef
		$(MAKEAT) "" ../include "" $(LMAKE)

$(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) SSLLIB="$(SSLLIB)"

$(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)"

$(LIBSUBSTXF):	$(LIB_DEPEND0) $(LIBSRC_SUBSTX)
		$(MKAT) ../maker    libsubstx.a \
			"$(MAKE)" libxx $(MAKEENV) \
			LDLIBS="$(NETLIB) $(SSLLIB)"

fsx:		delegated$(EXE) $(LIBFSX)
$(LIBFSX):	$(LIB_DEPEND) $(LIBSRC_FSX)
		$(MKAT) ../fsx  libfsx.a $(LMAKE)

