# @(#) Makefile 1.23 97/03/21 19:27:20

what:
	@echo
	@echo "Usage: edit the REAL_DAEMON_DIR definition in the Makefile then:"
	@echo
	@echo "	make sys-type"
	@echo
	@echo "If you are in a hurry you can try instead:"
	@echo
	@echo "	make REAL_DAEMON_DIR=/foo/bar sys-type"
	@echo
	@echo "And for a version with language extensions enabled:"
	@echo
	@echo "	make REAL_DAEMON_DIR=/foo/bar STYLE=-DPROCESS_OPTIONS sys-type"
	@echo
	@echo "This Makefile knows about the following sys-types:"
	@echo
	@echo "	generic (most bsd-ish systems with sys5 compatibility)"
	@echo "	386bsd aix alpha apollo bsdos convex-ultranet dell-gcc dgux dgux543"
	@echo "	dynix epix esix freebsd hpux irix4 irix5 irix6 isc iunix"
	@echo "	linux machten mips(untested) ncrsvr4 netbsd next osf power_unix_211"
	@echo "	ptx-2.x ptx-generic pyramid sco sco-nis sco-od2 sco-os5 sinix sunos4"
	@echo "	sunos40 sunos5 solaris8 sysv4 tandem ultrix unicos7 unicos8 unixware1 unixware2"
	@echo "	uts215 uxp"
	@echo
	@echo "If none of these match your environment, edit the system"
	@echo "dependencies sections in the Makefile and do a 'make other'."
	@echo

#######################################################
# Choice between easy and advanced installation recipe.
# 
# Advanced installation: vendor-provided daemons are left alone, and the
# inetd configuration file is edited. In this case, the REAL_DAEMON_DIR
# macro should reflect the actual directory with (most of) your
# vendor-provided network daemons.  These names can be found in the
# inetd.conf file. Usually, the telnet, ftp and finger daemons all live
# in the same directory.
# 
# Uncomment the appropriate line if you are going to edit inetd.conf.
#
# Ultrix 4.x SunOS 4.x ConvexOS 10.x Dynix/ptx
#REAL_DAEMON_DIR=/usr/etc
#
# SysV.4 Solaris 2.x OSF AIX
#REAL_DAEMON_DIR=/usr/sbin
#
# BSD 4.4
#REAL_DAEMON_DIR=/usr/libexec
#
# HP-UX SCO Unicos
#REAL_DAEMON_DIR=/etc

# Easy installation: vendor-provided network daemons are moved to "some
# other" directory, and the tcpd wrapper fills in the "holes". For this
# mode of operation, the REAL_DAEMON_DIR macro should be set to the "some
# other" directory.  The "..." is here for historical reasons only; you
# should probably use some other name. 
# 
# Uncomment the appropriate line if you are going to move your daemons.
#
# Ultrix 4.x SunOS 4.x ConvexOS 10.x Dynix/ptx
#REAL_DAEMON_DIR=/usr/etc/...
#
# SysV.4 Solaris 2.x OSF AIX
#REAL_DAEMON_DIR=/usr/sbin/...
#
# BSD 4.4
#REAL_DAEMON_DIR=/usr/libexec/...
#
# HP-UX SCO Unicos
#REAL_DAEMON_DIR=/etc/...

# End of mandatory section
##########################

##########################################
# Ready-to-use system-dependent templates.
#
# Ready-to-use templates are available for many systems (see the "echo"
# commands at the start of this Makefile).  The templates take care of
# all system dependencies: after editing the REAL_DAEMON_DIR definition
# above, do a "make sunos4" (or whatever system type is appropriate).
#
# If your system is not listed (or something that comes close enough), you
# have to edit the system dependencies section below and do a "make other".  
#
# Send templates for other UNIX versions to wietse@wzv.win.tue.nl.

# This is good for many BSD+SYSV hybrids with NIS (formerly YP).
generic aix osf alpha dynix:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ=setenv.o \
	NETGROUP=-DNETGROUP TLI= all

# Ditto, with vsyslog
sunos4:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ=setenv.o \
	NETGROUP=-DNETGROUP VSYSLOG= TLI= all

# Generic with resolver library.
generic-resolver:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS=-lresolv RANLIB=ranlib ARFLAGS=rv AUX_OBJ=setenv.o \
	NETGROUP=-DNETGROUP TLI= all

# The NeXT loader needs "-m" or it barfs on redefined library functions.
next:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS=-m RANLIB=ranlib ARFLAGS=rv AUX_OBJ=environ.o \
	NETGROUP=-DNETGROUP TLI= all

# SunOS for the 386 was frozen at release 4.0.x.
sunos40:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ="setenv.o strcasecmp.o" \
	NETGROUP=-DNETGROUP VSYSLOG= TLI= all

# Ultrix is like aix, next, etc., but has miscd and setenv().
ultrix:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ= \
	NETGROUP=-DNETGROUP TLI= all miscd

# This works on EP/IX 1.4.3 and will likely work on Mips (reggers@julian.uwo.ca)
epix:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ=environ.o \
	NETGROUP=-DNETGROUP TLI= SYSTYPE="-systype bsd43" all

# Freebsd and linux by default have no NIS.
386bsd bsdos:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ= NETGROUP= TLI= \
	EXTRA_CFLAGS=-DSYS_ERRLIST_DEFINED VSYSLOG= all

freebsd:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-L/usr/local/v6/lib -linet6" \
	LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ= NETGROUP= TLI= \
	EXTRA_CFLAGS="-DSYS_ERRLIST_DEFINED -DINET6 -Dss_family=__ss_family -Dss_len=__ss_len" \
	VSYSLOG= all

netbsd:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ= NETGROUP= TLI= \
	EXTRA_CFLAGS="-DSYS_ERRLIST_DEFINED -DINET6 -Dss_family=__ss_family -Dss_len=__ss_len" VSYSLOG= all

linux:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS=-lnsl RANLIB=ranlib ARFLAGS=rv AUX_OBJ=weak_symbols.o \
	NETGROUP="-DNETGROUP" TLI= VSYSLOG= BUGS= \
	EXTRA_CFLAGS="-DSYS_ERRLIST_DEFINED -DHAVE_STRERROR -DHAVE_WEAKSYMS -D_REENTRANT -DINET6=1 -Dss_family=__ss_family -Dss_len=__ss_len" all

gnu:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS=-lnsl RANLIB=ranlib ARFLAGS=rv AUX_OBJ=weak_symbols.o \
	NETGROUP=-DNETGROUP TLI= VSYSLOG= BUGS= \
	EXTRA_CFLAGS="-DSYS_ERRLIST_DEFINED -DHAVE_STRERROR -DHAVE_WEAKSYMS -D_REENTRANT" all

# This is good for many SYSV+BSD hybrids with NIS, probably also for HP-UX 7.x.
hpux hpux8 hpux9 hpux10:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS= RANLIB=echo ARFLAGS=rv AUX_OBJ=setenv.o \
	NETGROUP=-DNETGROUP TLI= all

# ConvexOS-10.x with UltraNet support (ukkonen@csc.fi).
convex-ultranet:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS=-lulsock RANLIB=ranlib ARFLAGS=rv AUX_OBJ=environ.o \
	NETGROUP=-DNETGROUP TLI= all

# Generic support for the Dynix/PTX version of TLI.
ptx-generic:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lsocket -linet -lnsl" RANLIB=echo ARFLAGS=rv \
	AUX_OBJ="setenv.o strcasecmp.o ptx.o" NETGROUP= TLI=-DPTX all

# With UDP support optimized for PTX 2.x (timw@sequent.com).
ptx-2.x:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lsocket -linet -lnsl" RANLIB=echo ARFLAGS=rv \
	AUX_OBJ="setenv.o strcasecmp.o tli-sequent.o" NETGROUP= \
	TLI=-DTLI_SEQUENT all

# IRIX 4.0.x has a special ar(1) flag.
irix4:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lc -lsun" RANLIB=echo ARFLAGS=rvs AUX_OBJ=setenv.o \
	NETGROUP=-DNETGROUP TLI= all

# IRIX 5.2 is SYSV4 with several broken things (such as -lsocket -lnsl).
irix5:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS=-lsun RANLIB=echo ARFLAGS=rv VSYSLOG= \
	NETGROUP=-DNETGROUP AUX_OBJ=setenv.o TLI= all

# IRIX 6.2 (tucker@math.unc.edu). Must find a better value than 200000.
irix6:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS= RANLIB=echo ARFLAGS=rv VSYSLOG= \
	NETGROUP=-DNETGROUP EXTRA_CFLAGS="-DBSD=200000" TLI= all

# SunOS 5.x is another SYSV4 variant.
sunos5:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lsocket -lnsl" RANLIB=echo ARFLAGS=rv VSYSLOG= \
	NETGROUP=-DNETGROUP AUX_OBJ=setenv.o TLI=-DTLI \
	BUGS="$(BUGS) -DSOLARIS_24_GETHOSTBYNAME_BUG" all

# SunOS 5.8 is another SYSV4 variant, but has IPv6 support
solaris8:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lsocket -lnsl" RANLIB=echo ARFLAGS=rv VSYSLOG= \
	NETGROUP=-DNETGROUP AUX_OBJ=setenv.o TLI=-DTLI \
	EXTRA_CFLAGS="-DINET6 -DNO_CLONE_DEVICE -DINT32_T" all

# Generic SYSV40
esix sysv4:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lsocket -lnsl" RANLIB=echo ARFLAGS=rv \
	NETGROUP=-DNETGROUP AUX_OBJ=setenv.o TLI=-DTLI all

# DG/UX 5.4.1 and 5.4.2 have an unusual inet_addr() interface.
dgux:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS=-lnsl RANLIB=echo ARFLAGS=rv \
	NETGROUP=-DNETGROUP AUX_OBJ=setenv.o TLI=-DTLI \
	BUGS="$(BUGS) -DINET_ADDR_BUG" all

dgux543:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS=-lnsl RANLIB=echo ARFLAGS=rv \
	NETGROUP=-DNETGROUP AUX_OBJ=setenv.o TLI=-DTLI all

# NCR UNIX 02.02.01 and 02.03.00 (Alex Chircop, msu@unimt.mt)
ncrsvr4:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lresolv -lnsl -lsocket" RANLIB=echo ARFLAGS=rv \
	AUX_OBJ="setenv.o strcasecmp.o" NETGROUP= TLI=-DTLI \
	EXTRA_CFLAGS="" FROM_OBJ=ncr.o all

# Tandem SYSV4 (eqawas@hedgehog.ac.cowan.edu.au)
tandem:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lsocket -lnsl" RANLIB=echo ARFLAGS=rv \
	NETGROUP= AUX_OBJ="setenv.o strcasecmp.o" TLI=-DTLI all

# Amdahl UTS 2.1.5 (Richard.Richmond@bridge.bst.bls.com)
uts215:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lsocket" RANLIB=echo \
	ARFLAGS=rv AUX_OBJ=setenv.o NETGROUP=-DNO_NETGROUP TLI= all

# UXP/DS System V.4 clone (vic@uida0.uida.es).
uxp:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-L/usr/ucblib -lsocket -lnsl -lucb" \
	RANLIB=echo ARFLAGS=rv NETGROUP=-DNETGROUP \
	AUX_OBJ=setenv.o TLI="-DTLI -DDRS_XTI" all

# DELL System V.4 Issue 2.2 using gcc (kim@tac.nyc.ny.us, jurban@norden1.com)
dell-gcc:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lsocket -lnsl" RANLIB=ranlib ARFLAGS=rv CC=gcc \
	AUX_OBJ="setenv.o strcasecmp.o" TLI=-DTLI all

# SCO 3.2v4.1 no frills (jedwards@sol1.solinet.net).
sco:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lsocket -lnsl_s" RANLIB=echo ARFLAGS=rv \
	NETGROUP= AUX_OBJ=setenv.o TLI= all

# SCO OpenDesktop 2.0, release 3.2 (peter@midnight.com). Please simplify.
sco-od2:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lrpcsvc -lrpc -lyp -lrpc -lrpcsvc -lsocket" \
	RANLIB=echo ARFLAGS=rv AUX_OBJ=setenv.o \
	NETGROUP=-DNETGROUP TLI= all

# SCO 3.2v4.2 with TCP/IP 1.2.1 (Eduard.Vopicka@vse.cz). Please simplify.
sco-nis:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lyp -lrpc -lsocket -lyp -lc_s -lc" \
	RANLIB=echo ARFLAGS=rv AUX_OBJ=setenv.o \
	NETGROUP=-DNETGROUP TLI= EXTRA_CFLAGS="-nointl -DNO_NETGRENT" all

# SCO 3.2v5.0.0 OpenServer 5 (bob@odt.handy.com, bill@razorlogic.com)
sco-os5:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lrpcsvc -lsocket" RANLIB=echo ARFLAGS=rv VSYSLOG= \
	AUX_OBJ=setenv.o NETGROUP=-DNETGROUP TLI= all

# sinix 5.42 setjmp workaround (szrzs023@ub3.ub.uni-kiel.de)
sinix:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lsocket -lnsl -L/usr/ccs/lib -lc -L/usr/ucblib -lucb" \
	RANLIB=echo ARFLAGS=rv AUX_OBJ=setenv.o TLI=-DTLI all

# Domain SR10.4. Build under bsd, run under either sysv3 or bsd43.
apollo:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ=setenv.o \
	NETGROUP=-DNETGROUP TLI= SYSTYPE="-A run,any -A sys,any" all

# Pyramid OSx 5.1, using the BSD universe.
pyramid:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ="environ.o vfprintf.o" \
	STRINGS="-Dstrchr=index -Dstrrchr=rindex -Dmemcmp=bcmp -Dno_memcpy" \
	NETGROUP="-DNETGROUP -DUSE_GETDOMAIN" TLI= all

# Untested.
mips:
	@echo "Warning: some definitions may be wrong."
	${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ=environ.o \
	NETGROUP=-DNETGROUP TLI= SYSTYPE="-sysname bsd43" all

# Cray (tested with UNICOS 7.0.4).
unicos7:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS=-lnet RANLIB=echo ARFLAGS=rv \
	EXTRA_CFLAGS=-DINADDR_NONE="\"((unsigned long) -1)\"" \
	AUX_OBJ="setenv.o strcasecmp.o" NETGROUP= TLI= all

# Unicos 8.x, Cray-YMP (Bruce Kelly).
unicos8:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS= RANLIB=echo AR=bld ARFLAGS=rv \
	AUX_OBJ= NETGROUP= TLI= all

# Power_UNIX 2.1.1 (amantel@lerc.nasa.gov)
power_unix_211:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lnsl -lsocket -lgen -lresolv" RANLIB=echo ARFLAGS=rv \
	NETGROUP= AUX_OBJ=setenv.o TLI=-DTLI BUGS="$(BUGS)" all

# ISC (fc@all.net)
isc:
	${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-linet -lnsl_s -ldbm" RANLIB=echo ARFLAGS=rv \
	AUX_OBJ="setenv.o strcasecmp.o" EXTRA_CFLAGS="-DENOTCONN=ENAVAIL" \
	NETGROUP= TLI= all

# Interactive UNIX R3.2 version 4.0 (Bobby D. Wright).
iunix:
	${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-linet -lnsl_s -ldbm" RANLIB=echo ARFLAGS=rv \
	AUX_OBJ=environ.o strcasecmp.o NETGROUP= TLI= all

# RTU 6.0 on a Masscomp 5400 (ben@piglet.cr.usgs.gov). When using the
# advanced installation, increment argv before actually looking at it.
rtu:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ=environ.o \
	NETGROUP= TLI= all

# Unixware sans NIS (mc@telebase.com). Compiler dislikes strcasecmp.c.
unixware1:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lsocket -lnsl -lc -L/usr/ucblib -lucb" RANLIB=echo ARFLAGS=rv \
	NETGROUP=$(NETGROUP) AUX_OBJ=environ.o TLI=-DTLI all

unixware2:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lsocket -lnsl -lgen -lc -L/usr/ucblib -lucb" RANLIB=echo \
	ARFLAGS=rv NETGROUP=$(NETGROUP) AUX_OBJ=environ.o TLI=-DTLI all

u6000:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS="-lsocket -lnsl" RANLIB=echo ARFLAGS=rv \
	NETGROUP=-DNETGROUP AUX_OBJ="setenv.o strcasecmp.o" TLI=-DTLI all

# MachTen
machten:
	@${MAKE} REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
	LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ=environ.o \
	NETGROUP= TLI= all

###############################################################
# System dependencies: TLI (transport-level interface) support.
# 
# Uncomment the following macro if your system has System V.4-style TLI
# support (/usr/include/sys/timod.h, /etc/netconfig, and the netdir(3)
# routines).
#
#TLI	= -DTLI

###############################################################################
# System dependencies: differences between ranlib(1) and ar(1) implementations.
#
# Some C compilers (Ultrix 4.x) insist that ranlib(1) be run on an object
# library; some don't care as long as the modules are in the right order;
# some systems don't even have a ranlib(1) command. Make your choice.

RANLIB	= ranlib	# have ranlib (BSD-ish UNIX)
#RANLIB	= echo		# no ranlib (SYSV-ish UNIX)

ARFLAGS	= rv		# most systems
#ARFLAGS= rvs		# IRIX 4.0.x

AR	= ar
#AR	= bld		# Unicos 8.x

#############################################################################
# System dependencies: routines that are not present in the system libraries.
# 
# If your system library does not have set/putenv() or strcasecmp(), use
# the ones provided with this source distribution. The environ.c module
# implements setenv(), getenv(), and putenv().

AUX_OBJ= setenv.o
#AUX_OBJ= environ.o
#AUX_OBJ= environ.o strcasecmp.o

# Uncomment the following if your C library does not provide the
# strchr/strrchr/memcmp routines, but comes with index/rindex/bcmp.
#
#STRINGS= -Dstrchr=index -Dstrrchr=rindex -Dmemcmp=bcmp -Dno_memcpy

#################################################################
# System dependencies: selection of non-default object libraries.
#
# Most System V implementations require that you explicitly specify the
# networking libraries. There is no general consensus, though.
#
#LIBS	= -lsocket -lnsl		# SysV.4 Solaris 2.x
#LIBS	= -lsun				# IRIX
#LIBS	= -lsocket -linet -lnsl -lnfs	# PTX
#LIBS	= -linet -lnsl_s -ldbm		# ISC
#LIBS	= -lnet				# Unicos 7
#LIBS	= -linet -lsyslog -ldbm
#LIBS	= -lsyslog -lsocket -lnsl

######################################################
# System dependencies: system-specific compiler flags.
#
# Apollo Domain/OS offers both bsd and sys5 environments, sometimes
# on the same machine.  If your Apollo is primarily sys5.3 and also
# has bsd4.3, uncomment the following to build under bsd and run under
# either environment.
#
#SYSTYPE= -A run,any -A sys,any

# For MIPS RISC/os 4_52.p3, uncomment the following definition.
#
#SYSTYPE= -sysname bsd43

##################################################
# System dependencies: working around system bugs.
#
# -DGETPEERNAME_BUG works around a getpeername(2) bug in some versions of
# Apollo or SYSV.4 UNIX:  the wrapper would report that all UDP requests
# come from address 0.0.0.0. The workaround does no harm on other systems.
#
# -DBROKEN_FGETS works around an fgets(3) bug in some System V versions
# (IRIX):  fgets() gives up too fast when reading from a network socket.
# The workaround does no harm on other systems.
#
# Some UNIX systems (IRIX) make the error of calling the strtok() library
# routine from other library routines such as, e.g., gethostbyname/addr().
# The result is that hosts can slip through the wrapper allow/deny filters.
# Compile with -DLIBC_CALLS_STRTOK to avoid the vendor's strtok() routine.
# The workaround does no harm on other systems.
#
# DG/UX 5.4.1 comes with an inet_ntoa() function that returns a structure
# instead of a long integer. Compile with -DINET_ADDR_BUG to work around
# this mutant behavour. Fixed in 5.4R3.
#
# Solaris 2.4 gethostbyname(), in DNS through NIS mode, puts only one
# address in the host address list; all other addresses are treated as
# host name aliases. Compile with -DSOLARIS_24_GETHOSTBYNAME_BUG to work
# around this. The workaround does no harm on other Solaris versions.

BUGS = -DGETPEERNAME_BUG -DBROKEN_FGETS -DLIBC_CALLS_STRTOK
#BUGS = -DGETPEERNAME_BUG -DBROKEN_FGETS -DINET_ADDR_BUG
#BUGS = -DGETPEERNAME_BUG -DBROKEN_FGETS -DSOLARIS_24_GETHOSTBYNAME_BUG

##########################################################################
# System dependencies: whether or not your system has NIS (or YP) support.
#
# If your system supports NIS or YP-style netgroups, enable the following
# macro definition. Netgroups are used only for host access control.
#
#NETGROUP= -DNETGROUP

###############################################################
# System dependencies: whether or not your system has vsyslog()
#
# If your system supports vsyslog(), comment out the following definition.
# If in doubt leave it in, it won't harm.

VSYSLOG	= -Dvsyslog=myvsyslog

# End of the system dependencies.
#################################

##############################
# Start of the optional stuff.

###########################################
# Optional: Turning on language extensions
#
# Instead of the default access control language that is documented in
# the hosts_access.5 document, the wrappers can be configured to
# implement an extensible language documented in the hosts_options.5
# document.  This language is implemented by the "options.c" source
# module, which also gives hints on how to add your own extensions.
# Uncomment the next definition to turn on the language extensions
# (examples: allow, deny, banners, twist and spawn).
# 
#STYLE	= -DPROCESS_OPTIONS	# Enable language extensions.
STYLE = "-DPROCESS_OPTIONS -DACLEXEC"

################################################################
# Optional: Changing the default disposition of logfile records
#
# By default, logfile entries are written to the same file as used for
# sendmail transaction logs. See your /etc/syslog.conf file for actual
# path names of logfiles. The tutorial section in the README file
# gives a brief introduction to the syslog daemon.
# 
# Change the FACILITY definition below if you disagree with the default
# disposition. Some syslog versions (including Ultrix 4.x) do not provide
# this flexibility.
# 
# If nothing shows up on your system, it may be that the syslog records
# are sent to a dedicated loghost. It may also be that no syslog daemon
# is running at all. The README file gives pointers to surrogate syslog
# implementations for systems that have no syslog library routines or
# no syslog daemons. When changing the syslog.conf file, remember that
# there must be TABs between fields.
#
# The LOG_XXX names below are taken from the /usr/include/syslog.h file.

FACILITY= LOG_MAIL	# LOG_MAIL is what most sendmail daemons use
FACILITY= LOG_DAEMON

# The syslog priority at which successful connections are logged.

SEVERITY= LOG_INFO	# LOG_INFO is normally not logged to the console

###########################
# Optional: Reduce DNS load
#
# When looking up the address for a host.domain name, the typical DNS
# code will first append substrings of your own domain, so it tries
# host.domain.your.own.domain, then host.domain.own.domain, and then
# host.domain. The APPEND_DOT feature stops this waste of cycles. It is
# off by default because it causes problems on sites that don't use DNS
# and with Solaris < 2.4. APPEND_DOT will not work with hostnames taken
# from /etc/hosts or from NIS maps. It does work with DNS through NIS.
#
# DOT= -DAPPEND_DOT

##################################################
# Optional: Always attempt remote username lookups
#
# By default, the wrappers look up the remote username only when the
# access control rules require them to do so.
#
# Username lookups require that the remote host runs a daemon that
# supports an RFC 931 like protocol.  Remote user name lookups are not
# possible for UDP-based connections, and can cause noticeable delays
# with connections from non-UNIX PCs.  On some systems, remote username
# lookups can trigger a kernel bug, causing loss of service. The README
# file describes how to find out if your UNIX kernel has that problem.
# 
# Uncomment the following definition if the wrappers should always
# attempt to get the remote user name. If this is not enabled you can
# still do selective username lookups as documented in the hosts_access.5
# and hosts_options.5 manual pages (`nroff -man' format).
#
#AUTH	= -DALWAYS_RFC931
#
# The default username lookup timeout is 10 seconds. This may not be long
# enough for slow hosts or networks, but is enough to irritate PC users.

RFC931_TIMEOUT = 10

######################################################
# Optional: Changing the default file protection mask
#
# On many systems, network daemons and other system processes are started
# with a zero umask value, so that world-writable files may be produced.
# It is a good idea to edit your /etc/rc* files so that they begin with
# an explicit umask setting.  On our site we use `umask 022' because it
# does not break anything yet gives adequate protection against tampering.
# 
# The following macro specifies the default umask for processes run under
# control of the daemon wrappers. Comment it out only if you are certain
# that inetd and its children are started with a safe umask value.

UMASK	= -DDAEMON_UMASK=022

#######################################
# Optional: Turning off access control
#
# By default, host access control is enabled.  To disable host access
# control, comment out the following definition.  Host access control
# can also be turned off at runtime by providing no or empty access
# control tables.

ACCESS	= -DHOSTS_ACCESS

########################################################
# Optional: Changing the access control table pathnames
#
# The HOSTS_ALLOW and HOSTS_DENY macros define where the programs will
# look for access control information. Watch out for the quotes and
# backslashes when you make changes.

TABLES	= -DHOSTS_DENY=\"/etc/hosts.deny\" -DHOSTS_ALLOW=\"/etc/hosts.allow\"

####################################################
# Optional: dealing with host name/address conflicts
#
# By default, the software tries to protect against hosts that claim to
# have someone elses host name. This is relevant for network services
# whose authentication depends on host names, such as rsh and rlogin.
#
# With paranoid mode on, connections will be rejected when the host name
# does not match the host address. Connections will also be rejected when
# the host name is available but cannot be verified.
#
# Comment out the following definition if you want more control over such
# requests. When paranoid mode is off and a host name double check fails,
# the client can be matched with the PARANOID access control pattern.
#
# Paranoid mode implies hostname lookup. In order to disable hostname
# lookups altogether, see the next section.

PARANOID= -DPARANOID
PARANOID=

########################################
# Optional: turning off hostname lookups
#
# By default, the software always attempts to look up the client
# hostname.  With selective hostname lookups, the client hostname
# lookup is postponed until the name is required by an access control
# rule or by a %letter expansion.
# 
# In order to perform selective hostname lookups, disable paranoid
# mode (see previous section) and comment out the following definition.

HOSTNAME= -DALWAYS_HOSTNAME
HOSTNAME=

#############################################
# Optional: Turning on host ADDRESS checking
#
# Optionally, the software tries to protect against hosts that pretend to
# have someone elses host address. This is relevant for network services
# whose authentication depends on host names, such as rsh and rlogin,
# because the network address is used to look up the remote host name.
# 
# The protection is to refuse TCP connections with IP source routing
# options.
#
# This feature cannot be used with SunOS 4.x because of a kernel bug in
# the implementation of the getsockopt() system call. Kernel panics have
# been observed for SunOS 4.1.[1-3]. Symptoms are "BAD TRAP" and "Data
# fault" while executing the tcp_ctloutput() kernel function.
#
# Reportedly, Sun patch 100804-03 or 101790 fixes this for SunOS 4.1.x.
#
# Uncomment the following macro definition if your getsockopt() is OK.
#
# -DKILL_IP_OPTIONS is not needed on modern UNIX systems that can stop
# source-routed traffic in the kernel. Examples: 4.4BSD derivatives,
# Solaris 2.x, and Linux. See your system documentation for details.
#
# KILL_OPT= -DKILL_IP_OPTIONS
KILL_OPT= -DKILL_IP_OPTIONS

## End configuration options
############################

SRCDIR		= .

DESTDIR		=

PREFIX		= $(DESTDIR)/usr

INCDIR		= $(PREFIX)/include

LIBDIR		= $(PREFIX)/lib

MANDIR		= $(PREFIX)/share/man
MAN3DIR		= $(MANDIR)/man3
MAN5DIR		= $(MANDIR)/man5
MAN8DIR		= $(MANDIR)/man8

SBINDIR		= $(PREFIX)/sbin

INSTALL		= install
INSTALL_PROG	= $(INSTALL) -m 0755
INSTALL_DATA	= $(INSTALL) -m 0644

SYMLINK		= ln -sf

VPATH		= $(SRCDIR)

# Protection against weird shells or weird make programs.

SHELL	= /bin/sh

.c.o:;	$(CC) $(CFLAGS) -o $*.o -c $(SRCDIR)/$*.c

COPTS	= -O2 -g
CFLAGS	= $(COPTS) -DFACILITY=$(FACILITY) $(ACCESS) $(PARANOID) $(NETGROUP) \
	$(BUGS) $(SYSTYPE) $(AUTH) $(UMASK) \
	-DREAL_DAEMON_DIR=\"$(REAL_DAEMON_DIR)\" $(STYLE) $(KILL_OPT) \
	-DSEVERITY=$(SEVERITY) -DRFC931_TIMEOUT=$(RFC931_TIMEOUT) \
	$(UCHAR) $(TABLES) $(STRINGS) $(TLI) $(EXTRA_CFLAGS) $(DOT) \
	$(VSYSLOG) $(HOSTNAME)

LIB_OBJ= hosts_access.o options.o shell_cmd.o rfc931.o eval.o \
	hosts_ctl.o refuse.o percent_x.o clean_exit.o $(AUX_OBJ) \
	$(FROM_OBJ) fix_options.o socket.o tli.o workarounds.o \
	update.o misc.o diag.o percent_m.o myvsyslog.o

FROM_OBJ= fromhost.o

KIT	= $(addprefix $(SRCDIR)/, \
	README miscd.c tcpd.c fromhost.c hosts_access.c shell_cmd.c \
	tcpd.h tcpdmatch.c Makefile hosts_access.5 strcasecmp.c BLURB rfc931.c \
	tcpd.8 eval.c hosts_access.3 hosts_ctl.c percent_x.c options.c \
	clean_exit.c environ.c patchlevel.h fix_options.c workarounds.c \
	socket.c tli.c DISCLAIMER fakelog.c safe_finger.c hosts_options.5 \
	CHANGES try-from.c update.c ptx.c vfprintf.c tli-sequent.c \
	tli-sequent.h misc.c diag.c ncr.c tcpdchk.c percent_m.c \
	myvsyslog.c mystdarg.h printf.ck README.IRIX Banners.Makefile \
	refuse.c tcpdchk.8 setenv.c inetcf.c inetcf.h scaffold.c \
	scaffold.h tcpdmatch.8 README.NIS)

DOCS	= $(addprefix $(SRCDIR)/,tcpd.8 tcpdchk.8 tcpdmatch.8 \
	  hosts_access.5 hosts_options.5)

PROGS	= tcpd tcpdmatch try-from safe_finger tcpdchk

LIB	= libwrap.a

shared/%.o: %.c
	$(CC) $(CFLAGS) $(SHCFLAGS) -c $< -o $@

SOMAJOR = 0
SOMINOR = 7.6

SHLIB		= shared/libwrap.so.$(SOMAJOR).$(SOMINOR)
SHLIBSOMAJ	= shared/libwrap.so.$(SOMAJOR)
SHLIBSO		= shared/libwrap.so
SHLIBFLAGS	= -Lshared -lwrap

SHLINKFLAGS = -fpic -shared -Wl,-soname,libwrap.so.$(SOMAJOR) -Wl,--version-script=$(SRCDIR)/libwrap.lds $(LIBS)
SHCFLAGS = -fpic -shared -D_REENTRANT
SHLIB_OBJ= $(addprefix shared/, $(LIB_OBJ));

all other: config-check $(LIB) $(SHLIB) $(PROGS)

# Invalidate all object files when the compiler options (CFLAGS) have changed.

config-check:
	@set +e; test -n "$(REAL_DAEMON_DIR)" || { ${MAKE}; exit 1; }
	@set +e; echo $(CFLAGS) >cflags.new ; \
	if cmp cflags cflags.new ; \
	then rm cflags.new ; \
	else mv cflags.new cflags ; \
	fi >/dev/null 2>/dev/null
	@if [ ! -d shared ]; then mkdir shared; fi

$(LIB):	$(LIB_OBJ)
	rm -f $(LIB)
	$(AR) $(ARFLAGS) $(LIB) $(LIB_OBJ)
	-$(RANLIB) $(LIB)

$(SHLIB): $(SRCDIR)/libwrap.lds $(SHLIB_OBJ)
	rm -f $(SHLIB)
	$(CC) -o $(SHLIB) $(SHLINKFLAGS) $(SHLIB_OBJ)
	$(SYMLINK) $(notdir $(SHLIB)) $(SHLIBSOMAJ)
	$(SYMLINK) $(notdir $(SHLIBSOMAJ)) $(SHLIBSO)

tcpd:	tcpd.o $(SHLIB)
	$(CC) $(CFLAGS) -o $@ tcpd.o $(SHLIBFLAGS)

miscd:	miscd.o $(LIB)
	$(CC) $(CFLAGS) -o $@ miscd.o $(LIB) $(LIBS)

safe_finger: safe_finger.o
	$(CC) $(CFLAGS) -o $@ safe_finger.o

TCPDMATCH_OBJ = tcpdmatch.o fakelog.o inetcf.o scaffold.o

tcpdmatch: $(TCPDMATCH_OBJ) $(SHLIB)
	$(CC) $(CFLAGS) -o $@ $(TCPDMATCH_OBJ) $(SHLIBFLAGS)

try-from: try-from.o fakelog.o $(SHLIB)
	$(CC) $(CFLAGS) -o $@ try-from.o fakelog.o $(SHLIBFLAGS)

TCPDCHK_OBJ = tcpdchk.o fakelog.o inetcf.o scaffold.o

tcpdchk: $(TCPDCHK_OBJ) $(SHLIB)
	$(CC) $(CFLAGS) -o $@ $(TCPDCHK_OBJ) $(SHLIBFLAGS)

.PHONY: install install-lib install-bin install-doc install-dev
install: install-lib install-bin install-doc install-dev

$(LIBDIR) $(SBINDIR) $(MAN8DIR) $(MAN5DIR) $(MAN3DIR) $(INCDIR):
	mkdir -p $(@)

install-lib: | $(LIBDIR)
	$(INSTALL_DATA) $(LIB) $(LIBDIR)/
	$(INSTALL_PROG) $(SHLIB) $(LIBDIR)/
	$(SYMLINK) $(notdir $(SHLIB)) $(LIBDIR)/$(notdir $(SHLIBSOMAJ))
	$(SYMLINK) $(notdir $(SHLIBSOMAJ)) $(LIBDIR)/$(notdir $(SHLIBSO))

install-bin: | $(SBINDIR)
	$(INSTALL_PROG) tcpd $(SBINDIR)/
	$(INSTALL_PROG) tcpdchk $(SBINDIR)/
	$(INSTALL_PROG) tcpdmatch $(SBINDIR)/
	$(INSTALL_PROG) try-from $(SBINDIR)/
	$(INSTALL_PROG) safe_finger $(SBINDIR)/

install-doc: $(DOCS) | $(MAN5DIR) $(MAN8DIR)
	$(INSTALL_DATA) $(SRCDIR)/tcpd.8 $(MAN8DIR)/
	$(INSTALL_DATA) $(SRCDIR)/tcpdchk.8 $(MAN8DIR)/
	$(INSTALL_DATA) $(SRCDIR)/tcpdmatch.8 $(MAN8DIR)/
	$(INSTALL_DATA) $(SRCDIR)/hosts_access.5 $(MAN5DIR)/
	$(INSTALL_DATA) $(SRCDIR)/hosts_options.5 $(MAN5DIR)/

install-dev: | $(INCDIR) $(LIBDIR) $(MAN3DIR)
	$(INSTALL_DATA) $(SRCDIR)/hosts_access.3 $(MAN3DIR)/
	$(INSTALL_DATA) $(SRCDIR)/tcpd.h $(INCDIR)/
	$(INSTALL_DATA) $(LIB) $(LIBDIR)/
	$(SYMLINK) $(SRCDIR)/hosts_access.3 $(MAN3DIR)/hosts_ctl.3
	$(SYMLINK) $(SRCDIR)/hosts_access.3 $(MAN3DIR)/request_init.3
	$(SYMLINK) $(SRCDIR)/hosts_access.3 $(MAN3DIR)/request_set.3

shar:	$(KIT)
	@shar $(KIT)

kit:	$(KIT)
	@makekit $(KIT)

files:
	@echo $(KIT)

archive:
	$(ARCHIVE) $(KIT)

clean:
	rm -f tcpd miscd safe_finger tcpdmatch tcpdchk try-from *.[oa] core \
	libwrap*.so* \
	cflags
	rm -rf shared/

tidy:	clean
	chmod -R a+r .
	chmod 755 .

# Enable all bells and whistles for linting.

lint: tcpd_lint miscd_lint match_lint chk_lint

tcpd_lint:
	lint -DFACILITY=LOG_MAIL -DHOSTS_ACCESS -DPARANOID -DNETGROUP \
	-DGETPEERNAME_BUG -DDAEMON_UMASK=022 -DSEVERITY=$(SEVERITY) \
	$(TABLES) -DKILL_IP_OPTIONS -DPROCESS_OPTIONS \
	-DRFC931_TIMEOUT=$(RFC931_TIMEOUT) -DALWAYS_RFC931 \
	-DREAL_DAEMON_DIR=\"$(REAL_DAEMON_DIR)\" \
	-Dvsyslog=myvsyslog \
	$(addprefix $(SRCDIR)/, \
	tcpd.c fromhost.c socket.c tli.c hosts_access.c \
	shell_cmd.c refuse.c rfc931.c eval.c percent_x.c clean_exit.c \
	options.c setenv.c fix_options.c workarounds.c update.c misc.c \
	diag.c myvsyslog.c percent_m.c)

miscd_lint:
	lint -DFACILITY=LOG_MAIL -DHOSTS_ACCESS -DPARANOID -DNETGROUP \
	-DGETPEERNAME_BUG -DDAEMON_UMASK=022 -DSEVERITY=$(SEVERITY) \
	$(TABLES) -DKILL_IP_OPTIONS -DPROCESS_OPTIONS \
	-DRFC931_TIMEOUT=$(RFC931_TIMEOUT) -DALWAYS_RFC931 \
	-DREAL_DAEMON_DIR=\"$(REAL_DAEMON_DIR)\" \
	-Dvsyslog=myvsyslog \
	$(addprefix $(SRCDIR)/, \
	miscd.c fromhost.c socket.c tli.c hosts_access.c \
	shell_cmd.c refuse.c rfc931.c eval.c percent_x.c clean_exit.c \
	options.c setenv.c fix_options.c workarounds.c update.c misc.c \
	diag.c myvsyslog.c percent_m.c)

match_lint:
	lint -DFACILITY=LOG_MAIL -DSEVERITY=$(SEVERITY) -DHOSTS_ACCESS \
	-DPARANOID $(TABLES) -DNETGROUP -DPROCESS_OPTIONS -DRFC931_TIMEOUT=10 \
	-DREAL_DAEMON_DIR=\"$(REAL_DAEMON_DIR)\" \
	-Dvsyslog=myvsyslog \
	$(addprefix $(SRCDIR)/, \
	tcpdmatch.c hosts_access.c eval.c percent_x.c options.c workarounds.c \
	update.c socket.c misc.c diag.c myvsyslog.c percent_m.c setenv.c \
	inetcf.c scaffold.c)

chk_lint:
	lint -DFACILITY=LOG_MAIL -DSEVERITY=$(SEVERITY) -DHOSTS_ACCESS \
	-DPARANOID $(TABLES) -DNETGROUP -DPROCESS_OPTIONS -DRFC931_TIMEOUT=10 \
	-DREAL_DAEMON_DIR=\"$(REAL_DAEMON_DIR)\" \
	-Dvsyslog=myvsyslog \
	$(addprefix $(SRCDIR)/, \
	tcpdchk.c eval.c percent_x.c options.c update.c workarounds.c \
	setenv.c misc.c diag.c myvsyslog.c percent_m.c inetcf.c scaffold.c)

printfck:
	printfck -f printf.ck \
	$(addprefix $(SRCDIR)/, \
	tcpd.c fromhost.c socket.c tli.c hosts_access.c \
	shell_cmd.c refuse.c rfc931.c eval.c percent_x.c clean_exit.c \
	options.c setenv.c fix_options.c workarounds.c update.c misc.c \
	diag.c myvsyslog.c percent_m.c) > aap.c
	lint -DFACILITY=LOG_MAIL -DHOSTS_ACCESS -DPARANOID -DNETGROUP \
	-DGETPEERNAME_BUG -DDAEMON_UMASK=022 -DSEVERITY=$(SEVERITY) \
	$(TABLES) -DKILL_IP_OPTIONS -DPROCESS_OPTIONS \
	-DRFC931_TIMEOUT=$(RFC931_TIMEOUT) -DALWAYS_RFC931 \
	-DREAL_DAEMON_DIR=\"$(REAL_DAEMON_DIR)\" -Dvsyslog=myvsyslog aap.c
	printfck -f printf.ck \
	$(addprefix $(SRCDIR)/, \
	tcpdchk.c eval.c percent_x.c options.c update.c workarounds.c \
	setenv.c misc.c diag.c myvsyslog.c percent_m.c inetcf.c scaffold.c) \
	> aap.c
	lint -DFACILITY=LOG_MAIL -DSEVERITY=$(SEVERITY) -DHOSTS_ACCESS \
	-DPARANOID $(TABLES) -DNETGROUP -DPROCESS_OPTIONS -DRFC931_TIMEOUT=10 \
	-Dvsyslog=myvsyslog -DREAL_DAEMON_DIR=\"$(REAL_DAEMON_DIR)\"

# Internal compilation dependencies.

clean_exit.o: cflags
clean_exit.o: $(SRCDIR)/tcpd.h
diag.o: cflags
diag.o: $(SRCDIR)/mystdarg.h
diag.o: $(SRCDIR)/tcpd.h
environ.o: cflags
eval.o: cflags
eval.o: $(SRCDIR)/tcpd.h
fakelog.o: cflags
fakelog.o: $(SRCDIR)/mystdarg.h
fix_options.o: cflags
fix_options.o: $(SRCDIR)/tcpd.h
fromhost.o: cflags
fromhost.o: $(SRCDIR)/tcpd.h
hosts_access.o: cflags
hosts_access.o: $(SRCDIR)/tcpd.h
hosts_ctl.o: cflags
hosts_ctl.o: $(SRCDIR)/tcpd.h
inetcf.o: cflags
inetcf.o: $(SRCDIR)/inetcf.h
inetcf.o: $(SRCDIR)/tcpd.h
misc.o: cflags
misc.o: $(SRCDIR)/tcpd.h
miscd.o: cflags
miscd.o: $(SRCDIR)/patchlevel.h
miscd.o: $(SRCDIR)/tcpd.h
myvsyslog.o: cflags
myvsyslog.o: $(SRCDIR)/mystdarg.h
myvsyslog.o: $(SRCDIR)/tcpd.h
ncr.o: cflags
ncr.o: $(SRCDIR)/tcpd.h
options.o: cflags
options.o: $(SRCDIR)/tcpd.h
percent_m.o: cflags
percent_m.o: $(SRCDIR)/mystdarg.h
percent_x.o: cflags
percent_x.o: $(SRCDIR)/tcpd.h
ptx.o: cflags
ptx.o: $(SRCDIR)/tcpd.h
refuse.o: cflags
refuse.o: $(SRCDIR)/tcpd.h
rfc931.o: cflags
rfc931.o: $(SRCDIR)/tcpd.h
safe_finger.o: cflags
scaffold.o: cflags
scaffold.o: $(SRCDIR)/scaffold.h
scaffold.o: $(SRCDIR)/tcpd.h
setenv.o: cflags
shell_cmd.o: cflags
shell_cmd.o: $(SRCDIR)/tcpd.h
socket.o: cflags
socket.o: $(SRCDIR)/tcpd.h
strcasecmp.o: cflags
tcpd.o: cflags
tcpd.o: $(SRCDIR)/patchlevel.h
tcpd.o: $(SRCDIR)/tcpd.h
tcpdchk.o: cflags
tcpdchk.o: $(SRCDIR)/inetcf.h
tcpdchk.o: $(SRCDIR)/scaffold.h
tcpdchk.o: $(SRCDIR)/tcpd.h
tcpdmatch.o: cflags
tcpdmatch.o: $(SRCDIR)/scaffold.h
tcpdmatch.o: $(SRCDIR)/tcpd.h
tli-sequent.o: cflags
tli-sequent.o: $(SRCDIR)/tcpd.h
tli-sequent.o: $(SRCDIR)/tli-sequent.h
tli.o: cflags
tli.o: $(SRCDIR)/tcpd.h
try-from.o: cflags
try-from.o: $(SRCDIR)/tcpd.h
update.o: cflags
update.o: $(SRCDIR)/mystdarg.h
update.o: $(SRCDIR)/tcpd.h
vfprintf.o: cflags
weak_symbols.o: $(SRCDIR)/tcpd.h
workarounds.o: cflags
workarounds.o: $(SRCDIR)/tcpd.h
