#  GNumakefile (see README)
#
#    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 3 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, see <http://www.gnu.org/licenses/>.

ripped = 1

### asus sources ###
ifeq ($(ripped),1)
# ripped asus sources. enough to build "http://code.google.com/p/wl500g/"
# 18973878 bytes
source_of_asus = GPL_1927_ripped.tbz2
source_of_asus_cmd = wget -c "http://wl500g.googlecode.com/files/$(source_of_asus)"
source_of_asus_unpack = tar xjf $(source_of_asus) -C $(src_root)
else
# full asus sources
# 273177367 bytes
source_of_asus = GPL_1927.zip
source_of_asus_cmd = wget -c "ftp://ftp.asus.com/pub/ASUS/wireless/WL-500g-03/$(source_of_asus)"
source_of_asus_unpack = tar xzf $(source_of_asus) -C $(src_root)
endif

### linux sources ###
# 31113914 bytes
source_of_linux_name = linux-2.4.37.6
source_of_linux = $(source_of_linux_name).tar.bz2
source_of_linux_cmd = wget -c "http://www.kernel.org/pub/linux/kernel/v2.4/$(source_of_linux)"
source_of_linux_unpack = \
 rm -rf $(src_root)/broadcom/src/linux/linux; mkdir -p $(src_root)/broadcom/src/linux; \
 tar xjf $(source_of_linux) -C $(src_root)/broadcom/src/linux && \
 ln -s $(source_of_linux_name) $(src_root)/broadcom/src/linux/linux

### toolchain ###
ifeq ($(shell getconf LONG_BIT),32)
# 32bit toolchain
# 32182911 bytes
source_of_toolchain = hndtools-mipsel-uclibc-4.1.2-5.tar.bz2
else
# 64bit toolchain
# 27473053 bytes
source_of_toolchain = hndtools-mipsel-uclibc-4.1.2-x86_64-5.tar.bz2
endif
source_of_toolchain_cmd = wget -c "http://wl500g.googlecode.com/files/$(source_of_toolchain)"
source_of_toolchain_unpack = rm -rf $(src_root)/broadcom/opt; \
 mkdir -p $(brcm_path) && tar xjf $(source_of_toolchain) -C $(brcm_path) && \
 ln -sf hndtools-mipsel-uclibc-4.1.2 \
 $(brcm_path)/hndtools-mipsel-uclibc
### wl500g sources ###
source_of_wl500g = wl500g-1.9.2.7-d
source_of_wl500g_cmd = svn checkout "http://wl500g.googlecode.com/svn/trunk/" $(source_of_wl500g)
source_of_wl500g_unpack = cp -r $(source_of_wl500g) $(src_root)/broadcom/src/

src_root = src
src_list = source_of_asus source_of_linux source_of_toolchain source_of_wl500g
src_list_downloaded = $(src_list:%=%.downloaded)
src_list_unpacked = $(src_list:%=%.unpacked)
src_list_made = source_of_wl500g.made source_of_asus.made

#brcm_path = /opt/brcm
#brcm_path = $(src_root)/broadcom/opt/brcm
brcm_path = $(shell pwd)/$(src_root)/broadcom/opt/brcm

PATH := $(PATH):$(brcm_path)/hndtools-mipsel-uclibc/bin
export PATH

all: download do-local

local: do-local
	touch $(src_list_downloaded)

download: $(src_list_downloaded)

force-download: clean $(src_list_downloaded)

clean: clean-src-list-download clean-src-list-unpacked clean-src-list-made clean-src

do-local: unpack $(src_list_made)
	cd $(src_root)/broadcom/src/gateway && make install

source_of_wl500g.made:
	cd $(src_root)/broadcom/src/$(source_of_wl500g) && make kernel all
	touch $@

source_of_asus.made:
	cd $(src_root)/broadcom/src/gateway && make
	touch $@

unpack: $(src_root) $(src_list_unpacked)
	# correct buggy paths
	-ln -sf libc.so.0 $(brcm_path)/hndtools-mipsel-uclibc/lib/libc.so
	-sed -i "s!/opt/brcm!$(brcm_path)!" $(src_root)/broadcom/src/router/iproute2/Makefile
	-sed -i "s!/opt/brcm!$(brcm_path)!" $(src_root)/broadcom/src/router/rcamdmips/Makefile
	-sed -i "s!/opt/brcm!$(brcm_path)!" $(src_root)/broadcom/src/$(source_of_wl500g)/rcamdmips.diff

downloaded:
	touch $(src_list_downloaded)

%.downloaded:
	$($*_cmd)
	touch $@

%.unpacked:
	$($*_unpack)
	touch $@

$(src_root):
	mkdir $(src_root)

clean-src-list-download:
	-rm $(src_list_downloaded)

clean-src-list-unpacked:
	-rm $(src_list_unpacked)

clean-src-list-made:
	-rm $(src_list_made)

clean-src:
	-rm -rf $(brcm_path)
	-rm -rf $(src_root)

.PHONY: all local download force-download clean do-local unpack downloaded \
 clean-src-list-download clean-src-list-unpacked clean-src-list-made clean-src
