Makefile revision 161351
1#
2# Copyright (C) 1993-1998 by Darren Reed.
3#
4# See the IPFILTER.LICENCE file for details on licencing.
5#
6TOP=../..
7BINDEST=/usr/sbin
8SBINDEST=/sbin
9MANDIR=/usr/share/man
10SEARCHDIRS!=echo $(BINDEST) $(SBINDEST) /bin /usr/bin /sbin /usr/sbin /usr/local/bin /usr/local/sbin | awk '{for(i=1;i<NF;i++){print $$i;}}' - | sort -u
11
12CC=gcc -Wall -Wuninitialized -Wstrict-prototypes -O -Wmissing-prototypes -Wpointer-arith -Wno-sign-compare -Wno-traditional -Werror
13#UFLAGS=-fprofile-arcs -ftest-coverage
14CFLAGS=-g -I$(TOP)
15#
16# For NetBSD/FreeBSD
17#
18DEVFS!=/usr/bin/lsvfs 2>&1 | sed -n 's/.*devfs.*/-DDEVFS/p'
19CPU!=uname -m
20INC=-I/usr/include -I/sys -I/sys/sys -I/sys/arch
21DEF=-D$(CPU) -D__$(CPU)__ -DINET -DKERNEL -D_KERNEL $(INC) $(DEVFS) -fno-builtin
22IPDEF=$(DEF) -DGATEWAY -DDIRECTED_BROADCAST
23VNODESHDIR=/sys/kern
24MLD=$(ML)
25ML=mln_ipl.c
26LKM=if_ipl.o
27LKMR=ipfrule.o
28DLKM=
29OBJ=.
30DEST=$(OBJ)
31MFLAGS="BINDEST=$(BINDEST)" "SBINDEST=$(SBINDEST)" "MANDIR=$(MANDIR)" \
32	'CFLAGS=$(CFLAGS) $(SOLARIS2)' "IPFLKM=$(IPFLKM)" \
33	"IPFLOG=$(IPFLOG)" "LOGFAC=$(LOGFAC)" "POLICY=$(POLICY)" \
34	"SOLARIS2=$(SOLARIS2)" "DEBUG=$(DEBUG)" "DCPU=$(CPU)" \
35	"CPUDIR=$(CPUDIR)" "LOOKUP=$(LOOKUP)" "SYNC=$(SYNC)"
36LIBS=-L. -lipf $(LIBBPF)
37#
38########## ########## ########## ########## ########## ########## ##########
39#
40CP=/bin/cp
41RM=/bin/rm
42CHMOD=/bin/chmod
43INSTALL=install
44#
45MODOBJS=ip_fil.o fil.o ml_ipl.o ip_nat.o ip_frag.o ip_state.o ip_proxy.o \
46	ip_auth.o ip_log.o ip_pool.o ip_htable.o ip_lookup.o ip_rules.o \
47	ip_scan.o ip_sync.o
48#	ip_trafcon.o
49DFLAGS=$(IPFLKM) $(IPFLOG) $(LOOKUP) $(SYNC) $(DEF) $(DLKM) $(IPFBPF)
50IPF=ipf.o ipfcomp.o ipf_y.o ipf_l.o bpf_filter_u.o
51IPT=ipftest.o fil_u.o ip_frag_u.o ip_state_u.o ip_nat_u.o \
52    ip_proxy_u.o ip_auth_u.o ip_htable_u.o ip_lookup_u.o ip_pool_u.o \
53    ip_scan_u.o ip_sync_u.o ip_rules_u.o ip_fil_u.o ip_log_u.o \
54    ippool_y.o ippool_l.o ipf_y.o ipf_l.o ipnat_y.o ipnat_l.o \
55    md5_u.o radix_u.o bpf_filter_u.o
56#   ip_syn_u.o
57#ip_trafcon_u.o
58TOOL=$(TOP)/tools
59IPNAT=ipnat.o ipnat_y.o ipnat_l.o
60IPMON=ipmon.o ipmon_y.o ipmon_l.o
61IPPOOL=ippool_y.o ippool_l.o kmem.o ippool.o
62IPTRAFCON=iptrafcon.o
63PROXYLIST=$(TOP)/ip_ftp_pxy.c $(TOP)/ip_ipsec_pxy.c $(TOP)/ip_irc_pxy.c \
64	  $(TOP)/ip_netbios_pxy.c $(TOP)/ip_raudio_pxy.c $(TOP)/ip_rcmd_pxy.c \
65	  $(TOP)/ip_rpcb_pxy.c $(TOP)/ip_pptp_pxy.c
66FILS=ipfstat.o
67LIBSRC=$(TOP)/lib
68RANLIB=ranlib
69AROPTS=cq
70HERE!=pwd
71CCARGS=-I. $(DEBUG) $(CFLAGS) $(UFLAGS)
72KCARGS=-I. $(DEBUG) $(CFLAGS)
73#
74# Extra is option kernel things we always want in user space.
75#
76EXTRA=$(ALLOPTS)
77
78include $(TOP)/lib/Makefile
79
80build all: machine $(OBJ)/libipf.a ipf ipfs ipfstat ipftest ipmon ipnat \
81	   ippool ipscan ipsyncm ipsyncs $(LKM) $(LKMR)
82	-sh -c 'for i in ipf ipftest ipmon ippool ipnat ipscan ipsyncm ipsyncs; do /bin/rm -f $(TOP)/$$i; ln -s `pwd`/$$i $(TOP); done'
83	-/bin/rm -f ../tools ./tools
84	-ln -s ../tools .
85	-ln -s ../tools ..
86
87machine: Makefile.kmod
88	if [ -f Makefile.kmod ] ; then \
89		make -f Makefile.kmod depend MKUPDATE=no; \
90	fi
91
92Makefile.kmod:
93	if [ -f /usr/share/mk/bsd.kmod.mk -a "`uname -s`" = "NetBSD" ] ; then \
94		rm -f Makefile.kmod; \
95		ln -s /usr/share/mk/bsd.kmod.mk Makefile.kmod; \
96	fi
97
98ipfstat: $(FILS) $(OBJ)/libipf.a
99	$(CC) $(CCARGS) $(STATETOP_CFLAGS) $(STATETOP_INC) $(FILS) \
100	-o $@ $(LIBS) $(STATETOP_LIB) -lkvm
101
102ipf: $(IPF) $(OBJ)/libipf.a
103	$(CC) $(CCARGS) $(IPF) -o $@ $(LIBS) -ll $(LIBBPF)
104
105ipftest: $(IPT) $(OBJ)/libipf.a
106	$(CC) $(CCARGS) $(IPT) -o $@ $(LIBS) -ll $(LIBBPF)
107
108ipnat: $(IPNAT) $(OBJ)/libipf.a
109	$(CC) $(CCARGS) $(IPNAT) -o $@ $(LIBS) -lkvm -ll
110
111ipfs: ipfs.o
112	$(CC) $(CCARGS) ipfs.o -o $@
113
114ipsyncm: ipsyncm.o $(OBJ)/libipf.a
115	$(CC) $(CCARGS) ipsyncm.o -o $@ $(LIBS)
116
117ipsyncs: ipsyncs.o $(OBJ)/libipf.a
118	$(CC) $(CCARGS) ipsyncs.o -o $@ $(LIBS)
119
120ipsyncm.o: $(TOOL)/ipsyncm.c $(TOP)/ip_sync.h
121	$(CC) $(CCARGS) -c $(TOOL)/ipsyncm.c -o $@
122
123ipsyncs.o: $(TOOL)/ipsyncs.c $(TOP)/ip_sync.h
124	$(CC) $(CCARGS) -c $(TOOL)/ipsyncs.c -o $@
125
126tests:
127	(cd test; make )
128
129ipfstat.o: $(TOOL)/ipfstat.c $(TOP)/ip_fil.h $(TOP)/ipf.h $(TOP)/ip_frag.h \
130	$(TOP)/ip_compat.h $(TOP)/ip_state.h $(TOP)/ip_nat.h $(TOP)/opts.h
131	$(CC) $(CCARGS) $(STATETOP_CFLAGS) $(STATETOP_INC) \
132	-c $(TOOL)/ipfstat.c -o $@
133
134ipfs.o: $(TOOL)/ipfs.c $(TOP)/ip_fil.h $(TOP)/ipf.h $(TOP)/ip_state.h \
135	$(TOP)/ip_nat.h $(TOP)/opts.h
136	$(CC) $(CCARGS) -c $(TOOL)/ipfs.c -o $@
137
138fil_u.o: $(TOP)/fil.c $(TOP)/ip_fil.h $(TOP)/ipf.h $(TOP)/ip_compat.h \
139	    $(TOP)/opts.h $(TOP)/ip_rules.h
140	$(CC) $(CCARGS) $(EXTRA) $(IPFBPF) -D_RADIX_H_ -c $(TOP)/fil.c -o $@
141
142fil.o: $(TOP)/fil.c $(TOP)/ip_fil.h $(TOP)/ip_compat.h $(TOP)/ipl.h \
143	    $(TOP)/ip_rules.h
144	$(CC) $(KCARGS) $(POLICY) $(DFLAGS) $(IPFBPF) $(COMPIPF) \
145	    -c $(TOP)/fil.c -o $@
146
147ipf.o: $(TOOL)/ipf.c $(TOP)/ip_fil.h $(TOP)/ipf.h $(TOP)/opts.h
148	$(CC) $(CCARGS) -c $(TOOL)/ipf.c -o $@
149
150ipfcomp.o: $(TOOL)/ipfcomp.c $(TOP)/ip_fil.h $(TOP)/ipf.h $(TOP)/opts.h
151	$(CC) $(CCARGS) -c $(TOOL)/ipfcomp.c -o $@
152
153ipftest.o: $(TOOL)/ipftest.c $(TOP)/ip_fil.h $(TOP)/ipt.h $(TOP)/ipf.h \
154	    $(TOP)/opts.h
155	$(CC) $(CCARGS) -c $(TOOL)/ipftest.c -o $@
156
157ipnat.o: $(TOOL)/ipnat.c $(TOP)/ip_fil.h $(TOP)/ipf.h $(TOP)/ip_nat.h \
158	    $(TOP)/opts.h
159	$(CC) $(CCARGS) -c $(TOOL)/ipnat.c -o $@
160
161ipnat_y.o: ipnat_y.c ipnat_y.h ipnat_l.h
162	$(CC) $(CCARGS) -c ipnat_y.c -o $@
163
164ipnat_l.o: ipnat_l.c ipnat_y.h
165	$(CC) $(CCARGS) -I. -c ipnat_l.c -o $@
166
167ipnat_y.c: $(TOOL)/ipnat_y.y
168	(cd $(TOOL); make "DEST=$(HERE)" $(HERE)/$@)
169
170ipnat_y.h: ipnat_y.c
171
172ipnat_l.c: $(TOOL)/lexer.c $(TOP)/ip_nat.h
173	(cd $(TOOL); make "DEST=$(HERE)" $(HERE)/$@)
174
175ipnat_l.h: $(TOOL)/lexer.h
176	(cd $(TOOL); make "DEST=$(HERE)" $(HERE)/$@)
177
178ip_nat_u.o: $(TOP)/ip_nat.c $(TOP)/ip_nat.h $(TOP)/ip_compat.h $(TOP)/ip_fil.h
179	$(CC) $(CCARGS) $(EXTRA) -c $(TOP)/ip_nat.c -o $@
180
181ip_proxy_u.o: $(TOP)/ip_proxy.c $(TOP)/ip_proxy.h $(TOP)/ip_compat.h \
182	$(TOP)/ip_fil.h $(PROXYLIST) $(TOP)/ip_nat.h
183	$(CC) $(CCARGS) $(EXTRA) -c $(TOP)/ip_proxy.c -o $@
184
185ip_frag_u.o: $(TOP)/ip_frag.c $(TOP)/ip_frag.h $(TOP)/ip_compat.h \
186	$(TOP)/ip_fil.h
187	$(CC) $(CCARGS) $(EXTRA) -c $(TOP)/ip_frag.c -o $@
188
189ip_state_u.o: $(TOP)/ip_state.c $(TOP)/ip_state.h $(TOP)/ip_compat.h \
190	$(TOP)/ip_fil.h $(TOP)/ip_nat.h
191	$(CC) $(CCARGS) $(EXTRA) -c $(TOP)/ip_state.c -o $@
192
193ip_auth_u.o: $(TOP)/ip_auth.c $(TOP)/ip_auth.h $(TOP)/ip_compat.h \
194	$(TOP)/ip_fil.h
195	$(CC) $(CCARGS) $(EXTRA) -c $(TOP)/ip_auth.c -o $@
196
197ip_fil_u.o: $(TOP)/ip_fil.c $(TOP)/ip_fil.h $(TOP)/ip_compat.h
198	$(CC) $(CCARGS) $(EXTRA) -c $(TOP)/ip_fil.c -o $@
199
200ip_rules_u.o: ip_rules.c $(TOP)/ip_compat.h $(TOP)/ip_fil.h \
201	$(TOP)/ip_rules.h
202	$(CC) $(CCARGS) $(EXTRA) -c ip_rules.c -o $@
203
204ip_scan_u.o: $(TOP)/ip_scan.c $(TOP)/ip_compat.h $(TOP)/ip_fil.h \
205	$(TOP)/ip_scan.h
206	$(CC) $(CCARGS) $(EXTRA) -c $(TOP)/ip_scan.c -o $@
207
208ip_sync_u.o: $(TOP)/ip_sync.c $(TOP)/ip_compat.h $(TOP)/ip_fil.h \
209	$(TOP)/ip_sync.h
210	$(CC) $(CCARGS) $(EXTRA) -c $(TOP)/ip_sync.c -o $@
211
212ip_pool_u.o: $(TOP)/ip_pool.c $(TOP)/ip_compat.h $(TOP)/ip_fil.h \
213	$(TOP)/ip_pool.h
214	$(CC) $(CCARGS) $(EXTRA) -c $(TOP)/ip_pool.c -o $@
215
216ip_htable_u.o: $(TOP)/ip_htable.c $(TOP)/ip_compat.h $(TOP)/ip_fil.h \
217	$(TOP)/ip_htable.h
218	$(CC) $(CCARGS) $(EXTRA) -c $(TOP)/ip_htable.c -o $@
219
220ip_lookup_u.o: $(TOP)/ip_lookup.c $(TOP)/ip_compat.h $(TOP)/ip_fil.h \
221	$(TOP)/ip_lookup.h $(TOP)/ip_pool.h $(TOP)/ip_htable.h
222	$(CC) $(CCARGS) $(EXTRA) -c $(TOP)/ip_lookup.c -o $@
223
224ip_trafcon_u.o: $(TOP)/ip_trafcon.c $(TOP)/ip_compat.h $(TOP)/ip_fil.h \
225	$(TOP)/ip_trafcon.h
226	$(CC) $(CCARGS) -c $(TOP)/ip_trafcon.c -o $@
227
228ip_log_u.o: $(TOP)/ip_log.c $(TOP)/ip_fil.h $(TOP)/ip_compat.h
229	$(CC) $(CCARGS) $(EXTRA) -c $(TOP)/ip_log.c -o $@
230
231md5_u.o: $(TOP)/md5.c $(TOP)/md5.h
232	$(CC) $(CCARGS) $(EXTRA) -c $(TOP)/md5.c -o $@
233
234radix_u.o: $(TOP)/md5.c $(TOP)/radix_ipf.h
235	$(CC) $(CCARGS) $(EXTRA) -c $(TOP)/radix.c -o $@
236
237bpf_filter_u.o: $(TOP)/bpf_filter.c $(TOP)/pcap-ipf.h
238	$(CC) $(CCARGS) $(EXTRA) -c $(TOP)/bpf_filter.c -o $@
239
240if_ipl.o: $(MODOBJS) 
241	ld -r $(MODOBJS) -o $(LKM)
242	${RM} -f if_ipl
243
244ipfrule.ko.5: ip_rulesx.o $(MLR)
245	ld -warn-common -r -d -o $(.TARGET:S/.ko/.kld/) ip_rulesx.o $(MLR)
246	ld -Bshareable -d -warn-common -o $(LKMR:S/.5$//) $(.TARGET:S/.ko/.kld/) 
247ipfrule.ko: ip_rulesx.o $(MLR)
248	gensetdefs ip_rulesx.o $(MLR)
249	$(CC) $(KCARGS) -c setdef0.c
250	$(CC) $(KCARGS) -c setdef1.c
251	ld -Bshareable -o $@ setdef0.o ip_rulesx.o $(MLR) setdef1.o
252
253ipf.ko.5 ipl.ko.5: $(MODOBJS)
254	ld -warn-common -r -d -o $(.TARGET:S/.ko/.kld/) $(MODOBJS)
255	ld -Bshareable -d -warn-common -o $(LKM:S/.5$//) $(.TARGET:S/.ko/.kld/)
256
257ipf.ko ipl.ko: $(MODOBJS) 
258	gensetdefs $(MODOBJS)
259	$(CC) $(KCARGS) -c setdef0.c
260	$(CC) $(KCARGS) -c setdef1.c
261	ld -Bshareable -o $@ setdef0.o $(MODOBJS) setdef1.o
262
263ip_nat.o: $(TOP)/ip_nat.c $(TOP)/ip_nat.h $(TOP)/ip_compat.h $(TOP)/ip_fil.h
264	$(CC) $(KCARGS) $(DFLAGS) -c $(TOP)/ip_nat.c -o $@
265
266ip_frag.o: $(TOP)/ip_frag.c $(TOP)/ip_frag.h $(TOP)/ip_compat.h $(TOP)/ip_fil.h
267	$(CC) $(KCARGS) $(DFLAGS) -c $(TOP)/ip_frag.c -o $@
268
269ip_state.o: $(TOP)/ip_state.c $(TOP)/ip_state.h $(TOP)/ip_compat.h \
270	$(TOP)/ip_fil.h $(TOP)/ip_nat.h
271	$(CC) $(KCARGS) $(DFLAGS) -c $(TOP)/ip_state.c -o $@
272
273ip_proxy.o: $(TOP)/ip_proxy.c $(TOP)/ip_proxy.h $(TOP)/ip_compat.h \
274	$(TOP)/ip_fil.h $(PROXYLIST) $(TOP)/ip_nat.h
275	$(CC) $(KCARGS) $(DFLAGS) -c $(TOP)/ip_proxy.c -o $@
276
277ip_auth.o: $(TOP)/ip_auth.c $(TOP)/ip_auth.h $(TOP)/ip_compat.h \
278	$(TOP)/ip_fil.h
279	$(CC) $(KCARGS) $(DFLAGS) -c $(TOP)/ip_auth.c -o $@
280
281ip_fil.c:
282	/bin/rm -f ip_fil.c
283	ln -s $(TOP)/ip_fil_`uname -s|tr A-Z a-z`.c ip_fil.c
284
285ip_fil.o: ip_fil.c $(TOP)/ip_fil.h $(TOP)/ip_compat.h $(TOP)/ip_nat.h
286	$(CC) $(KCARGS) $(DFLAGS) $(COMPIPF) -c ip_fil.c -o $@
287
288ip_log.o: $(TOP)/ip_log.c $(TOP)/ip_compat.h $(TOP)/ip_fil.h
289	$(CC) $(KCARGS) $(DFLAGS) -c $(TOP)/ip_log.c -o $@
290
291ip_scan.o: $(TOP)/ip_scan.c $(TOP)/ip_compat.h $(TOP)/ip_fil.h $(TOP)/ip_scan.h
292	$(CC) $(KCARGS) $(DFLAGS) -c $(TOP)/ip_scan.c -o $@
293
294ip_sync.o: $(TOP)/ip_sync.c $(TOP)/ip_compat.h $(TOP)/ip_fil.h $(TOP)/ip_sync.h
295	$(CC) $(KCARGS) $(DFLAGS) -c $(TOP)/ip_sync.c -o $@
296
297ip_pool.o: $(TOP)/ip_pool.c $(TOP)/ip_compat.h $(TOP)/ip_fil.h \
298	$(TOP)/ip_lookup.h $(TOP)/ip_pool.h
299	$(CC) $(KCARGS) $(DFLAGS) -c $(TOP)/ip_pool.c -o $@
300
301ip_htable.o: $(TOP)/ip_htable.c $(TOP)/ip_compat.h $(TOP)/ip_fil.h \
302	$(TOP)/ip_lookup.h $(TOP)/ip_htable.h
303	$(CC) $(KCARGS) $(DFLAGS) -c $(TOP)/ip_htable.c -o $@
304
305ip_lookup.o: $(TOP)/ip_lookup.c $(TOP)/ip_compat.h $(TOP)/ip_fil.h \
306	$(TOP)/ip_pool.h $(TOP)/ip_htable.h $(TOP)/ip_lookup.h
307	$(CC) $(KCARGS) $(DFLAGS) -c $(TOP)/ip_lookup.c -o $@
308
309ip_trafcon.o: $(TOP)/ip_trafcon.c $(TOP)/ip_compat.h $(TOP)/ip_fil.h \
310	      $(TOP)/ip_trafcon.h
311	$(CC) $(KCARGS) $(DFLAGS) -c $(TOP)/ip_trafcon.c -o $@
312
313vnode_if.h: $(VNODESHDIR)/vnode_if.src
314	mkdir -p ../sys
315	if [ -f $(VNODESHDIR)/vnode_if.sh ] ; then \
316		sh $(VNODESHDIR)/vnode_if.sh $(VNODESHDIR)/vnode_if.src; \
317	fi
318	if [ -f $(VNODESHDIR)/vnode_if.pl ] ; then \
319		perl $(VNODESHDIR)/vnode_if.pl $(VNODESHDIR)/vnode_if.src; \
320	fi
321	if [ -f ../sys/vnode_if.h ] ; then mv ../sys/vnode_if.h .; fi
322	rmdir ../sys
323
324ml_ipl.o: vnode_if.h $(TOP)/$(MLD) $(TOP)/ipl.h
325	-/bin/rm -f vnode_if.c
326	$(CC) -I. $(CFLAGS) $(DFLAGS) -c $(TOP)/$(ML) -o $@
327
328ip_rules.o: ip_rules.c $(TOP)/ip_rules.h
329	$(CC) -I. $(CFLAGS) $(DFLAGS) $(COMPIPF) -c ip_rules.c -o $@
330
331ip_rules.c: $(TOP)/rules/ip_rules $(TOP)/tools/ipfcomp.c ipf
332	./ipf -cc -nf $(TOP)/rules/ip_rules
333
334$(TOP)/ip_rules.h: ip_rules.c
335	if [ ! -f $(TOP)/ip_rules.h ] ; then \
336		/bin/mv -f ip_rules.h $(TOP); \
337	else \
338		touch $(TOP)/ip_rules.h; \
339	fi
340
341ip_rulesx.o: ip_rules.c $(TOP)/ip_rules.h
342	$(CC) -I. $(CFLAGS) $(DFLAGS) -DIPFILTER_COMPILED -c ip_rules.c -o $@
343
344mlf_rule.o: $(TOP)/mlf_rule.c $(TOP)/ip_rules.h
345	$(CC) -I. $(CFLAGS) $(DFLAGS) -c $(TOP)/mlf_rule.c -o $@
346
347mln_rule.o: $(TOP)/mln_rule.c $(TOP)/ip_rules.h
348	$(CC) -I. $(CFLAGS) $(DFLAGS) -c $(TOP)/mln_rule.c -o $@
349
350mlo_rule.o: $(TOP)/mlo_rule.c $(TOP)/ip_rules.h
351	$(CC) -I. $(CFLAGS) $(DFLAGS) -c $(TOP)/mlo_rule.c -o $@
352
353mlfk_rule.o: $(TOP)/mlfk_rule.c $(TOP)/ip_rules.h
354	$(CC) -I. $(CFLAGS) $(DFLAGS) -c $(TOP)/mlfk_rule.c -o $@
355
356ipf_y.o: ipf_y.c ipf_y.h $(TOP)/ipf.h ipf_l.h $(TOP)/opts.h
357	$(CC) $(CCARGS) $(IPFBPF) -c ipf_y.c -o $@
358
359ipf_l.o: ipf_l.c ipf_y.h $(TOP)/ipf.h ipf_l.h $(TOP)/opts.h
360	$(CC) $(CCARGS) -I. -c ipf_l.c -o $@
361
362ipf_y.c: $(TOOL)/ipf_y.y $(TOP)/ipf.h $(TOP)/opts.h
363	(cd $(TOOL); make "DEST=$(HERE)" $(HERE)/$@)
364
365ipf_y.h: ipf_y.c
366
367ipf_l.c: $(TOOL)/lexer.c $(TOP)/ipf.h $(TOP)/opts.h
368	(cd $(TOOL); make "DEST=$(HERE)" $(HERE)/$@)
369
370ipf_l.h: $(TOOL)/lexer.h
371	(cd $(TOOL); make "DEST=$(HERE)" $(HERE)/$@)
372
373ipmon: $(IPMON) $(OBJ)/libipf.a
374	$(CC) $(CCARGS) $(IPMON) -o $@ $(LIBS) -ll
375
376ipmon.o: $(TOOL)/ipmon.c $(TOP)/ipmon.h
377	$(CC) $(CCARGS) $(LOGFAC) -c $(TOOL)/ipmon.c -o $@
378
379ipmon_y.o: ipmon_y.c ipmon_y.h $(TOP)/ipmon.h ipmon_l.h
380	$(CC) $(CCARGS) -c ipmon_y.c -o $@
381
382ipmon_l.o: ipmon_l.c ipmon_y.h $(TOP)/ipmon.h
383	$(CC) $(CCARGS) -I. -c ipmon_l.c -o $@
384
385ipmon_y.c: $(TOOL)/ipmon_y.y $(TOP)/ipmon.h
386	(cd $(TOOL); make "DEST=$(HERE)" $(HERE)/$@)
387
388ipmon_y.h: ipmon_y.c
389
390ipmon_l.c: $(TOOL)/lexer.c $(TOP)/ipmon.h
391	(cd $(TOOL); make "DEST=$(HERE)" $(HERE)/$@)
392
393ipmon_l.h: $(TOOL)/lexer.h
394	(cd $(TOOL); make "DEST=$(HERE)" $(HERE)/$@)
395
396ipscan: ipscan_y.o ipscan_l.o
397	$(CC) $(DEBUG) ipscan_y.o ipscan_l.o -o $@ -ll $(LIBS) -lkvm
398
399ipscan_y.o: ipscan_y.c ipscan_y.h $(TOP)/ip_scan.h ipscan_l.h
400	$(CC) $(CCARGS) -c ipscan_y.c -o $@
401
402ipscan_l.o: ipscan_l.c ipscan_y.h $(TOP)/ip_scan.h
403	$(CC) $(CCARGS) -I. -c ipscan_l.c -o $@
404
405ipscan_y.c: $(TOOL)/ipscan_y.y $(TOP)/ip_scan.h
406	(cd $(TOOL); make "DEST=$(HERE)" $(HERE)/$@)
407
408ipscan_y.h: ipscan_y.c
409
410ipscan_l.c ipscan_l.h: $(TOOL)/lexer.c $(TOP)/ip_scan.h
411	(cd $(TOOL); make "DEST=$(HERE)" $(HERE)/$@)
412
413ippool: $(IPPOOL) $(OBJ)/libipf.a
414	$(CC) $(DEBUG) -I. $(CFLAGS) $(IPPOOL) -o $@ -ll -lkvm -L. -lipf
415
416ippool.o: $(TOOL)/ippool.c $(TOP)/ip_pool.h
417	$(CC) $(CCARGS) -c $(TOOL)/ippool.c -o $@
418
419ippool_y.o: ippool_y.c ippool_y.h $(TOP)/ip_pool.h ippool_l.h
420	$(CC) $(CCARGS) -c ippool_y.c -o $@
421
422ippool_l.o: ippool_l.c ippool_y.h $(TOP)/ip_pool.h
423	$(CC) $(CCARGS) -I. -c ippool_l.c -o $@
424
425ippool_y.c: $(TOOL)/ippool_y.y $(TOP)/ip_pool.h ippool_l.h
426	(cd $(TOOL); make "DEST=$(HERE)" $(HERE)/$@)
427
428ippool_y.h: ippool_y.c
429
430ippool_l.c: $(TOOL)/lexer.c $(TOP)/ip_pool.h
431	(cd $(TOOL); make "DEST=$(HERE)" $(HERE)/$@)
432
433ippool_l.h: $(TOOL)/lexer.h
434	(cd $(TOOL); make "DEST=$(HERE)" $(HERE)/$@)
435
436iptrafcon.o: $(TOP)/iptrafcon.c
437	$(CC) $(CCARGS) -c $< -o $@
438
439iptrafcon: $(IPTRAFCON) $(OBJ)/libipf.a
440	$(CC) $(CCARGS) $(IPTRAFCON) -o $@ $(LIBS)
441
442.y.c:
443
444.l.c:
445
446clean:
447	${RM} -f ../ipf ../ipnat ../ipmon ../ippool ../ipftest 
448	${RM} -f ../ipscan ../ipsyncm ../ipsyncs
449	${RM} -f *.core *.o *.a ipt ipfstat ipf ipfstat ipftest ipmon
450	${RM} -f if_ipl ipnat ipfrule.ko* ipf.kld*
451	${RM} -f vnode_if.h $(LKM) ioconf.h *.ko setdef1.c setdef0.c setdefs.h
452	${RM} -f ip_fil.c ipf_l.c ipf_y.c ipf_y.h ipf_l.h
453	${RM} -f ipscan ipscan_y.c ipscan_y.h ipscan_l.c ipscan_l.h
454	${RM} -f ippool ippool_y.c ippool_y.h ippool_l.c ippool_l.h
455	${RM} -f ipnat_y.c ipnat_y.h ipnat_l.c ipnat_l.h
456	${RM} -f ipmon_y.c ipmon_y.h ipmon_l.c ipmon_l.h
457	${RM} -f ipsyncm ipsyncs ipfs ip_rules.c ip_rules.h
458	${RM} -f *.da *.gcov *.bb *.bbg tools
459
460	${MAKE} -f Makefile.ipsend ${MFLAGS} clean
461	if [ -f Makefile.kmod ] ; then \
462		${MAKE} -f Makefile.kmod ${MFLAGS} clean; \
463	fi
464	-(for i in *; do \
465		if [ -d $${i} -a -f $${i}/Makefile ] ; then \
466			cd $${i}; (make TOP=../.. clean); cd ..; \
467			/bin/rm -f $${i}/Makefile $${i}/Makefile.ipsend; \
468			/bin/rm -f $${i}/Makefile.kmod; \
469			rmdir $${i}; \
470		fi \
471	done)
472
473install:
474	for i in ip_compat.h ip_fil.h ip_nat.h ip_state.h ip_proxy.h \
475		ip_frag.h ip_auth.h; do \
476		/bin/cp $(TOP)/$$i /usr/include/netinet/; \
477		$(CHMOD) 444 /usr/include/netinet/$$i; \
478	done
479	-if [ -d /lkm -a -f if_ipl.o ] ; then \
480		cp if_ipl.o /lkm; \
481	fi
482	-if [ -d /modules -a -f ipf.ko ] ; then \
483		cp ipf.ko /modules; \
484	fi
485	-if [ -d /modules -a -f ipfrule.ko ] ; then \
486		cp ipfrule.ko /modules; \
487	fi
488	-if [ -d /boot/kernel -a -f ipf.ko ] ; then \
489		cp ipf.ko /boot/kernel; \
490	fi
491	-if [ -d /boot/kernel -a -f ipfrule.ko ] ; then \
492		cp ipfrule.ko /boot/kernel; \
493	fi
494	-if [ -d /usr/lkm -a -f if_ipl.o ] ; then \
495		cp if_ipl.o /usr/lkm; \
496	fi
497	-$(INSTALL) -cs -g wheel -m 755 -o root ipscan $(SBINDEST)
498	(cd $(TOP)/man; make INSTALL=$(INSTALL) MANDIR=$(MANDIR) install; cd $(TOP))
499	@for i in ipf:$(SBINDEST) ipfs:$(SBINDEST) ipnat:$(SBINDEST) \
500	    ippool:$(BINDEST) ipsyncm:$(BINDEST) ipsyncs:$(BINDEST) \
501	    ipfstat:$(SBINDEST) ipftest:$(SBINDEST) ipmon:$(BINDEST); do \
502		def="`expr $$i : '[^:]*:\(.*\)'`"; \
503		p="`expr $$i : '\([^:]*\):.*'`"; \
504		dd=; \
505		for d in $(SEARCHDIRS); do \
506			if [ -f $$d/$$p ] ; then \
507				echo "$(INSTALL) -cs -g wheel -m 755 -o root $$p $$d"; \
508				$(INSTALL) -cs -g wheel -m 755 -o root $$p $$d; \
509				dd=XXX; \
510			fi; \
511		done; \
512		if [ -z "$$dd" ] ; then \
513			echo $(INSTALL) -cs -g wheel -m 755 -o root $$p $$def; \
514			$(INSTALL) -cs -g wheel -m 755 -o root $$p $$def; \
515		fi \
516	done
517	(cd $(TOP)/man; make INSTALL=$(INSTALL) MANDIR=$(MANDIR) install; cd $(TOP))
518
519coverage:
520	ksh -c 'for i in *.da; do j=$${i%%.da}.c; gcov $$j 2>&1 | egrep -v "y.tab.c|Could|Creating|_l\.c|\.h"; done'  | sort -k 1n -k 3n > report
521	sort -k 1n -k 3n report | perl -e 'while(<>) { next if (/^0.00/); s/\%//g; @F=split;$$lc+=$$F[2];$$t += ($$F[0]/100)*$$F[2];}  printf "%d of %d = %d%%\n", $$t, $$lc,($$t/$$lc)*100;' >> report
522
523clean-coverage:
524	/bin/rm -f *.gcov *.da
525