accept "match" -> "m"
[ferm.git] / Makefile
blob2e1fcb1312d5a5bc78062471a5c009ab45f47940
2 # Makefile for ferm
5 TOPDIR = .
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
15 .PHONY: all clean
17 all: doc/ferm.txt doc/ferm.html doc/ferm.1 doc/import-ferm.1
19 clean:
20 rm -rf build
21 rm -f doc/ferm.txt doc/ferm.html doc/{import-,}ferm.1 *.tmp
24 # documentation
27 doc/ferm.txt: doc/ferm.pod
28 pod2text $< > $@
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" \
36 --official $< > $@
38 doc/import-ferm.1: src/import-ferm
39 pod2man --section=1 --release="ferm $(VERSION)" \
40 --center="FIREWALL RULES MADE EASY" \
41 --official $< > $@
44 # test suite
47 STAMPDIR = $(TOPDIR)/build/test
48 STAMPDIR_20 = $(TOPDIR)/build/test2
50 # a list of all ferm scripts which should be tested with iptables
51 FERM_SCRIPTS =
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
74 @mkdir -p $(dir $@)
75 $(PERL) test/canonical.pl <$< >$@
77 $(STAMPDIR)/%.result: %.ferm $(NEW_FERM)
78 @mkdir -p $(dir $@)
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)
85 @mkdir -p $(dir $@)
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
98 diff -u $^
99 @touch $@
101 $(STAMPDIR)/%.check-import: $(STAMPDIR)/%.SAVE $(STAMPDIR)/%.SAVE2
102 diff -u $^
103 @touch $@
105 $(STAMPDIR_20)/%.result: %.ferm $(NEW_FERM)
106 @mkdir -p $(dir $@)
107 $(PERL) $(NEW_FERM) $(NEW_OPTIONS) $< >$@
109 $(STAMPDIR_20)/%.check: %.result $(STAMPDIR_20)/%.result
110 diff -u $^
111 @touch $@
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
122 # distribution
125 .PHONY: dist
127 build/ferm-$(VERSION).tar.gz: all
128 rm -rf $(DISTDIR)
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
139 # installation
142 .PHONY: install uninstall
144 install: all
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
155 uninstall:
156 rm -rf $(DOCDIR)
157 rm -f $(MANDIR)/{import-,}ferm.1{,.gz}
158 rm -f $(PREFIX)/sbin/{import-,}ferm
161 # misc targets
164 .PHONY: www ftp pub
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/
170 www: dist
171 @echo "Publishing tarfiles in $(WEBDIR)..."
172 rm -f $(WEBDIR)/$(notdir $(TARFILE))
173 cp $(TARFILE) $(WEBDIR)
174 cp NEWS $(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
180 @echo "Done."
182 ftp: dist
183 @echo "Publishing tarfiles in $(FTPDIR)..."
184 rm -f $(FTPDIR)/$(notdir $(TARFILE))
185 cp $(TARFILE) $(FTPDIR)
186 cp NEWS $(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
191 @echo "Done."
193 pub: www ftp
195 $(LSMFILE): DATE = `date '+%Y-%m-%d'`
196 $(LSMFILE): SIZE = $(shell du -h -D $(TARFILE) | awk '{print $$1}')
197 $(LSMFILE): dist
198 @echo "Making lsm entry file..."
199 @echo "Begin4" > $@
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" >> $@
213 @echo "End" >> $@
214 # @echo "Sending lsm entry..."
215 # @mailx -s "add" lsm@execpc.com < $@
216 @echo "Done."
218 .phony: lsm
219 lsm: $(LSMFILE)