| #! /usr/bin/make |
| |
| PF_EXT_SLIB:=tcp udp icmp mac limit standard REJECT LOG unclean state multiport tos TOS mark MARK owner SNAT DNAT MASQUERADE REDIRECT MIRROR SAME |
| PF6_EXT_SLIB:=tcp udp icmpv6 standard MARK mark |
| |
| # The following may not be present, but compile them anyway. |
| PF_EXT_SLIB+=FTOS TCPMSS TTL ULOG ah esp iplimit tcpmss ttl |
| |
| # Optionals |
| PF_EXT_SLIB_OPTS:=$(foreach T,$(wildcard extensions/.*-test),$(shell KERNEL_DIR=$(KERNEL_DIR) $(T))) |
| PF6_EXT_SLIB_OPTS:=$(foreach T,$(wildcard extensions/.*-test6),$(shell KERNEL_DIR=$(KERNEL_DIR) $(T))) |
| |
| PF_EXT_SLIB+=$(PF_EXT_SLIB_OPTS) |
| PF6_EXT_SLIB+=$(PF6_EXT_SLIB_OPTS) |
| |
| OPTIONALS+=$(patsubst %,IPv4:%,$(PF_EXT_SLIB_OPTS)) |
| OPTIONALS+=$(patsubst %,IPv6:%,$(PF6_EXT_SLIB_OPTS)) |
| |
| ifndef NO_SHARED_LIBS |
| SHARED_LIBS+=$(foreach T,$(PF_EXT_SLIB),extensions/libipt_$(T).so) |
| EXTRA_INSTALLS+=$(foreach T, $(PF_EXT_SLIB), $(DESTDIR)$(LIBDIR)/iptables/libipt_$(T).so) |
| |
| ifdef DO_IPV6 |
| SHARED_LIBS+=$(foreach T,$(PF6_EXT_SLIB),extensions/libip6t_$(T).so) |
| EXTRA_INSTALLS+=$(foreach T, $(PF6_EXT_SLIB), $(DESTDIR)$(LIBDIR)/iptables/libip6t_$(T).so) |
| endif |
| else # NO_SHARED_LIBS |
| EXT_OBJS+=$(foreach T,$(PF_EXT_SLIB),extensions/libipt_$(T).o) |
| EXT_FUNC+=$(foreach T,$(PF_EXT_SLIB),ipt_$(T)) |
| EXT_OBJS+= extensions/initext.o |
| EXT6_OBJS+=$(foreach T,$(PF6_EXT_SLIB),extensions/libip6t_$(T).o) |
| EXT6_FUNC+=$(foreach T,$(PF6_EXT_SLIB),ip6t_$(T)) |
| EXT6_OBJS+= extensions/initext6.o |
| endif |
| |
| ifndef TOPLEVEL_INCLUDED |
| local: |
| cd .. && $(MAKE) $(SHARED_LIBS) |
| endif |
| |
| ifdef NO_SHARED_LIBS |
| extensions/libext.a: $(EXT_OBJS) |
| rm -f $@; ar crv $@ $(EXT_OBJS) |
| |
| extensions/libext6.a: $(EXT6_OBJS) |
| rm -f $@; ar crv $@ $(EXT6_OBJS) |
| |
| extensions/initext.o: extensions/initext.c |
| extensions/initext6.o: extensions/initext6.c |
| |
| extensions/initext.c: extensions/Makefile |
| echo "" > $@ |
| for i in $(EXT_FUNC); do \ |
| echo "extern void $${i}_init(void);" >> $@; \ |
| done |
| echo "void init_extensions(void) {" >> $@ |
| for i in $(EXT_FUNC); do \ |
| echo " $${i}_init();" >> $@; \ |
| done |
| echo "}" >> $@ |
| |
| extensions/initext6.c: extensions/Makefile |
| echo "" > $@ |
| for i in $(EXT6_FUNC); do \ |
| echo "extern void $${i}_init(void);" >> $@; \ |
| done |
| echo "void init_extensions(void) {" >> $@ |
| for i in $(EXT6_FUNC); do \ |
| echo " $${i}_init();" >> $@; \ |
| done |
| echo "}" >> $@ |
| |
| extensions/lib%.o: extensions/lib%.c |
| $(CC) $(CFLAGS) -D_INIT=$*_init -c -o $@ $< |
| |
| endif |
| |
| $(DESTDIR)$(LIBDIR)/iptables/libipt_%.so: extensions/libipt_%.so |
| @[ -d $(DESTDIR)$(LIBDIR)/iptables ] || mkdir -p $(DESTDIR)$(LIBDIR)/iptables |
| cp $< $@ |
| |
| $(DESTDIR)$(LIBDIR)/iptables/libip6t_%.so: extensions/libip6t_%.so |
| @[ -d $(DESTDIR)$(LIBDIR)/iptables ] || mkdir -p $(DESTDIR)$(LIBDIR)/iptables |
| cp $< $@ |