#!/usr/bin/make -f

ifndef BUILDROOT
	ERR := $(error Please set BUILDROOT to OpenWRT's buildroot)
endif

ARCH:=mipsel

WIFIDOG_MAJOR_VERSION := $(shell awk -F= '$$1 == "WIFIDOG_MAJOR_VERSION" {print $$2}' configure.in)
WIFIDOG_MINOR_VERSION := $(shell awk -F= '$$1 == "WIFIDOG_MINOR_VERSION" {print $$2}' configure.in)
WIFIDOG_MICRO_VERSION := $(shell awk -F= '$$1 == "WIFIDOG_MICRO_VERSION" {print $$2}' configure.in)
VERSION=$(WIFIDOG_MAJOR_VERSION).$(WIFIDOG_MINOR_VERSION).$(WIFIDOG_MICRO_VERSION)

BUILD_DIR:=$(CURDIR)/ipkg
TMP_DIR:=$(BUILD_DIR)/tmp
STAGING_DIR=$(BUILDROOT)/build_$(ARCH)/staging_dir
IPKG_DIR := $(wildcard $(BUILDROOT)/build_$(ARCH)/ipkg-utils-*/)
IPTABLES_DIR := $(wildcard $(BUILDROOT)/build_$(ARCH)/iptables-*/)
KERNEL_VERSION := $(shell awk '$$1 == "\#define" && $$2 == "UTS_RELEASE" {gsub(/["]/, "", $$3); print $$3}' $(BUILDROOT)/build_$(ARCH)/WRT54GS/release/src/linux/linux/include/linux/version.h)
KERNEL_MODULES_DIR := $(BUILDROOT)/build_$(ARCH)/WRT54GS/release/src/linux/linux/modules/lib/modules/$(KERNEL_VERSION)
UCLIBC_DIR := $(wildcard $(BUILDROOT)/build_$(ARCH)/uClibc*/)

GNU_TARGET_NAME=$(ARCH)-linux
TARGET_CROSS=$(STAGING_DIR)/bin/$(ARCH)-linux-uclibc-

CC=$(TARGET_CROSS)gcc
LD=$(TARGET_CROSS)ld
AR=$(TARGET_CROSS)ar
RANLIB=$(TARGET_CROSS)ranlib
STRIP=$(TARGET_CROSS)strip
IPKG_BUILD=$(STAGING_DIR)/bin/ipkg-build

all: binary

build: build-wifidog build-iptables build-ipkg-utils

build-wifidog: build-wifidog-stamp
build-wifidog-stamp:
	-test -f autogen.sh && ./autogen.sh
	-$(MAKE) distclean
	CC=$(CC) LD=$(LD) AR=$(AR) RANLIB=$(RANLIB) ./configure --prefix=/usr  --host=$(ARCH) --target=$(ARCH)
	$(MAKE)

	touch build-wifidog-stamp

build-ipkg-utils: build-ipkg-utils-stamp
build-ipkg-utils-stamp:
	$(MAKE) -C $(BUILDROOT) ipkg-utils
	touch build-ipkg-utils-stamp

build-iptables: build-iptables-stamp
build-iptables-stamp:
	sed "s/PF_EXT_SLIB:=icmp/PF_EXT_SLIB:=mac icmp/" $(IPTABLES_DIR)/extensions/Makefile > $(IPTABLES_DIR)/extensions/Makefile.patched
	mv -f $(IPTABLES_DIR)/extensions/Makefile.patched $(IPTABLES_DIR)/extensions/Makefile
	CC=$(CC) LD=$(LD) AR=$(AR) RANLIB=$(RANLIB) $(MAKE) -C $(IPTABLES_DIR) KERNEL_DIR=../../linux/linux/

	touch build-iptables-stamp
	 
clean:
	-$(MAKE) clean
	-$(MAKE) distclean
	$(MAKE) -C $(IPTABLES_DIR) clean
	rm -rf $(TMP_DIR)
	rm -f build-wifidog-stamp
	rm -f build-iptables-stamp
	rm -f build-ipkg-utils-stamp

install: build install-wifidog install-iptables install-kernel-modules install-pthread
	mkdir -p $(TMP_DIR)/etc
	cp $(CURDIR)/wifidog.conf $(TMP_DIR)/etc
	mkdir -p $(TMP_DIR)/usr/bin
	#OpenWrt doesn't have a full init.d architecture, but we still need the module check so we install the normal init.d script in /usr/bin/wifidog-init
	cp $(CURDIR)/scripts/init.d/wifidog $(TMP_DIR)/usr/bin/wifidog-init
	chmod +x $(TMP_DIR)/usr/bin/wifidog-init
	#And call wifidog-init from S65wifidog
	mkdir -p $(TMP_DIR)/etc/init.d
	cp $(CURDIR)/scripts/openwrt/S65wifidog $(TMP_DIR)/etc/init.d
	chmod +x $(TMP_DIR)/etc/init.d/S65wifidog

install-wifidog:
	mkdir -p $(TMP_DIR)/usr/bin
	cp $(CURDIR)/src/wifidog $(TMP_DIR)/usr/bin
	cp $(CURDIR)/src/wdctl $(TMP_DIR)/usr/bin
	$(STRIP) $(TMP_DIR)/usr/bin/wifidog
	$(STRIP) $(TMP_DIR)/usr/bin/wdctl

install-iptables:
	mkdir -p $(TMP_DIR)/usr/lib/iptables
	cp $(IPTABLES_DIR)/extensions/libipt_{mac,mark,MARK}.so $(TMP_DIR)/usr/lib/iptables

install-kernel-modules:
	mkdir -p $(TMP_DIR)/lib/modules/$(KERNEL_VERSION)/kernel/net/ipv4/netfilter
	cp $(KERNEL_MODULES_DIR)/kernel/net/ipv4/netfilter/ipt_mac.o $(TMP_DIR)/lib/modules/$(KERNEL_VERSION)/kernel/net/ipv4/netfilter

install-pthread:
	mkdir -p $(TMP_DIR)/lib
	cp $(UCLIBC_DIR)/lib/libpthread*so $(TMP_DIR)/lib
	cp $(UCLIBC_DIR)/lib/libpthread*so.0 $(TMP_DIR)/lib

binary: build install
	mkdir -p $(TMP_DIR)/CONTROL
	echo "Package: wifidog" > $(TMP_DIR)/CONTROL/control
	echo "Version: $(VERSION)" >> $(TMP_DIR)/CONTROL/control
	echo "Architecture: $(ARCH)" >> $(TMP_DIR)/CONTROL/control
	echo "Section: base" >> $(TMP_DIR)/CONTROL/control
	echo "Maintainer: WiFiDog <wifidog@listes.ilesansfil.org>" >> $(TMP_DIR)/CONTROL/control
	echo "Priority: optional" >> $(TMP_DIR)/CONTROL/control
	echo "Description: The WiFiDog project is a complete and embeedable captive portal solution for wireless community groups or individuals who wish to open a free HotSpot while still preventing abuse of their Internet connection." >> $(TMP_DIR)/CONTROL/control
	echo "Source: http://www.ilesansfil.org/wiki/WiFiDog" >> $(TMP_DIR)/CONTROL/control
	echo "/etc/wifidog.conf" > $(TMP_DIR)/CONTROL/conffiles
	$(IPKG_BUILD) -c -o root -g root $(TMP_DIR) $(CURDIR)

.PHONY: all clean build install binary

