# ebtables Makefile

CC = $(CROSS_COMPILE)gcc
AR = $(CROSS_COMPILE)ar
AR := $(CROSS_COMPILE)ar
RANLIB := $(CROSS_COMPILE)ranlib

APPL := $(addprefix ${EBTABLES_APPS_BLDDIR}/,${EBTABLES_APPS_NAME})

# full-set
# EXT_FUNC := 802_3 nat arp arpreply ip ip6 standard log redirect 
# EXT_FUNC += vlan mark_m mark pkttype stp among limit ulog nflog
# EXT_FUNC += ftos time wmm_mark
EXT_FUNC := ip ip6 standard vlan mark_m mark time ftos
EXT_FUNC += arp arpreply redirect nflog pkttype
EXT_FUNC += $(EBTABLES_APPS_OPTIONS)
EXT_FUNC_UC := $(shell echo $(EXT_FUNC) | tr a-z A-Z)
EXT_TABLES := filter nat broute
EXT_TABLES_UC := $(shell echo $(EXT_TABLES) | tr a-z A-Z)
SO_LOBJS := $(foreach T,$(EXT_FUNC), extensions/ebt_$(T).o)
SO_LOBJS += $(foreach T,$(EXT_TABLES), extensions/ebtable_$(T).o)
SO_LOBJS += libebtc.o useful_functions.o getethertype.o communication.o
SO_BOBJS := $(addprefix ${EBTABLES_APPS_BLDDIR}/,${SO_LOBJS})
SO_LIB := $(EBTABLES_APPS_BLDDIR)/$(EBTABLES_APPS_LIB)
STATIC_LIB := $(basename $(SO_LIB))_pic.a

APPL_LOBJS := ebtables.o ebtables-standalone.o
APPL_BOBJS := $(addprefix ${EBTABLES_APPS_BLDDIR}/,${APPL_LOBJS})

LOBJS := $(SO_LOBJS) $(APPL_LOBJS)
BOBJS := $(SO_BOBJS) $(APPL_BOBJS)

PROGNAME:=$(EBTABLES_APPS_NAME)
PROGRELEASE:=2
PROGVERSION_:=2.0.9
PROGVERSION:=$(PROGVERSION_)-$(PROGRELEASE)
PROGDATE:=June\ 2009
ETHERTYPESFILE:=/etc/ethertypes
EBTD_CMDLINE_MAXLN ?= 2048
EBTD_ARGC_MAX ?= 50

CFLAGS := -fPIC -g -Wall -Wunused -Os -s
CFLAGS += -I$(EBTABLES_APPS_DIR)/include
CFLAGS += -DPROGVERSION=\"$(PROGVERSION)\"
CFLAGS += -DPROGNAME=\"$(PROGNAME)\"
CFLAGS += -DPROGDATE=\"$(PROGDATE)\"
CFLAGS += -D_PATH_ETHERTYPES=\"$(ETHERTYPESFILE)\"
CFLAGS += -DEBTD_ARGC_MAX=$(EBTD_ARGC_MAX)
CFLAGS += -DEBTD_CMDLINE_MAXLN=$(EBTD_CMDLINE_MAXLN)
CFLAGS += $(foreach T,$(EXT_FUNC_UC), -DEBTD_$(T))
CFLAGS += $(foreach T,$(EXT_TABLES_UC), -DEBTD_EBTABLE_$(T))
CFLAGS += $(EBTABLES_APPS_CFLAGS)
SO_LDFLAGS := -shared -Wl,-soname,$(EBTABLES_APPS_LIB)
APPL_LDFLAGS := -L$(EBTABLES_APPS_BLDDIR) -l$(subst .so,,$(subst lib,,$(EBTABLES_APPS_LIB))) 
APPL_LDFLAGS += -Wl,-rpath-link -Wl,--allow-shlib-undefined

all: $(BOBJS) $(STATIC_LIB) $(SO_LIB) $(APPL)
	
$(STATIC_LIB): $(SO_BOBJS)
	@$(AR) rcs $@ $^
	@$(RANLIB) $@

$(SO_LIB): $(SO_BOBJS)
	@$(CC) $(SO_LDFLAGS) $(CFLAGS) -o $@ $^
	
$(APPL): $(SO_LIB) $(APPL_BOBJS)
	@$(CC) $(CFLAGS) -o $@ $(APPL_BOBJS) $(APPL_LDFLAGS)

$(EBTABLES_APPS_BLDDIR)/%.o: %.c
	@echo "Compiling $<"
	$(CC) $(CFLAGS) -c $< -o $@
	
clean:
	@rm -rf $(EBTABLES_APPS_BLDDIR)/*

ifeq (,$(findstring clean,$(MAKECMDGOALS)))
-include $(addprefix ${EBTABLES_APPS_BLDDIR}/,$(addsuffix .d,$(basename $(LOBJS))))

$(EBTABLES_APPS_BLDDIR)/%.d: %.c
	-@if [ ! -d $(@D)  ]; then mkdir -p $(@D); fi
	@echo "Generating dependency file for $<"; \
	$(CC) -M $(CFLAGS) $< >$@.tmp; \
	echo "$@ \\" > $@; \
	sed 's,\($*\)\.o[ :]*,$$(EBTABLES_APPS_BLDDIR)\/\1.o: ,g' < $@.tmp >> $@; \
	rm -f $@.tmp
endif
