Add geoip match
[ferm.git] / Makefile
blobb14bf6529b11c428d3aee501d7fa27393b7423fe
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 .PHONY: all clean
14 all: doc/ferm.txt doc/ferm.html doc/ferm.1 doc/import-ferm.1
16 clean:
17 rm -rf build
18 rm -f doc/ferm.txt doc/ferm.html doc/ferm.1 doc/import-ferm.1 *.tmp
21 # documentation
24 doc/ferm.txt: doc/ferm.pod
25 pod2text $< > $@
27 doc/ferm.html: doc/ferm.pod
28 pod2html $< --title="ferm - Firewall rules made easy" --flush > $@
30 doc/ferm.1: doc/ferm.pod
31 pod2man --section=1 --release="ferm $(VERSION)" \
32 --center="FIREWALL RULES MADE EASY" \
33 --official $< > $@
35 doc/import-ferm.1: src/import-ferm
36 pod2man --section=1 --release="ferm $(VERSION)" \
37 --center="FIREWALL RULES MADE EASY" \
38 --official $< > $@
41 # test suite
44 STAMPDIR = $(TOPDIR)/build/test
45 STAMPDIR_20 = $(TOPDIR)/build/test2
47 # a list of all ferm scripts which should be tested with iptables
48 FERM_SCRIPTS =
49 FERM_SCRIPTS += $(wildcard test/modules/*.ferm) $(wildcard test/targets/*.ferm)
50 FERM_SCRIPTS += $(wildcard test/protocols/*.ferm) $(wildcard test/misc/*.ferm)
51 FERM_SCRIPTS += $(wildcard test/glob/*.ferm)
52 FERM_SCRIPTS += $(wildcard test/ipv6/*.ferm)
53 FERM_SCRIPTS += $(wildcard test/arptables/*.ferm) $(wildcard test/ebtables/*.ferm)
55 EXCLUDE_IMPORT = test/misc/subchain-domains.ferm test/misc/ipfilter.ferm test/ipv6/mixed.ferm test/misc/address-magic.ferm
56 IMPORT_SCRIPTS = $(filter-out $(EXCLUDE_IMPORT) test/arptables/% test/ebtables/%,$(FERM_SCRIPTS))
58 # just a hack
59 RESULT_SED += -e 's,--protocol,-p,g'
60 RESULT_SED += -e 's,--in-interface,-i,g'
61 RESULT_SED += -e 's,--out-interface,-o,g'
62 RESULT_SED += -e 's,--destination ,-d ,g'
63 RESULT_SED += -e 's,--source ,-s ,g'
64 RESULT_SED += -e 's,--match ,-m ,g'
65 RESULT_SED += -e 's,--jump,-j,g'
66 RESULT_SED += -e 's,--goto,-g,g'
67 RESULT_SED += -e 's,--fragment,-f,g'
69 EB_ARP_RESULT_SED = -e 's,--jump,-j,g'
71 $(STAMPDIR)/test/arptables/%.result: test/arptables/%.ferm src/ferm
72 @mkdir -p $(dir $@)
73 $(PERL) src/ferm --test --slow $< |sed $(EB_ARP_RESULT_SED) >$@
75 $(STAMPDIR)/test/ebtables/%.result: test/ebtables/%.ferm src/ferm
76 @mkdir -p $(dir $@)
77 $(PERL) src/ferm --test --slow $< |sed $(EB_ARP_RESULT_SED) >$@
79 $(STAMPDIR)/%.result: %.ferm src/ferm test/sort.pl
80 @mkdir -p $(dir $@)
81 $(PERL) src/ferm --test --slow --noflush $< |$(PERL) test/sort.pl |sed $(RESULT_SED) >$@
83 $(STAMPDIR)/%.SAVE: %.ferm src/ferm test/sort.pl
84 @mkdir -p $(dir $@)
85 $(PERL) src/ferm --test $< |$(PERL) test/sort.pl >$@
87 $(STAMPDIR)/test/ipv6/%.IMPORT: export FERM_DOMAIN=ip6
88 $(STAMPDIR)/%.IMPORT: $(STAMPDIR)/%.SAVE src/import-ferm
89 $(PERL) src/import-ferm $< >$@
91 $(STAMPDIR)/%.SAVE2: $(STAMPDIR)/%.IMPORT src/ferm test/sort.pl
92 $(PERL) src/ferm --test --fast $< |$(PERL) test/sort.pl >$@
94 $(STAMPDIR)/%.sort: %.result test/sort.pl
95 @mkdir -p $(dir $@)
96 $(PERL) test/sort.pl <$< >$@
98 $(STAMPDIR)/%.check: $(STAMPDIR)/%.sort $(STAMPDIR)/%.result
99 diff -u $^
100 @touch $@
102 $(STAMPDIR)/%.check-import: $(STAMPDIR)/%.SAVE $(STAMPDIR)/%.SAVE2
103 diff -u $^
104 @touch $@
106 .PHONY : check-ferm check-import check
108 check-ferm: $(patsubst %.ferm,$(STAMPDIR)/%.check,$(FERM_SCRIPTS))
110 check-import: $(patsubst %.ferm,$(STAMPDIR)/%.check-import,$(IMPORT_SCRIPTS))
112 check: check-ferm check-import
113 @echo "All ferm unit tests finished successfully."
116 # distribution
119 .PHONY: dist
121 build/ferm-$(VERSION).tar.gz: all
122 rm -rf $(DISTDIR)
123 install -d -m 755 $(DISTDIR) $(DISTDIR)/src $(DISTDIR)/doc $(DISTDIR)/examples
124 install -m 755 src/ferm src/import-ferm $(DISTDIR)/src
125 install -m 644 ferm.service $(DISTDIR)
126 install -m 644 doc/ferm.pod doc/ferm.txt doc/ferm.html doc/ferm.1 doc/import-ferm.1 $(DISTDIR)/doc
127 install -m 644 config.mk Makefile AUTHORS COPYING NEWS README TODO $(DISTDIR)
128 install -m 644 $(wildcard examples/*.ferm) $(DISTDIR)/examples
129 cd build && tar czf ferm-$(VERSION).tar.gz ferm-$(VERSION)
131 dist: build/ferm-$(VERSION).tar.gz
134 # installation
137 .PHONY: install uninstall
139 install: all
140 install -d -m 755 $(DOCDIR)/examples $(PREFIX)/sbin $(SERVICEDIR)
141 install -m 644 AUTHORS COPYING NEWS README TODO $(DOCDIR)
142 install -m 644 examples/*.ferm $(DOCDIR)/examples
143 install -m 755 src/ferm src/import-ferm $(PREFIX)/sbin/
144 install -m 644 ferm.service $(SERVICEDIR)
146 install -d -m 755 $(DOCDIR) $(MANDIR)
147 install -m 644 doc/ferm.txt doc/ferm.html $(DOCDIR)
148 install -m 644 doc/ferm.1 doc/import-ferm.1 $(MANDIR)
149 gzip -f9 $(MANDIR)/ferm.1 $(MANDIR)/import-ferm.1
151 uninstall:
152 rm -rf $(DOCDIR)
153 rm -f $(MANDIR)/ferm.1 $(MANDIR)/import-ferm.1
154 rm -f $(SERVICEDIR)/ferm.service
155 rm -f $(PREFIX)/sbin/ferm $(PREFIX)/sbin/import-ferm
158 # misc targets
161 .PHONY: upload
163 upload: doc/ferm.html
164 scp NEWS doc/ferm.html foo-projects.org:/var/www/ferm.foo-projects.org/download/2.3/
165 scp examples/*.ferm foo-projects.org:/var/www/ferm.foo-projects.org/download/examples/