6 include $(TOPDIR
)/config.mk
8 VERSION
:= $(shell $(PERL
) src
/ferm
--version | awk
'{print $$2}' | head
-1 | tr
-d
',')
10 DISTDIR
= build
/ferm-
$(VERSION
)
12 TARFILE
= build
/ferm-
${VERSION}.
tar.gz
13 LSMFILE
= build
/ferm-
${VERSION}.lsm
17 all: doc
/ferm.txt doc
/ferm.html doc
/ferm
.1 doc
/import-ferm
.1
21 rm -f doc
/ferm.txt doc
/ferm.html doc
/{import-
,}ferm
.1 *.tmp
27 doc
/ferm.txt
: doc
/ferm.pod
30 doc
/ferm.html
: doc
/ferm.pod
31 pod2html
$< --netscape
--flush
> $@
33 doc
/ferm
.1: doc
/ferm.pod
34 pod2man
--section
=1 --release
="ferm $(VERSION)" \
35 --center
="FIREWALL RULES MADE EASY" \
38 doc
/import-ferm
.1: src
/import-ferm
39 pod2man
--section
=1 --release
="ferm $(VERSION)" \
40 --center
="FIREWALL RULES MADE EASY" \
47 STAMPDIR
= $(TOPDIR
)/build
/test
48 STAMPDIR_20
= $(TOPDIR
)/build
/test2
50 # a list of all ferm scripts which should be tested with iptables
52 FERM_SCRIPTS
+= $(wildcard test/modules
/*.ferm
) $(wildcard test/targets
/*.ferm
)
53 FERM_SCRIPTS
+= $(wildcard test/protocols
/*.ferm
) $(wildcard test/misc
/*.ferm
)
54 FERM_SCRIPTS
+= $(wildcard test/ipv6
/*.ferm
)
56 EXCLUDE_IMPORT
= test/misc
/subchain-domains.ferm
57 IMPORT_SCRIPTS
= $(filter-out $(EXCLUDE_IMPORT
),$(FERM_SCRIPTS
))
59 # just a hack because ferm/import-ferm scramble the keyword order
60 SAVE2_SED
= -e
's,--start 2 --counter 1,--counter 1 --start 2,'
61 SAVE2_SED
+= -e
's,-m mh -p ipv6-mh,-p ipv6-mh -m mh,'
62 SAVE2_SED
+= -e
's,--connlimit-above 4 --connlimit-mask 24,--connlimit-mask 24 --connlimit-above 4,'
63 SAVE2_SED
+= -e
's,--hashlimit 10/minute --hashlimit-mode dstip,--hashlimit-mode dstip --hashlimit 10/minute,'
64 SAVE2_SED
+= -e
's,--packet 1 --every 3 --counter 1,--packet 1 --counter 1 --every 3,'
65 SAVE2_SED
+= -e
's!--rt-0-addrs ::1,::2 --rt-0-not-strict!--rt-0-not-strict --rt-0-addrs ::1,::2!'
66 SAVE2_SED
+= -e
's!--to 128 --hex-string deadbeef!--hex-string deadbeef --to 128!'
67 SAVE2_SED
+= -e
's!--datestop 2004/12/31 --timestart 09:00!--timestart 09:00 --datestop 2004/12/31!'
68 SAVE2_SED
+= -e
's!--datestop 2004/12/31 --timestart 18:00!--timestart 18:00 --datestop 2004/12/31!'
69 SAVE2_SED
+= -e
's!--total-nodes 4 --hash-init 12345!--hash-init 12345 --total-nodes 4!'
71 FERM_20_SCRIPTS
:= $(wildcard test/arptables
/*.ferm
) $(wildcard test/ebtables
/*.ferm
)
73 $(STAMPDIR
)/%.OLD
: %.result
test/canonical.pl
75 $(PERL
) test/canonical.pl
<$< >$@
77 $(STAMPDIR
)/%.result
: %.ferm
$(NEW_FERM
)
79 $(PERL
) $(NEW_FERM
) $(NEW_OPTIONS
) $< >$@
81 $(STAMPDIR
)/%.NEW
: $(STAMPDIR
)/%.result
test/canonical.pl
82 $(PERL
) test/canonical.pl
<$< >$@
84 $(STAMPDIR
)/%.SAVE
: %.ferm
$(NEW_FERM
)
86 $(PERL
) $(NEW_FERM
) $(NEW_OPTIONS
) --fast
$< >$@.tmp
87 grep
-v
'^#' <$@.tmp
>$@
89 $(STAMPDIR
)/test/ipv6
/%.IMPORT
: export FERM_DOMAIN
=ip6
90 $(STAMPDIR
)/%.IMPORT
: $(STAMPDIR
)/%.SAVE src
/import-ferm
91 $(PERL
) src
/import-ferm
$< >$@
93 $(STAMPDIR
)/%.SAVE2
: $(STAMPDIR
)/%.IMPORT
$(NEW_FERM
)
94 $(PERL
) $(NEW_FERM
) $(NEW_OPTIONS
) --fast
$< >$@.tmp
95 grep
-v
'^#' <$@.tmp |sed
$(SAVE2_SED
) >$@
97 $(STAMPDIR
)/%.
check: $(STAMPDIR
)/%.OLD
$(STAMPDIR
)/%.NEW
101 $(STAMPDIR
)/%.check-import
: $(STAMPDIR
)/%.SAVE
$(STAMPDIR
)/%.SAVE2
105 $(STAMPDIR_20
)/%.result
: %.ferm
$(NEW_FERM
)
107 $(PERL
) $(NEW_FERM
) $(NEW_OPTIONS
) $< >$@
109 $(STAMPDIR_20
)/%.
check: %.result
$(STAMPDIR_20
)/%.result
113 .PHONY
: check-ferm check-import
check
115 check-ferm
: $(patsubst %.ferm
,$(STAMPDIR
)/%.
check,$(FERM_SCRIPTS
)) $(patsubst %.ferm
,$(STAMPDIR_20
)/%.
check,$(FERM_20_SCRIPTS
))
117 check-import
: $(patsubst %.ferm
,$(STAMPDIR
)/%.check-import
,$(IMPORT_SCRIPTS
))
119 check: check-ferm check-import
127 build
/ferm-
$(VERSION
).
tar.gz
: all
129 install -d
-m
755 $(DISTDIR
) $(DISTDIR
)/src
$(DISTDIR
)/doc
$(DISTDIR
)/examples
130 install -m
755 src
/{import-
,}ferm
$(DISTDIR
)/src
131 install -m
644 doc
/ferm.pod doc
/ferm.txt doc
/ferm.html doc
/{import-
,}ferm
.1 $(DISTDIR
)/doc
132 install -m
644 config.mk Makefile AUTHORS COPYING NEWS README TODO
$(DISTDIR
)
133 install -m
644 $(wildcard examples
/*.ferm
) $(DISTDIR
)/examples
134 cd build
&& tar czf ferm-
$(VERSION
).
tar.gz ferm-
$(VERSION
)
136 dist: build
/ferm-
$(VERSION
).
tar.gz
142 .PHONY
: install uninstall
145 install -d
-m
755 $(DOCDIR
)/examples
$(PREFIX
)/sbin
146 install -m
644 AUTHORS COPYING NEWS README TODO
$(DOCDIR
)
147 install -m
644 examples
/*.ferm
$(DOCDIR
)/examples
148 install -m
755 src
/{import-
,}ferm
$(PREFIX
)/sbin
/
150 install -d
-m
755 $(DOCDIR
) $(MANDIR
)
151 install -m
644 doc
/ferm.txt doc
/ferm.html
$(DOCDIR
)
152 install -m
644 doc
/{import-
,}ferm
.1 $(MANDIR
)
153 gzip
-f9
$(MANDIR
)/{import-
,}ferm
.1
157 rm -f
$(MANDIR
)/{import-
,}ferm
.1{,.gz
}
158 rm -f
$(PREFIX
)/sbin
/{import-
,}ferm
166 upload
: doc
/ferm.html
167 scp NEWS doc
/ferm.html foo-projects.org
:/var
/www
/ferm.foo-projects.org
/download
/2.0/
168 scp examples
/*.ferm foo-projects.org
:/var
/www
/ferm.foo-projects.org
/download
/examples
/
171 @echo
"Publishing tarfiles in $(WEBDIR)..."
172 rm -f
$(WEBDIR
)/$(notdir $(TARFILE
))
173 cp
$(TARFILE
) $(WEBDIR
)
175 cp doc
/ferm.html
$(WEBDIR
)
176 echo
$(VERSION
) > $(WEBDIR
)/VERSION
177 ln
-s
$(notdir $(TARFILE
)) $(WEBDIR
)/ferm.
tar.gz
178 chmod ugo
+r
$(WEBDIR
)/$(notdir $(TARFILE
)) $(WEBDIR
)/ferm.
tar.gz \
179 $(WEBDIR
)/NEWS
$(WEBDIR
)/VERSION
$(WEBDIR
)/ferm.html
183 @echo
"Publishing tarfiles in $(FTPDIR)..."
184 rm -f
$(FTPDIR
)/$(notdir $(TARFILE
))
185 cp
$(TARFILE
) $(FTPDIR
)
187 echo
$(VERSION
) > $(FTPDIR
)/VERSION
188 ln
-s
$(notdir $(TARFILE
)) $(FTPDIR
)/ferm.
tar.gz
189 chmod ugo
+r
$(FTPDIR
)/$(notdir $(TARFILE
)) $(FTPDIR
)/ferm.
tar.gz \
190 $(FTPDIR
)/NEWS
$(FTPDIR
)/VERSION
195 $(LSMFILE
): DATE
= `date '+%Y-%m-%d'`
196 $(LSMFILE
): SIZE
= $(shell du
-h
-D
$(TARFILE
) | awk
'{print $$1}')
198 @echo
"Making lsm entry file..."
200 @echo
"Title: ferm" >> $@
201 @echo
"Version: $(VERSION)" >> $@
202 @echo
"Entered-date: $(DATE)" >> $@
203 @echo
"Description: A tool for structured firewall-rule making" >> $@
204 @echo
"Keywords: iptables ipchains ipfwadm firewall rules rule" >> $@
205 @echo
"Author: sofar@foo-projects.org (A. Kok)" >> $@
206 @echo
"Maintained-by: sofar@foo-projects.org (A. Kok)" >> $@
207 @echo
"Primary-site: ferm.foo-projects.org /" >> $@
208 @echo
" $(SIZE) $(TARFILE)" >> $@
209 @echo
"Alternate-site:" >> $@
210 @echo
"Original-site:" >> $@
211 @echo
"Platforms: perl linux>=2.4" >> $@
212 @echo
"Copying-policy: GPL" >> $@
214 # @echo "Sending lsm entry..."
215 # @mailx -s "add" lsm@execpc.com < $@