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