Merge to iptables-1.3.5
[iptables.git] / extensions / Makefile
1 #! /usr/bin/make
2
3 # WARNING:
4 # only add extensions here that are either present in the kernel, or whose
5 # header files are present in the include/linux directory of this iptables
6 # package (HW)
7 #
8 PF_EXT_SLIB:=ah comment connlimit connmark conntrack dscp ecn esp hashlimit helper icmp iprange length limit mac mark multiport owner physdev pkttype policy realm rpc sctp standard state tcp tcpmss tos ttl udp unclean CLASSIFY CONNMARK DNAT DSCP ECN LOG MARK MASQUERADE MIRROR NETMAP NFQUEUE NOTRACK REDIRECT REJECT SAME SNAT TARPIT TCPMSS TOS TRACE TTL ULOG
9 PF6_EXT_SLIB:=connmark eui64 hl icmpv6 length limit mac mark multiport owner physdev policy standard state tcp udp CONNMARK HL LOG NFQUEUE MARK TRACE
10
11 # Optionals
12 PF_EXT_SLIB_OPTS:=$(foreach T,$(wildcard extensions/.*-test),$(shell KERNEL_DIR=$(KERNEL_DIR) $(T)))
13 PF6_EXT_SLIB_OPTS:=$(foreach T,$(wildcard extensions/.*-test6),$(shell KERNEL_DIR=$(KERNEL_DIR) $(T)))
14
15 PF_EXT_ALL_SLIB:=$(patsubst extensions/libipt_%.c, %, $(wildcard extensions/libipt_*.c))
16 PF6_EXT_ALL_SLIB:=$(patsubst extensions/libip6t_%.c, %, $(wildcard extensions/libip6t_*.c))
17
18 PF_EXT_MAN_ALL_MATCHES:=$(foreach T,$(PF_EXT_ALL_SLIB),$(shell test -f extensions/libipt_$(T).man && grep -q register_match extensions/libipt_$(T).c  && echo $(T)))
19 PF_EXT_MAN_ALL_TARGETS:=$(foreach T,$(PF_EXT_ALL_SLIB),$(shell test -f extensions/libipt_$(T).man && grep -q register_target extensions/libipt_$(T).c && echo $(T)))
20 PF6_EXT_MAN_ALL_MATCHES:=$(foreach T,$(PF6_EXT_ALL_SLIB),$(shell test -f extensions/libip6t_$(T).man && grep -q register_match6 extensions/libip6t_$(T).c  && echo $(T)))
21 PF6_EXT_MAN_ALL_TARGETS:=$(foreach T,$(PF6_EXT_ALL_SLIB),$(shell test -f extensions/libip6t_$(T).man && grep -q register_target6 extensions/libip6t_$(T).c && echo $(T)))
22
23 PF_EXT_MAN_MATCHES:=$(filter $(PF_EXT_ALL_SLIB), $(PF_EXT_MAN_ALL_MATCHES))
24 PF_EXT_MAN_TARGETS:=$(filter $(PF_EXT_ALL_SLIB), $(PF_EXT_MAN_ALL_TARGETS))
25 PF_EXT_MAN_EXTRA_MATCHES:=$(filter-out $(PF_EXT_MAN_MATCHES), $(PF_EXT_MAN_ALL_MATCHES))
26 PF_EXT_MAN_EXTRA_TARGETS:=$(filter-out $(PF_EXT_MAN_TARGETS), $(PF_EXT_MAN_ALL_TARGETS))
27 PF6_EXT_MAN_MATCHES:=$(filter $(PF6_EXT_ALL_SLIB), $(PF6_EXT_MAN_ALL_MATCHES))
28 PF6_EXT_MAN_TARGETS:=$(filter $(PF6_EXT_ALL_SLIB), $(PF6_EXT_MAN_ALL_TARGETS))
29 PF6_EXT_MAN_EXTRA_MATCHES:=$(filter-out $(PF6_EXT_MAN_MATCHES), $(PF6_EXT_MAN_ALL_MATCHES))
30 PF6_EXT_MAN_EXTRA_TARGETS:=$(filter-out $(PF6_EXT_MAN_TARGETS), $(PF6_EXT_MAN_ALL_TARGETS))
31
32
33 allman:
34         @echo ALL_SLIB: $(PF_EXT_ALL_SLIB)
35         @echo ALL_MATCH: $(PF_EXT_MAN_ALL_MATCHES)
36         @echo ALL_TARGET: $(PF_EXT_MAN_ALL_TARGETS)
37
38 PF_EXT_SLIB+=$(PF_EXT_SLIB_OPTS)
39 PF6_EXT_SLIB+=$(PF6_EXT_SLIB_OPTS)
40
41 OPTIONALS+=$(patsubst %,IPv4:%,$(PF_EXT_SLIB_OPTS))
42 OPTIONALS+=$(patsubst %,IPv6:%,$(PF6_EXT_SLIB_OPTS))
43
44 ifndef NO_SHARED_LIBS
45 SHARED_LIBS+=$(foreach T,$(PF_EXT_SLIB),extensions/libipt_$(T).so)
46 EXTRA_INSTALLS+=$(foreach T, $(PF_EXT_SLIB), $(DESTDIR)$(LIBDIR)/iptables/libipt_$(T).so)
47
48 ifeq ($(DO_IPV6), 1)
49 SHARED_LIBS+=$(foreach T,$(PF6_EXT_SLIB),extensions/libip6t_$(T).so)
50 EXTRA_INSTALLS+=$(foreach T, $(PF6_EXT_SLIB), $(DESTDIR)$(LIBDIR)/iptables/libip6t_$(T).so)
51 endif
52 else    # NO_SHARED_LIBS
53 EXT_OBJS+=$(foreach T,$(PF_EXT_SLIB),extensions/libipt_$(T).o)
54 EXT_FUNC+=$(foreach T,$(PF_EXT_SLIB),ipt_$(T))
55 EXT_OBJS+= extensions/initext.o
56 ifeq ($(DO_IPV6), 1)
57 EXT6_OBJS+=$(foreach T,$(PF6_EXT_SLIB),extensions/libip6t_$(T).o)
58 EXT6_FUNC+=$(foreach T,$(PF6_EXT_SLIB),ip6t_$(T))
59 EXT6_OBJS+= extensions/initext6.o
60 endif   # DO_IPV6
61 endif   # NO_SHARED_LIBS
62
63 ifndef TOPLEVEL_INCLUDED
64 local:
65         cd .. && $(MAKE) $(SHARED_LIBS)
66 endif
67
68 ifdef NO_SHARED_LIBS
69 extensions/libext.a: $(EXT_OBJS)
70         rm -f $@; ar crv $@ $(EXT_OBJS)
71
72 extensions/libext6.a: $(EXT6_OBJS)
73         rm -f $@; ar crv $@ $(EXT6_OBJS)
74
75 extensions/initext.o: extensions/initext.c
76 extensions/initext6.o: extensions/initext6.c
77
78 extensions/initext.c: extensions/Makefile
79         echo "" > $@
80         for i in $(EXT_FUNC); do \
81                 echo "extern void $${i}_init(void);" >> $@; \
82         done
83         echo "void init_extensions(void) {" >> $@
84         for i in $(EXT_FUNC); do \
85                 echo "  $${i}_init();" >> $@; \
86         done
87         echo "}" >> $@
88
89 extensions/initext6.c: extensions/Makefile
90         echo "" > $@
91         for i in $(EXT6_FUNC); do \
92                 echo "extern void $${i}_init(void);" >> $@; \
93         done
94         echo "void init_extensions(void) {" >> $@
95         for i in $(EXT6_FUNC); do \
96                 echo "  $${i}_init();" >> $@; \
97         done
98         echo "}" >> $@
99
100 extensions/lib%.o: extensions/lib%.c
101         $(CC) $(CFLAGS) -D_INIT=$*_init -c -o $@ $<
102
103 endif
104  
105 EXTRAS += extensions/libipt_targets.man
106 extensions/libipt_targets.man: $(patsubst %,extensions/libipt_%.man,$(PF_EXT_MAN_ALL_TARGETS))
107         @for ext in $(PF_EXT_MAN_TARGETS); do \
108             echo ".SS $$ext" ;\
109             cat extensions/libipt_$$ext.man ;\
110         done >extensions/libipt_targets.man
111         @if [ -n "$(PF_EXT_MAN_EXTRA_TARGETS)" ]; then \
112             extra=$(PF_EXT_MAN_EXTRA_TARGETS) ;\
113             for ext in $${extra:-""}; do \
114                 echo ".SS $$ext (not supported, see Patch-O-Matic)" ;\
115                 cat extensions/libipt_$$ext.man ;\
116             done ;\
117         fi >>extensions/libipt_targets.man
118
119 EXTRAS += extensions/libipt_matches.man
120 extensions/libipt_matches.man: $(patsubst %,extensions/libipt_%.man,$(PF_EXT_MAN_ALL_MATCHES))
121         @for ext in $(PF_EXT_MAN_MATCHES); do \
122             echo ".SS $$ext" ;\
123             cat extensions/libipt_$$ext.man ;\
124         done >extensions/libipt_matches.man
125         @if [ -n "$(PF_EXT_MAN_EXTRA_MATCHES)" ]; then \
126             extra=$(PF_EXT_MAN_EXTRA_MATCHES) ;\
127             for ext in $${extra:-""}; do \
128                 echo ".SS $$ext (not supported, see Patch-O-Matic)" ;\
129                 cat extensions/libipt_$$ext.man ;\
130             done ;\
131         fi >>extensions/libipt_matches.man
132
133 EXTRAS += extensions/libip6t_targets.man
134 extensions/libip6t_targets.man: $(patsubst %, extensions/libip6t_%.man, $(PF6_EXT_MAN_ALL_TARGETS))
135         @for ext in $(PF6_EXT_MAN_TARGETS); do \
136             echo ".SS $$ext" ;\
137             cat extensions/libip6t_$$ext.man ;\
138         done >extensions/libip6t_targets.man
139         @if [ -n "$(PF6_EXT_MAN_EXTRA_TARGETS)" ]; then \
140             extra=$(PF6_EXT_MAN_EXTRA_TARGETS) ;\
141             for ext in $${extra:-""}; do \
142                 echo ".SS $$ext (not supported, see Patch-O-Matic)" ;\
143                 cat extensions/libip6t_$$ext.man ;\
144             done ;\
145         fi >>extensions/libip6t_targets.man
146
147 EXTRAS += extensions/libip6t_matches.man
148 extensions/libip6t_matches.man: $(patsubst %, extensions/libip6t_%.man, $(PF6_EXT_MAN_ALL_MATCHES))
149         @for ext in $(PF6_EXT_MAN_MATCHES); do \
150             echo ".SS $$ext" ;\
151             cat extensions/libip6t_$$ext.man ;\
152         done >extensions/libip6t_matches.man
153         @if [ -n "$(PF6_EXT_MAN_EXTRA_MATCHES)" ]; then \
154             extra=$(PF6_EXT_MAN_EXTRA_MATCHES) ;\
155             for ext in $${extra:-""}; do \
156                 echo ".SS $$ext (not supported, see Patch-O-Matic)" ;\
157                 cat extensions/libip6t_$$ext.man ;\
158             done ;\
159         fi >>extensions/libip6t_matches.man
160
161 $(DESTDIR)$(LIBDIR)/iptables/libipt_%.so: extensions/libipt_%.so
162         @[ -d $(DESTDIR)$(LIBDIR)/iptables ] || mkdir -p $(DESTDIR)$(LIBDIR)/iptables
163         cp $< $@
164
165 $(DESTDIR)$(LIBDIR)/iptables/libip6t_%.so: extensions/libip6t_%.so
166         @[ -d $(DESTDIR)$(LIBDIR)/iptables ] || mkdir -p $(DESTDIR)$(LIBDIR)/iptables
167         cp $< $@