#!/usr/bin/make

######################################################################
# YOU SHOULD NOT NEED TO TOUCH ANYTHING BELOW THIS LINE
######################################################################

TOPDIR=../..

ifndef KERNEL_DIR
KERNEL_DIR=/lib/modules/`uname -r`/build
endif
ifndef KBUILD_OUTPUT
KBUILD_OUTPUT=$(KERNEL_DIR)
endif
ifndef IP_NF_SET_MAX
IP_NF_SET_MAX=256
endif
ifndef IP_NF_SET_HASHSIZE
IP_NF_SET_HASHSIZE=1024
endif
ifndef V
V=0
endif

IPSET_VERSION:=4.2

PREFIX:=/usr/local
LIBDIR:=$(PREFIX)/lib
BINDIR:=$(PREFIX)/sbin
MANDIR:=$(PREFIX)/man
INCDIR:=$(PREFIX)/include
#IPSET_LIB_DIR:=$(LIBDIR)/ipset
IPSET_LIB_DIR:=/lib

# directory for new iptables releases
RELEASE_DIR:=/tmp

COPT_FLAGS:=-O2
WARN_FLAGS:=-Wall

ifndef NO_EXTRA_WARN_FLAGS
    WARN_FLAGS+=$(EXTRA_WARN_FLAGS)
endif

ABI_FLAGS:=
CFLAGS:=$(ABI_FLAGS) $(COPT_FLAGS) $(WARN_FLAGS) -I$(TOPDIR)/$(LINUXDIR)/include/ -I. # -g -DIPSET_DEBUG
SH_CFLAGS:=$(CFLAGS) -fPIC
LDFLAGS:=$(ABI_FLAGS)
SETTYPES:=webcategory
#SETTYPES:=ipmap portmap macipmap webcategory
#SETTYPES+=iptree iptreemap
#SETTYPES+=iphash nethash ipporthash ipportiphash ipportnethash
SETTYPES+=macipmap iphash setlist


PROGRAMS=ipset
SHARED_LIBS=$(foreach T, $(SETTYPES),libipset_$(T).so)
INSTALL=$(DESTDIR)$(BINDIR)/ipset $(DESTDIR)$(MANDIR)/man8/ipset.8
INSTALL+=$(foreach T, $(SETTYPES), $(DESTDIR)$(LIBDIR)/ipset/libipset_$(T).so)

all: binaries

.PHONY: tests

tests:
	cd tests; ./runtest.sh

binaries: $(PROGRAMS) $(SHARED_LIBS)

clean: $(EXTRA_CLEANS)
	rm -rf $(PROGRAMS) $(SHARED_LIBS) *.o *~ tests/*~
	#[ -f $(KERNEL_DIR)/net/ipv4/netfilter/Config.in ] || (cd kernel; make -C $(KERNEL_DIR) M=`pwd` clean)

#The ipset(8) self
ipset.o: ipset.c ipset.h
	echo "$(SHARED_LIBS)"
	$(CC) $(CFLAGS) -DIPSET_VERSION=\"$(IPSET_VERSION)\" -DIPSET_LIB_DIR=\"$(IPSET_LIB_DIR)\" -c -o $@ $<

ipset: ipset.o
	$(CC) $(CFLAGS) $(LDFLAGS) -rdynamic -o $@ $^ -ldl

#Pooltypes
ipset_%.o: ipset_%.c ipset.h
	$(CC) $(SH_CFLAGS) -o $@ -c $<

libipset_%.so: ipset_%.o
	$(CC) -shared $(LDFLAGS) -o $@ $<
	
romfs:
	$(ROMFSINST) $(PROGRAMS) /sbin/$(PROGRAMS)
	$(foreach T, $(SHARED_LIBS), $(ROMFSINST) $(T) /lib/;)
