#! /usr/bin/make

EXT_FUNC+=ieee802_3 nat arp arpreply ip standard log redirect vlan mark_m mark \
          pkttype stp among limit ulog
EXT_TABLES+=filter nat broute
EXT_OBJS_EBT+=$(foreach T,$(EXT_FUNC), extensions/ebt_$(T).o)
EXT_OBJS_EBT+=extensions/initext_ebt.o
EXT_OBJS_EBTABLE+=$(foreach T,$(EXT_TABLES), extensions/ebtable_$(T).o)
EXT_OBJS_EBTABLE+=extensions/initext_ebtable.o
EXT_LIBS+=extensions/libebt.a
EXT_LIBS+=extensions/libebtable.a
EXT_LIBSI+=$(foreach T,$(EXT_FUNC), -lebt_$(T))
EXT_LIBSI+=$(foreach T,$(EXT_TABLES), -lebtable_$(T))

extensions/initext_ebt.o:  extensions/initext_ebt.c

extensions/initext_ebt.c: extensions/Makefile
	echo "" > $@
	for i in $(EXT_FUNC); do \
		echo "extern void $${i}_ebt_init(void);" >> $@; \
	done 
	echo "void init_extensions(void) {" >> $@  
	for i in $(EXT_FUNC); do \
		echo "  $${i}_ebt_init();" >> $@; \
	done
	echo "}" >> $@

extensions/initext_ebtable.o:  extensions/initext_ebtable.c

extensions/initext_ebtable.c: extensions/Makefile
	echo "" > $@
	for i in $(EXT_TABLES); do \
		echo "extern void $${i}_ebtables_init(void);" >> $@; \
	done 
	echo "void init_tables(void) {" >> $@  
	for i in $(EXT_TABLES); do \
		echo "  $${i}_ebtables_init();" >> $@; \
	done
	echo "}" >> $@

extensions/libebt.a: $(EXT_OBJS_EBT)
	rm -f $@ ; $(AR) crv $@ $(EXT_OBJS_EBT)

extensions/libebtable.a: $(EXT_OBJS_EBTABLE)
	rm -f $@ ; $(AR) crv $@ $(EXT_OBJS_EBTABLE)

extensions/ebt_ieee802_3.o: extensions/ebt_ieee802_3.c
	$(CC) $(CFLAGS) -D_INIT=ieee802_3_ebt_init -Iinclude -c -o $@ $<

extensions/ebt_nat.o: extensions/ebt_nat.c
	$(CC) $(CFLAGS) -D_INIT=nat_ebt_init -Iinclude -c -o $@ $<

extensions/ebt_arp.o: extensions/ebt_arp.c
	$(CC) $(CFLAGS) -D_INIT=arp_ebt_init -Iinclude -c -o $@ $<

extensions/ebt_arpreply.o: extensions/ebt_arpreply.c
	$(CC) $(CFLAGS) -D_INIT=arpreply_ebt_init -Iinclude -c -o $@ $<

extensions/ebt_ip.o: extensions/ebt_ip.c
	$(CC) $(CFLAGS) -D_INIT=ip_ebt_init -Iinclude -c -o $@ $<

extensions/ebt_standard.o: extensions/ebt_standard.c
	$(CC) $(CFLAGS) -D_INIT=standard_ebt_init -Iinclude -c -o $@ $<

extensions/ebt_log.o: extensions/ebt_log.c
	$(CC) $(CFLAGS) -D_INIT=log_ebt_init -Iinclude -c -o $@ $<

extensions/ebt_redirect.o: extensions/ebt_redirect.c
	$(CC) $(CFLAGS) -D_INIT=redirect_ebt_init -Iinclude -c -o $@ $<

extensions/ebt_vlan.o: extensions/ebt_vlan.c
	$(CC) $(CFLAGS) -D_INIT=vlan_ebt_init -Iinclude -c -o $@ $<

extensions/ebt_mark_m.o: extensions/ebt_mark_m.c
	$(CC) $(CFLAGS) -D_INIT=mark_m_ebt_init -Iinclude -c -o $@ $<

extensions/ebt_mark.o: extensions/ebt_mark.c
	$(CC) $(CFLAGS) -D_INIT=mark_ebt_init -Iinclude -c -o $@ $<

extensions/ebt_pkttype.o: extensions/ebt_pkttype.c
	$(CC) $(CFLAGS) -D_INIT=pkttype_ebt_init -Iinclude -c -o $@ $<

extensions/ebt_stp.o: extensions/ebt_stp.c
	$(CC) $(CFLAGS) -D_INIT=stp_ebt_init -Iinclude -c -o $@ $<

extensions/ebt_among.o: extensions/ebt_among.c
	$(CC) $(CFLAGS) -D_INIT=among_ebt_init -Iinclude -c -o $@ $<

extensions/ebt_limit.o: extensions/ebt_limit.c
	$(CC) $(CFLAGS) -D_INIT=limit_ebt_init -Iinclude -c -o $@ $<

extensions/ebt_ulog.o: extensions/ebt_ulog.c
	$(CC) $(CFLAGS) -D_INIT=ulog_ebt_init -Iinclude -c -o $@ $<

extensions/ebtable_filter.o: extensions/ebtable_filter.c
	$(CC) $(CFLAGS) -D_INIT=filter_ebtables_init -Iinclude -c -o $@ $<

extensions/ebtable_nat.o: extensions/ebtable_nat.c
	$(CC) $(CFLAGS) -D_INIT=nat_ebtables_init -Iinclude -c -o $@ $<

extensions/ebtable_broute.o: extensions/ebtable_broute.c
	$(CC) $(CFLAGS) -D_INIT=broute_ebtables_init -Iinclude -c -o $@ $<


