#
#
# 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.1.3
DROPBEAR=dropbear-0.50
DNSMASQ=dnsmasq-2.22
P910ND=p910nd-0.7
SAMBA=samba-2.0.10
IPROUTE2=iproute2-2.4.7-now-ss010824
E2FSPROGS=e2fsprogs-1.35
UCDSNMP=ucd-snmp-3.6.2
IPTABLES=iptables-1.2.7a
PPP=ppp-2.4.2
PPTP=pptp-1.6.0
LZMA=lzma406
LOADER=loader-0.04
NFSUTILS=nfs-utils-1.0.7
PORTMAP=portmap_4
RADVD=radvd-0.7.2
L2TP=rp-l2tp-0.4
IGMPPROXY=igmpproxy-src-0.1-beta2
VSFTPD=vsftpd-2.0.6
UDPXY=udpxy.wl.0.1-37

UCLIBC=uClibc-0.9.19

ET=et-4.108.9
WL=wl-4.150.10.16
NAS=nas-4.150.10.5
LIBBCMCRYPTO=libbcmcrypto-3.130.20
WLCONF=wlconf

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

all: prep custom
	@true

$(ROOT)/uClibc:
	@rm -rf $(ROOT)/$(UCLIBC) $@
	tar xjf uClibc/$(UCLIBC).tar.bz2 -C $(ROOT)
	@cd uClibc && ../patch.sh $(ROOT)/$(UCLIBC) uClibc-0.9.19.diff \
		uClibc-0.9.19-resolv.patch uClibc-0.9.19-dn_expand.patch \
		uClibc-0.9.19-timezones.patch uClibc-0.9.19-trunc64.patch
	cp uClibc/$(UCLIBC).config $(ROOT)/$(UCLIBC)/.config
	mv $(ROOT)/$(UCLIBC) $@

uClibc: $(ROOT)/uClibc
	make -C $^ all install CROSS=mipsel-linux- HOSTCC="gcc -m32"
	rm -f /opt/brcm/hndtools-mipsel-uclibc
ifeq ($(strip $(UCLIBC)),uClibc-0.9.19)
	ln -s hndtools-mipsel-uclibc-3.2.3-full /opt/brcm/hndtools-mipsel-uclibc
else
	ln -s hndtools-mipsel-uclibc-0.9.27 /opt/brcm/hndtools-mipsel-uclibc
endif

custom:	loader busybox dropbear dnsmasq p910nd samba iproute2 iptables ppp pptp \
	nfs-utils portmap nas radvd ucdsnmp rp-l2tp igmpproxy vsftpd udpxy \
	ntpclient bpalogin bridge config ez-ipupdate httpd infosvr jpeg-6b lib LPRng \
	misc netconf nvram others pppoe-relay rc rcamdmips sendmail \
	shared test upnp utils vlan wlconf www rt2460 libbcmcrypto
	[ -f $(TOP)/Makefile ] || cp $(SRC)/Makefile $(TOP) && patch -d $(TOP) -p1 < Makefile.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 $(ROOT)/wl/mipsel-uclibc/wl $(TOP)/utils
	cp iBox_title_all.jpg $(TOP)/www/asus/web_asus_en/graph/
	cp iBox_title_all_HDD.jpg $(TOP)/www/asus/web_asus_en/graph/
	cp iBox_title_all_550g.jpg $(TOP)/www/asus/web_asus_en/graph/
	tar -C $(ROOT) -xjf asustrx.tar.bz2 
	@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

et:
	[ -d $(ROOT)/$(ET).orig ] || mv $(ROOT)/et $(ROOT)/$(ET).orig
	tar -C $(ROOT) -xzf $(ET).tar.gz
	patch -d $(ROOT)/et -p1 --no-backup-if-mismatch < $(ET).patch

wl:
	[ -d $(ROOT)/$(WL).orig ] || mv $(ROOT)/wl $(ROOT)/$(WL).orig
	tar -C $(ROOT) -xzf $(WL).tar.gz

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

kernel: lzma et wl kernel-mrproper 
	@echo Patching kernel...
	@cd kernel && ../patch.sh $(KERNEL_DIR) kernel-brcm-src.patch kernel.patch \
		kernel-ide.patch kernel-printer-asus.patch kernel-printer-13.patch \
		kernel-printer-channel.patch kernel-printer-undo.patch kernel-printer-14.patch \
		kernel-printer-undo-status.patch kernel-printer-bug.patch \
		kernel-printer-id-fix.patch kernel-mppe-mppc-0.98.patch \
		kernel-lzma.patch kernel-mksquashfs-lzma.patch kernel-netfilter-debug.patch \
		kernel-ipsec-natt-encap.patch kernel-nfs-maxblksize.patch kernel-netfilter-extras.patch \
		kernel-syn-recv.patch kernel-audigy.patch kernel-serial-irq.patch \
		kernel-usb.patch kernel-usb-host.patch kernel-usb-storage.patch kernel-usb-serial.patch \
		kernel-usb-scsiglue.patch kernel-pwcx.patch kernel-usb-via6212.patch kernel-nvram-valid.patch \
		kernel-flash-mirrorbit.patch kernel-flash-partitions.patch kernel-mvista-mem.patch \
		kernel-usb-hiddev.patch kernel-mksquashfs-gcc4.patch kernel-fpuemu.patch \
		kernel-flash-id.patch kernel-buildhost.patch kernel-iptables-connmark.patch \
		kernel-old-gpio.patch kernel-ide-nasoc.patch kernel-2.4.20-ptrace.patch \
		kernel-2.4.20-ext3.patch kernel-conntrack-tcp.patch kernel-mcast-vlan-silent.patch \
		kernel-mips-bcm-pkg.patch kernel-bcm5354.patch kernel-gpiortc.patch \
		kernel-fs-partitions-msdos.patch kernel-pppol2tp.patch kernel-tcp-treason-uncloaked.patch \
		kernel-usb-hid-bugs.patch kernel-bt-2.4.20-mh18.patch kernel-vlan-shared-skb.patch
	tar -C $(KERNEL_DIR) -xvjf ov51x-1.65-1.12.tar.bz2
	tar -C $(KERNEL_DIR) -xvjf pwc-9.0.2.tar.bz2
	@cd brcm-src && ../patch.sh $(ROOT) brcm-src-shared.patch brcm-src-include.patch \
		brcm-src-5365.patch brcm-src-5365-robo.patch brcm-src-robo-tag.patch \
		brcm-src-parkid.patch
	cp kernel/kernel.config $(KERNEL_DIR)/arch/mips/defconfig-bcm947xx

$(TOP)/loader: $(LOADER).tar.bz2
	@rm -rf $(TOP)/$(LOADER) $(TOP)/loader
	tar xjf $(LOADER).tar.bz2 -C $(TOP)
	mv $(TOP)/$(LOADER) $(TOP)/loader

loader: $(TOP)/loader
	@true

$(TOP)/busybox: busybox/$(BUSYBOX).tar.bz2
	@rm -rf $(TOP)/$(BUSYBOX) $(TOP)/busybox
	tar xjf busybox/$(BUSYBOX).tar.bz2 -C $(TOP)
	patch -d $(TOP)/$(BUSYBOX) -p1 < busybox/$(BUSYBOX).patch
	patch -d $(TOP)/$(BUSYBOX) -p1 < busybox/$(BUSYBOX)-e2fsprogs.patch
	patch -d $(TOP)/$(BUSYBOX) -p1 < busybox/$(BUSYBOX)-udhcp-options.patch
	patch -d $(TOP)/$(BUSYBOX) -p1 < busybox/$(BUSYBOX)-udhcp-vci.patch
	patch -d $(TOP)/$(BUSYBOX) -p1 < busybox/$(BUSYBOX)-cgi-env.patch
	patch -d $(TOP)/$(BUSYBOX) -p1 < busybox/$(BUSYBOX)-http-host.patch
	patch -d $(TOP)/$(BUSYBOX) -p1 < busybox/$(BUSYBOX)-secs.patch
	patch -d $(TOP)/$(BUSYBOX) -p1 < busybox/$(BUSYBOX)-modprobe.patch
	patch -d $(TOP)/$(BUSYBOX) -p1 < busybox/$(BUSYBOX)-e2fsck-checkinterval.patch
	mkdir -p $(TOP)/$(BUSYBOX)/sysdeps/linux/
	cp busybox/$(BUSYBOX).config $(TOP)/$(BUSYBOX)/sysdeps/linux/defconfig
	mv $(TOP)/$(BUSYBOX) $(TOP)/busybox

busybox: $(TOP)/busybox
	@true

$(TOP)/vsftpd: vsftpd/$(VSFTPD).tar.gz
	@rm -rf $(TOP)/$(VSFTPD) $(TOP)/vsftpd
	tar xzf vsftpd/$(VSFTPD).tar.gz -C $(TOP)
	patch -d $(TOP)/$(VSFTPD) -p1 < vsftpd/vsftpd-2.0.5.patch
	patch -d $(TOP)/$(VSFTPD) -p1 < vsftpd/vsftpd-2.0.6-passwd_file.patch
	patch -d $(TOP)/$(VSFTPD) -p1 < vsftpd/vsftpd-2.0.6-utf8.patch
	patch -d $(TOP)/$(VSFTPD) -p1 < vsftpd/vsftpd-2.0.5-anon_root.patch
	patch -d $(TOP)/$(VSFTPD) -p1 < vsftpd/vsftpd-2.0.5-log.patch
	mv $(TOP)/$(VSFTPD) $(TOP)/vsftpd

vsftpd: $(TOP)/vsftpd
	@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)/ucdsnmp/Makefile:
	@rm -rf $(TOP)/$(UCDSNMP) $(TOP)/ucdsnmp
	tar xzf $(UCDSNMP).tar.gz -C $(TOP)
	patch -d $(TOP)/$(UCDSNMP) -p1 < $(UCDSNMP).patch
	patch -d $(TOP)/$(UCDSNMP) -p1 < ucd-snmp-3.6.2-interfaces.patch
	patch -d $(TOP)/$(UCDSNMP) -p1 < ucd-snmp-3.6.2-uptime.patch
	mv $(TOP)/$(UCDSNMP) $(TOP)/ucdsnmp
	cd $(TOP)/ucdsnmp && CC=$(CC) AR=$(AR) RANLIB=$(RANLIB) \
		ac_cv_CAN_USE_SYSCTL=no ac_cv_struct_ifnet_has_if_obytes=yes \
		ac_cv_struct_ifnet_has_if_ibytes=yes ac_cv_struct_ifnet_has_if_ibytes=yes \
		./configure --host=mipsel-linux \
		--disable-debugging --without-opaque-special-types --with-out-mib-modules="v2party" \
		--with-sys-location=Unknown --with-sys-contact=Administrator --with-logfile=/var/log/snmpd.log

ucdsnmp: $(TOP)/ucdsnmp/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)/samba/source/Makefile: samba/$(SAMBA).tar.gz
	@rm -rf $(TOP)/$(SAMBA) $@
	tar xzf $^ -C $(TOP)
	patch -d $(TOP)/$(SAMBA) -p1 < samba/$(SAMBA).patch
	patch -d $(TOP)/$(SAMBA) -p1 < samba/$(SAMBA)-security.patch
	patch -d $(TOP)/$(SAMBA) -p1 < samba/$(SAMBA)-writex.patch
	patch -d $(TOP)/$(SAMBA) -p1 < samba/$(SAMBA)-cp1251.patch
	patch -d $(TOP)/$(SAMBA) -p1 < samba/$(SAMBA)-utf8.patch
	patch -d $(TOP)/$(SAMBA) -p1 < samba/$(SAMBA)-vista.patch
	patch -d $(TOP)/$(SAMBA) -p1 < samba/$(SAMBA)-2k3sp1-rpc.patch
	patch -d $(TOP)/$(SAMBA) -p1 < samba/$(SAMBA)-nt-ioctl.patch
	patch -d $(TOP)/$(SAMBA) -p1 < samba/$(SAMBA)-mount.patch
	tar xzvf samba/$(SAMBA)-codepages.tar.gz -C $(TOP)/$(SAMBA)
	mv $(TOP)/$(SAMBA) $(TOP)/samba
	cd $(TOP)/samba/source && \
		ac_cv_sizeof_int=4 ac_cv_sizeof_long=4 ac_cv_sizeof_short=2 \
		samba_cv_FTRUNCATE_NEEDS_ROOT=no samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no \
		samba_cv_HAVE_BROKEN_GETGROUPS=no samba_cv_HAVE_BROKEN_READDIR=no \
		samba_cv_HAVE_FCNTL_LOCK=yes samba_cv_HAVE_FNMATCH=yes \
		samba_cv_HAVE_FTRUNCATE_EXTEND=no samba_cv_HAVE_IFACE_AIX=no \
		samba_cv_HAVE_IFACE_IFCONF=yes samba_cv_HAVE_IFACE_IFREQ=yes \
		samba_cv_HAVE_INO64_T=yes samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=no \
		samba_cv_HAVE_OFF64_T=yes samba_cv_HAVE_ROOT=yes \
		samba_cv_HAVE_SECURE_MKSTEMP=yes samba_cv_HAVE_SHARED_MMAP=yes \
		samba_cv_HAVE_STRUCT_FLOCK64=yes samba_cv_HAVE_SYSV_IPC=no \
		samba_cv_HAVE_TRUNCATED_SALT=no samba_cv_HAVE_UNION_SEMUN=no \
		samba_cv_HAVE_UNSIGNED_CHAR=yes samba_cv_NEED_SGI_SEMUN_HACK=no \
		samba_cv_REPLACE_INET_NTOA=no samba_cv_SIZEOF_INO_T=4 \
		samba_cv_SIZEOF_OFF_T=4 samba_cv_SYSCONF_SC_NGROUPS_MAX=yes \
		samba_cv_USE_SETRESUID=no samba_cv_USE_SETREUID=yes \
		samba_cv_USE_SETEUID=yes samba_cv_USE_SETUIDX=no \
		samba_cv_have_longlong=yes samba_cv_have_setresgid=no \
		samba_cv_have_setresuid=no samba_cv_HAVE_GETTIMEOFDAY_TZ=yes \
		CPPFLAGS="-D_GNU_SOURCE -DNDEBUG -DSHMEM_SIZE=524288 -Dfcntl=fcntl64" CFLAGS="-Os" \
		CC=$(CC) LD=$(LD) AR=$(AR) RANLIB=$(RANLIB) ./configure --host=mipsel-linux \
		--prefix=/usr --localstatedir=/var/log --libdir=/etc \
		--with-privatedir=/etc --with-lockdir=/var/lock --with-syslog

samba: $(TOP)/samba/source/Makefile
	@true

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

iptables: $(TOP)/iptables
	@true

$(TOP)/nfs-utils/Makefile:
	@rm -rf $(TOP)/$(NFSUTILS) $(TOP)/nfs-utils
	tar xzf $(NFSUTILS).tar.gz -C $(TOP)
	patch -d $(TOP)/$(NFSUTILS) -p1 < $(NFSUTILS).patch
	patch -d $(TOP)/$(NFSUTILS) -p1 < $(NFSUTILS)-libnfs.patch
	mv $(TOP)/$(NFSUTILS) $(TOP)/nfs-utils
	cd $(TOP)/nfs-utils && \
		CC=$(CC) LD=$(LD) AR=$(AR) RANLIB=$(RANLIB) ./configure --host=mipsel-linux \
		--enable-nfsv3 --disable-nfsv4 --disable-gss --disable-rquotad

nfs-utils: $(TOP)/nfs-utils/Makefile
	@true

$(TOP)/portmap:
	@rm -rf $(TOP)/$(PORTMAP) $(TOP)/portmap
	tar xzf $(PORTMAP).tar.gz -C $(TOP)
	patch -d $(TOP)/$(PORTMAP) -p1 < $(PORTMAP).patch
	mv $(TOP)/$(PORTMAP) $(TOP)/portmap

portmap: $(TOP)/portmap
	@true

$(TOP)/radvd/Makefile:
	@rm -rf $(TOP)/$(RADVD) $(TOP)/radvd
	tar xzf $(RADVD).tar.gz -C $(TOP)
	patch -d $(TOP)/$(RADVD) -p1 < $(RADVD).patch
	mv $(TOP)/$(RADVD) $(TOP)/radvd
	cd $(TOP)/radvd && \
		CC=$(CC) LD=$(LD) AR=$(AR) RANLIB=$(RANLIB) ./configure --host=mipsel-linux \
		--prefix=""

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

$(TOP)/rp-l2tp/Makefile:
	@rm -rf $(TOP)/$(L2TP) $(TOP)/rp-l2tp
	tar xzf rp-l2tp/$(L2TP).tar.gz -C $(TOP)
	patch -d $(TOP)/$(L2TP) -p1 < rp-l2tp/$(L2TP).patch
	patch -d $(TOP)/$(L2TP) -p1 < rp-l2tp/$(L2TP)-persist.patch
	patch -d $(TOP)/$(L2TP) -p1 < rp-l2tp/$(L2TP)-route.patch
	patch -d $(TOP)/$(L2TP) -p1 < rp-l2tp/$(L2TP)-log.patch
	patch -d $(TOP)/$(L2TP) -p1 < rp-l2tp/$(L2TP)-peername.patch
	patch -d $(TOP)/$(L2TP) -p1 < rp-l2tp/$(L2TP)-debug.patch
	patch -d $(TOP)/$(L2TP) -p1 < rp-l2tp/$(L2TP)-pppol2tp.patch
	patch -d $(TOP)/$(L2TP) -p1 < rp-l2tp/$(L2TP)-sighandler.patch
	mv $(TOP)/$(L2TP) $(TOP)/rp-l2tp
	cd $(TOP)/rp-l2tp && \
		CC=$(CC) LD=$(LD) AR=$(AR) RANLIB=$(RANLIB) \
		./configure --host=mipsel-linux --prefix=/usr

rp-l2tp: $(TOP)/rp-l2tp/Makefile
	@true

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

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

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

$(TOP)/igmpproxy/src/Makefile:
	@rm -rf $(TOP)/igmpproxy
	tar xzf igmpproxy/$(IGMPPROXY).tar.gz -C $(TOP)
	patch -d $(TOP)/igmpproxy -p1 < igmpproxy/$(IGMPPROXY)-zeroaltnet.patch
	patch -d $(TOP)/igmpproxy -p1 < igmpproxy/$(IGMPPROXY)-timer.patch
	patch -d $(TOP)/igmpproxy -p1 < igmpproxy/$(IGMPPROXY)-syslog.patch
	patch -d $(TOP)/igmpproxy -p1 < igmpproxy/$(IGMPPROXY)-local.patch
	patch -d $(TOP)/igmpproxy -p1 < igmpproxy/$(IGMPPROXY)-disabled.patch

igmpproxy: $(TOP)/igmpproxy/src/Makefile
	@true

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

pptp: $(TOP)/pptp
	@true

$(TOP)/udpxy: $(UDPXY).tgz
	@rm -rf $(TOP)/udpxy-wl $@
	tar xzf $^ -C $(TOP)
	patch -d $(TOP)/udpxy-wl -p1 < $(UDPXY).patch
	mv $(TOP)/udpxy-wl $@ && touch $@

udpxy: $(TOP)/udpxy
	@true

nas:
	patch -d $(TOP) -p1 < $@.diff
	gunzip -c $(NAS).gz > $(TOP)/$@/nas

libbcmcrypto:
	tar -C $(TOP) -xzf $(LIBBCMCRYPTO).tar.gz
	patch -d $(TOP)/libbcmcrypto -p1 < $(LIBBCMCRYPTO).patch

wlconf:
	tar -C $(TOP) -xzf $(WLCONF).tar.gz

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
	[ ! -f $*.patch ] || patch -d $(TOP) -d $* -p1 --no-backup-if-mismatch < $*.patch

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


