#
#
# Copyright (C) 2004 by Oleg I. Vdovikin <oleg@cs.msu.su>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#

ROOT := $(shell (cd .. && pwd -P))
SRC := $(ROOT)/router
export TOP := $(ROOT)/gateway
export KERNEL_DIR := $(ROOT)/linux/linux

BUSYBOX=busybox-1.00
DROPBEAR=dropbear-0.44test4
DNSMASQ=dnsmasq-2.17
P910ND=p910nd-0.6
ETHERWAKE=etherwake-1.06
SAMBA=samba-1.9.18p10
IPROUTE2=iproute2-2.4.7-now-ss010824
E2FSPROGS=e2fsprogs-1.35
NETSNMP=net-snmp-5.1.1
IPTABLES=iptables-1.2.7a
PPP=ppp-2.4.2
PPTP=pptp-linux-1.5.0
LZMA=lzma406

CROSS=mipsel-uclibc-
CC=$(CROSS)gcc
AR=$(CROSS)ar
RANLIB=$(CROSS)ranlib

all: prep custom
	@true


custom:	busybox dropbear dnsmasq p910nd	etherwake samba iproute2 e2fsprogs iptables ppp pptp-client nas \
	ntpclient bpalogin bridge config ez-ipupdate httpd infosvr jpeg-6b lib LPRng \
	misc netconf nvram others pppoe-relay rc rcamdmips sendmail \
	shared stupid-ftpdmips test upnp utils vlan wlconf www rt2460 et.SENTRY5 libcrypto
	[ -f $(TOP)/Makefile ] || cp $(SRC)/Makefile $(TOP) && patch -d $(TOP) -p1 < Makefile.diff
	[ -f $(TOP)/Makefiles5.mk ] || cp $(SRC)/Makefiles5.* $(TOP) && patch -d $(TOP) -p1 < Makefiles5.diff
	$(MAKE) -C $(TOP) .config	
	$(MAKE) -C $(TOP)/rc clean
	$(MAKE) -C $(TOP)/infosvr clean
	$(MAKE) -C $(TOP)/vlan clean
	$(MAKE) -C $(TOP)/shared clean
	$(MAKE) -C $(TOP)/LPRng clean
	$(MAKE) -C $(TOP)/httpd clean
	[ -f $(TOP)/utils/wl ] || cp $(SRC)/mipsel-uclibc/install/utils/usr/sbin/wl $(TOP)/utils
	cp iBox_title_all_HDD.jpg $(TOP)/www/asus/web_asus_en/graph/
	@echo
	@echo Sources prepared for compilation
	@echo

prep:
	@mkdir -p $(TOP)

$(ROOT)/lzma: $(LZMA).zip
	@rm -rf $@ && mkdir -p $@
	unzip -q $^ -d $@
	patch -d $@ -p1 < $(LZMA).patch

lzma: $(ROOT)/lzma
	@true

kernel-mrproper:
	$(MAKE) -C $(KERNEL_DIR) mrproper
	$(MAKE) -C $(KERNEL_DIR)/arch/mips/brcm-boards/bcm947xx/compressed/ clean

kernel: kernel-mrproper 
	@echo Patching kernel...
	@./patch.sh $(KERNEL_DIR) wl500g-1.8.1.7-kernel.patch wl500g-1.8.1.7-kernel-usb.patch \
		wl500g-1.8.1.7-kernel-ide.patch wl500g-1.8.1.7-kernel-printer-asus.patch \
		wl500g-1.8.1.7-kernel-printer-13.patch wl500g-1.8.1.7-kernel-printer-channel.patch \
		wl500g-1.9.2.6-kernel-robo.patch wl500g-1.9.2.6-kernel-printer-undo.patch \
		wl500g-1.9.2.6-kernel-mppe-mppc-0.98.patch wl500g-1.9.2.6-kernel-lzma.patch \
		wl500g-1.9.2.6-kernel-mksquashfs-lzma.patch
	cp wl500g-1.9.2.6-kernel.config $(KERNEL_DIR)/arch/mips/defconfig-bcm947xx

$(TOP)/busybox: $(BUSYBOX).tar.bz2 $(BUSYBOX).patch
	@rm -rf $(TOP)/$(BUSYBOX) $(TOP)/busybox
	tar xjf $(BUSYBOX).tar.bz2 -C $(TOP)
	patch -d $(TOP)/$(BUSYBOX) -p1 < $(BUSYBOX).patch
	cp $(BUSYBOX).config $(TOP)/$(BUSYBOX)/sysdeps/linux/defconfig
	mv $(TOP)/$(BUSYBOX) $(TOP)/busybox

busybox-diff:
	@rm -rf $(TOP)/$(BUSYBOX)
	tar xjf $(BUSYBOX).tar.bz2 -C $(TOP)
	make -C $(TOP)/busybox distclean
	-(cd $(TOP) && diff -BurN $(BUSYBOX) busybox) > $(BUSYBOX).patch

busybox: $(TOP)/busybox
	@true

$(TOP)/dropbear/config.h:
	@rm -rf $(TOP)/$(DROPBEAR) $(TOP)/dropbear
	tar xjf $(DROPBEAR).tar.bz2 -C $(TOP)
	patch -d $(TOP)/$(DROPBEAR) -p1 < $(DROPBEAR).patch
	cd $(TOP)/$(DROPBEAR) && \
		CC=$(CC) ./configure --host=mipsel-linux --disable-zlib --disable-shadow \
		--disable-lastlog --disable-utmp --disable-utmpx --disable-wtmp --disable-wtmpx \
		--disable-libutil --disable-loginfunc --disable-pututline --disable-pututxline
	mv $(TOP)/$(DROPBEAR) $(TOP)/dropbear

dropbear-diff: #$(TOP)/dropbear/config.h
	@rm -rf $(TOP)/$(DROPBEAR)
	tar xjf $(DROPBEAR).tar.bz2 -C $(TOP)
	(cd $(TOP) && diff -Bur $(DROPBEAR) dropbear | grep -v ^Only) > $(DROPBEAR).patch
	diffstat $(DROPBEAR).patch

dropbear: $(TOP)/dropbear/config.h
	@true

$(TOP)/e2fsprogs/Makefile:
	@rm -rf $(TOP)/$(E2FSPROGS) $(TOP)/e2fsprogs
	tar xzf $(E2FSPROGS).tar.gz -C $(TOP)
	patch -d $(TOP)/$(E2FSPROGS) -p1 < $(E2FSPROGS).patch
	mv $(TOP)/$(E2FSPROGS) $(TOP)/e2fsprogs
	cd $(TOP)/e2fsprogs && \
		CC=$(CC) AR=$(AR) RANLIB=$(RANLIB) ./configure --host=mipsel-linux \
		--disable-evms --disable-swapfs --disable-debugfs --disable-imager \
		--disable-resizer --enable-dynamic-e2fsck --with-gnu-ld --disable-nls

e2fsprogs: $(TOP)/e2fsprogs/Makefile
	@true

$(TOP)/netsnmp/Makefile:
	@rm -rf $(TOP)/$(NETSNMP) $(TOP)/netsnmp
	tar xzf $(NETSNMP).tar.gz -C $(TOP)
	#patch -d $(TOP)/$(NETSNMP) -p1 < $(NETSNMP).patch
	mv $(TOP)/$(NETSNMP) $(TOP)/netsnmp
	cd $(TOP)/netsnmp && CC=$(CC) AR=$(AR) \
		./configure --host=mipsel-linux --with-endianness=little --with-cflags="-Os -ffunction-sections" \
		--disable-applications --disable-manuals --disable-scripts --disable-mibs \
		--disable-mib-loading --disable-debugging --disable-privacy --enable-internal-md5 \
		--enable-agentx-dom-sock-only --without-rpm --without-opaque-special-types \
		--with-persistent-directory=/usr/local/net-snmp/ --with-default-snmp-version=2 \
		--with-sys-location=Unknown --with-sys-contact=Administrator --with-logfile=/var/log/snmpd.log \
		--with-out-transports=UDPIPv6,TCPIPv6,AAL5PVC,IPX,TCP,Unix,Callback \
		--with-out-mib-modules="snmpv3mibs ucd_snmp agent_mibs agentx notification target utilities mibII" \
		--with-mib-modules="mibII/system_mib mibII/interfaces" --with-gnu-ld --enable-shared=no

netsnmp: $(TOP)/netsnmp/Makefile
	@true

$(TOP)/iproute2: $(IPROUTE2).tar.gz
	@rm -rf $(TOP)/$@
	tar xzf $^ -C $(TOP)
	patch -d $@ -p1 < $(IPROUTE2).patch && touch $@

iproute2: $(TOP)/iproute2
	@true

$(TOP)/dnsmasq: $(DNSMASQ).tar.gz
	@rm -rf $(TOP)/$(DNSMASQ) $@
	tar xzf $^ -C $(TOP)
	patch -d $(TOP)/$(DNSMASQ) -p1 < $(DNSMASQ).patch
	mv $(TOP)/$(DNSMASQ) $(TOP)/dnsmasq && touch $@

dnsmasq-diff: $(DNSMASQ).tar.gz
	@rm -rf $(TOP)/$(DNSMASQ)
	tar xzf $^ -C $(TOP)
	-make -C $(TOP)/dnsmasq clean
	-(cd $(TOP) && diff -BurN $(DNSMASQ) dnsmasq) > $(DNSMASQ).patch

dnsmasq: $(TOP)/dnsmasq
	@true

$(TOP)/p910nd: $(P910ND).tar.bz2
	@rm -rf $(TOP)/$(P910ND) $@
	tar xjf $^ -C $(TOP)
	patch -d $(TOP)/$(P910ND) -p1 < $(P910ND).patch
	mv $(TOP)/$(P910ND) $@ && touch $@

p910nd-diff:
	@rm -rf $(TOP)/$(P910ND)
	tar xjf $(P910ND).tar.bz2 -C $(TOP)
	-rm -f $(TOP)/p910nd/p910nd
	-cd $(TOP) && diff -BurN $(P910ND) p910nd > $(P910ND).patch

p910nd: $(TOP)/p910nd
	@true

$(TOP)/etherwake: $(ETHERWAKE).tar.gz
	@rm -rf $(TOP)/$(ETHERWAKE) $@
	tar xzf $^ -C $(TOP)
	mv $(TOP)/$(ETHERWAKE) $@ && touch $@

etherwake: $(TOP)/etherwake
	@true

$(TOP)/samba: $(SAMBA).tar.gz
	@rm -rf $(TOP)/$(SAMBA) $@
	tar xzf $^ -C $(TOP)
	patch -d $(TOP)/$(SAMBA) -p1 < $(SAMBA).patch
	tar xzvf $(SAMBA)-codepages.tar.gz -C $(TOP)/$(SAMBA)
	mv $(TOP)/$(SAMBA) $@ && touch $@

samba-diff: $(SAMBA).tar.gz
	@rm -rf $(TOP)/$(SAMBA)
	tar xzf $^ -C $(TOP)
	-make -C $(TOP)/samba/source clean
	(cd $(TOP) && diff -BurN $(SAMBA) samba | grep -v ^Binary.*differ$$) > $(SAMBA).patch
	diffstat $(SAMBA).patch

samba: $(TOP)/samba
	@true

$(TOP)/iptables: $(IPTABLES).tar.bz2
	@rm -rf $(TOP)/$(IPTABLES) $@
	tar xjf $^ -C $(TOP)
	patch -d $(TOP)/$(IPTABLES) -p1 < $(IPTABLES).patch
	mv $(TOP)/$(IPTABLES) $@ && touch $@

iptables: $(TOP)/iptables
	@true

$(TOP)/ppp: $(PPP).tar.gz
	@rm -rf $(TOP)/$(PPP) $@
	tar xzf $^ -C $(TOP)
	patch -d $(TOP)/$(PPP) -p1 < $(PPP)-fix.patch
	patch -d $(TOP)/$(PPP) -p1 < $(PPP).patch
	patch -d $(TOP)/$(PPP) -p1 < $(PPP)-mppe.patch
	mv $(TOP)/$(PPP) $@ && touch $@

$(TOP)/ppp/Makefile: $(TOP)/ppp
	cd $^ && ./configure --prefix=/usr --sysconfdir=/tmp

ppp: $(TOP)/ppp/Makefile
	@true

$(TOP)/pptp-client: $(PPTP).tar.gz
	@rm -rf $(TOP)/$(PPTP) $@
	tar xzf $^ -C $(TOP)
	patch -d $(TOP)/$(PPTP) -p1 < $(PPTP).patch
	mv $(TOP)/$(PPTP) $@ && touch $@

pptp-client: $(TOP)/pptp-client
	@true

nas:
	patch -d $(TOP) -p1 < $@.diff
	cp $(SRC)/mipsel-uclibc/install/nas/usr/sbin/nas $(TOP)/$@

upnp:
	[ ! -d $(SRC)/../tools/$@ ] || [ -d $(TOP)/$@ ] || \
		tar -C $(SRC)/../tools -cf - $@ | tar -C $(TOP) -xf -
	[ ! -f $@.diff ] || patch -d $(TOP) -p1 --no-backup-if-mismatch < $@.diff

upnp-diff:
	(cd .. && diff -BurN tools/upnp gateway/upnp | grep -v ^Binary.*differ$$) > upnp.diff
	diffstat upnp.diff

%:
	[ ! -d $(SRC)/$* ] || [ -d $(TOP)/$* ] || \
		tar -C $(SRC) -cf - $* | tar -C $(TOP) -xf -
	[ ! -f $*.diff ] || patch -d $(TOP) -p1 --no-backup-if-mismatch < $*.diff

www-diff:
	(cd .. && diff -BurN router/www/asus/web_asus_en gateway/www/asus/web_asus_en | grep -v ^Binary.*differ$$) > www.diff
	(cd .. && diff -BuN router/www/asus/ gateway/www/asus/ | grep -v ^Binary.*differ$$) >> www.diff
	diffstat www.diff

%-diff:
	(cd .. && diff -BurN router/$* gateway/$* | grep -v ^Binary.*differ$$) > $*.diff
	diffstat $*.diff


