#
# Top level Makefile for D00100 builds
#
# Author:  Seenergy Corp
#
# Copyright 2008 Seenergy Corp 
#

BUILD_DIR = build
HEADER_DIR = tools/rootfs_util/header

ROOTFS_DIR = fsdir
ROOTFS_EXT2 = $(BUILD_DIR)/nmdb.ext2
RAMDISK_GZ = $(BUILD_DIR)/ramdisk.gz

BKROOTFS_DIR = bkfsdir
BKROOTFS_EXT2 = $(BUILD_DIR)/bknmdb.ext2
BKRAMDISK_GZ = $(BUILD_DIR)/bkramdisk.gz
BKROOTFS_IMG = $(BUILD_DIR)/bkrootfs.img

KERNEL_DIR = kernel
KERNEL_IMG = $(BUILD_DIR)/uImage
ROOTFS_IMG = $(BUILD_DIR)/rootfs.img

OEM_DIR = oem

KERN_UPDT_IMG = $(BUILD_DIR)/updatek.bin
FS_UPDT_IMG = $(BUILD_DIR)/updatefs.bin

MKIMAGE = /opt/montavista/pro/bin/mkimage
FSTOOL = /opt/montavista/pro/bin/fstool

TOOLS_DIR = tools
BBOX = busybox-1.6.0
#BBOX = busybox-1.11.1
SVINIT = sysvinit-2.86.ds1.orig
UDEV_DIR = udev-0.105.orig/udev-105
SSH_DIR = openssh-4.4p1
SMB_DIR = samba-3.0.14a
NKITBASE_DIR = netkit-base-0.17
SSL_DIR = openssl-0.9.8e
STUNNEL_DIR = stunnel-3.26
NTOOLS_DIR = net-tools-1.60
MEMSTAT_DIR = memstat-0.4
MDADM_DIR = mdadm-2.6.4
PWD = `pwd`

APPS_DIR = apps
APPS_INST_DIR = rootfs
PJPROJ_DIR = pjproject-0.8.0
PRODTEST_DIR = prodtest

BRFS_INIT_DIR = bkrootfs_init

WEB_DIR = apps/web
WEB_MAKEFILE = rootfs_util/web
WEB_TAR = web.tar.gz
WEB_IMG = $(BUILD_DIR)/$(WEB_TAR)
WEB_UPDT_IMG = $(BUILD_DIR)/web.bin

UBOOT_DIR = uboot

TFTP_DIR = /tftpboot

UPDT_RESV = 474 ## Reserve 512 - (18 + 20)
UPDATE_IMAGE = $(BUILD_DIR)/firmware.tar
VERSION_FILE = $(APPS_DIR)/version.txt

include .config

all: kernel rootfs web 

############################
# 	Pre-Install rules
############################
preinstall:
	rm -rf $(BUILD_DIR) $(ROOTFS_DIR) $(BKROOTFS_DIR)
	install -d  $(BUILD_DIR) $(ROOTFS_DIR) $(BKROOTFS_DIR)

############################
# 	Post-Install rules
############################
postinstall: updatefs.bin web.bin
	gzip $(UPDATE_IMAGE)

full_postinstall: updatefs.bin updatek.bin web.bin
	gzip $(UPDATE_IMAGE)

updatefs.bin:
	cat $(HEADER_DIR)/rootfs.magic | xargs echo -n > $(FS_UPDT_IMG)
	cat $(VERSION_FILE) | xargs echo -n >> $(FS_UPDT_IMG)
	dd if=/dev/zero count=$(UPDT_RESV) bs=1 >> $(FS_UPDT_IMG)
	md5sum $(ROOTFS_IMG) | awk '{ print $$1 }' | xargs echo -n >> $(FS_UPDT_IMG)
	cat $(ROOTFS_IMG) >> $(FS_UPDT_IMG)
	tar rvf $(UPDATE_IMAGE) -C $(BUILD_DIR) `basename $(FS_UPDT_IMG)` 

updatek.bin:
	cat $(HEADER_DIR)/kern.magic | xargs echo -n > $(KERN_UPDT_IMG)
	cat $(VERSION_FILE) | xargs echo -n >> $(KERN_UPDT_IMG)
	dd if=/dev/zero count=$(UPDT_RESV) bs=1 >> $(KERN_UPDT_IMG)
	md5sum $(KERNEL_IMG) | awk '{ print $$1 }' | xargs echo -n >> $(KERN_UPDT_IMG)
	cat $(KERNEL_IMG) >> $(KERN_UPDT_IMG)
	tar rvf $(UPDATE_IMAGE) -C $(BUILD_DIR) `basename $(KERN_UPDT_IMG)` 

web.bin:
	cat $(HEADER_DIR)/web.magic | xargs echo -n > $(WEB_UPDT_IMG)
	cat $(VERSION_FILE) | xargs echo -n >> $(WEB_UPDT_IMG)
	dd if=/dev/zero count=$(UPDT_RESV) bs=1 >> $(WEB_UPDT_IMG)
	md5sum $(WEB_IMG) | awk '{ print $$1 }' | xargs echo -n >> $(WEB_UPDT_IMG)
	cat $(WEB_IMG)  >> $(WEB_UPDT_IMG)
	tar rvf $(UPDATE_IMAGE) -C $(BUILD_DIR) `basename $(WEB_UPDT_IMG)` 

############################
# 	Setversion
############################
setversion:
	make -C $(APPS_DIR) setversion

############################
# 	Kernel
############################
kernel:
	make -C $(KERNEL_DIR) uImage
	make -C $(KERNEL_DIR) modules


############################
# 	Root filesystem
############################
ROOTFS_DEPS=rootfsprep tools
ifeq ($(CONFIG_APPS),y)
	ROOTFS_DEPS+=apps_arm
endif
ifeq ($(CONFIG_PRODTEST),y)
	ROOTFS_DEPS+=prodtest
endif
rootfs: $(ROOTFS_DEPS)

$(ROOTFS_IMG):
	 $(MKIMAGE) -A arm -O linux -T ramdisk -C gzip -a 0 -e 0 -n 'init ramdisk' -d $(RAMDISK_GZ) $(ROOTFS_IMG)

$(BKROOTFS_IMG):
	 $(MKIMAGE) -A arm -O linux -T ramdisk -C gzip -a 0 -e 0 -n 'init ramdisk' -d $(BKRAMDISK_GZ) $(BKROOTFS_IMG)

$(RAMDISK_GZ):
	$(FSTOOL) -t ext2 -d $(ROOTFS_DIR) $(ROOTFS_EXT2)
	gzip -9 < $(ROOTFS_EXT2) > $(RAMDISK_GZ)
	$(FSTOOL) -t ext2 -d $(BKROOTFS_DIR) $(BKROOTFS_EXT2)
	gzip -9 < $(BKROOTFS_EXT2) > $(BKRAMDISK_GZ)


############################
# 	Tools
############################
TOOLS_OBJS=bbox svinit udev netkit-base
ifeq ($(CONFIG_SMB),y)
	TOOLS_OBJS+=samba 
endif
ifeq ($(CONFIG_OPENSSH),y)
	TOOLS_OBJS+=openssh
endif
ifeq ($(CONFIG_OPENSSL),y)
	TOOLS_OBJS+=openssl
endif
ifeq ($(CONFIG_STUNNEL),y)
	TOOLS_OBJS+=stunnel 
endif
ifeq ($(CONFIG_NETTOOL),y)
	TOOLS_OBJS+=nettool
endif
ifeq ($(CONFIG_MEMSTAT),y)
	TOOLS_OBJS+=memstat
endif
ifeq ($(CONFIG_MDADM),y)
	TOOLS_OBJS+=mdadm
endif

tools: $(TOOLS_OBJS)

#
# Tools - Busybox
#
bbox:
	make -C $(TOOLS_DIR)/$(BBOX) CROSS_COMPILER_PREFIX=arm_v5t_le- 'CC=arm_v5t_le-gcc ' AR=arm_v5t_le-ar \
		STRIP=arm_v5t_le-strip STRIPTOOL=true DODEBUG=true CONFIG_PREFIX=$(ROOTFS_DIR) install V=1 

bbox_clean:
	make -C $(TOOLS_DIR)/$(BBOX) clean

bbox_install: bkbbox_install
	cp -a $(TOOLS_DIR)/$(BBOX)/$(ROOTFS_DIR)/* $(ROOTFS_DIR)/
	mkdir -p $(ROOTFS_DIR)/usr/share/udhcpc/
	install -m755 $(TOOLS_DIR)/$(BBOX)/examples/udhcp/default.script $(ROOTFS_DIR)/usr/share/udhcpc/
	install -m755 $(TOOLS_DIR)/$(BBOX)/examples/interfaces $(ROOTFS_DIR)/etc/network/
	install -d $(ROOTFS_DIR)/etc/network/if-pre-up.d \
		$(ROOTFS_DIR)/etc/network/if-up.d \
		$(ROOTFS_DIR)/etc/network/if-down.d \
		$(ROOTFS_DIR)/etc/network/if-post-down.d
	install -d $(ROOTFS_DIR)/var/lib/misc
	touch $(ROOTFS_DIR)/var/lib/misc/udhcpd.leases
	
bkbbox_install:
	cp -a $(TOOLS_DIR)/$(BBOX)/$(ROOTFS_DIR)/* $(BKROOTFS_DIR)/
	mkdir -p $(BKROOTFS_DIR)/usr/share/udhcpc/
	install -m755 $(TOOLS_DIR)/$(BBOX)/examples/udhcp/default.script $(BKROOTFS_DIR)/usr/share/udhcpc/
	install -m755 $(TOOLS_DIR)/$(BBOX)/examples/interfaces $(BKROOTFS_DIR)/etc/network/
	install -d $(BKROOTFS_DIR)/etc/network/if-pre-up.d \
		$(BKROOTFS_DIR)/etc/network/if-up.d \
		$(BKROOTFS_DIR)/etc/network/if-down.d \
		$(BKROOTFS_DIR)/etc/network/if-post-down.d
	install -d $(BKROOTFS_DIR)/var/lib/misc
	touch $(BKROOTFS_DIR)/var/lib/misc/udhcpd.leases

#
# Tools - SysV Init
#
svinit:
	make -C $(TOOLS_DIR)/$(SVINIT)/src CC=arm_v5t_le-gcc LDFLAGS=	CONFIG_PREFIX=../../$(ROOTFS_DIR)
	arm_v5t_le-strip -s $(TOOLS_DIR)/$(SVINIT)/src/bootlogd $(TOOLS_DIR)/$(SVINIT)/src/halt \
		$(TOOLS_DIR)/$(SVINIT)/src/init $(TOOLS_DIR)/$(SVINIT)/src/killall5 \
		$(TOOLS_DIR)/$(SVINIT)/src/last $(TOOLS_DIR)/$(SVINIT)/src/mesg \
		$(TOOLS_DIR)/$(SVINIT)/src/mountpoint $(TOOLS_DIR)/$(SVINIT)/src/runlevel \
		$(TOOLS_DIR)/$(SVINIT)/src/shutdown $(TOOLS_DIR)/$(SVINIT)/src/sulogin \
		$(TOOLS_DIR)/$(SVINIT)/src/utmpdump $(TOOLS_DIR)/$(SVINIT)/src/wall 

svinit_clean:
	make -C $(TOOLS_DIR)/$(SVINIT)/src clean

svinit_install: bksvinit_install
	make -C $(TOOLS_DIR)/$(SVINIT)/src ROOT=../../../$(ROOTFS_DIR) INSTALL=install install
	install -d $(ROOTFS_DIR)/etc
	install -m 755 $(TOOLS_DIR)/$(SVINIT)/debian/share/inittab $(ROOTFS_DIR)/etc
	cp -a $(TOOLS_DIR)/$(SVINIT)/debian/initscripts/etc/default \
		$(TOOLS_DIR)/$(SVINIT)/debian/initscripts/etc/init.d \
		$(TOOLS_DIR)/$(SVINIT)/debian/initscripts/etc/rc.d $(ROOTFS_DIR)/etc
	install -m 755 $(TOOLS_DIR)/$(SVINIT)/debian/sysv-rc/etc/init.d/rc \
		$(TOOLS_DIR)/$(SVINIT)/debian/sysv-rc/etc/init.d/rcS \
		$(ROOTFS_DIR)/etc/init.d/
	install -m 755 $(TOOLS_DIR)/$(SVINIT)/debian/initscripts/sbin/fsck.nfs $(ROOTFS_DIR)/sbin/fsck.nfs
	install -m 644 $(TOOLS_DIR)/$(SVINIT)/debian/initscripts/etc/default/bootlogd \
		$(TOOLS_DIR)/$(SVINIT)/debian/initscripts/etc/default/devpts \
		$(TOOLS_DIR)/$(SVINIT)/debian/initscripts/etc/default/halt \
		$(TOOLS_DIR)/$(SVINIT)/debian/initscripts/etc/default/tmpfs \
		$(ROOTFS_DIR)/etc/default/.
	install -m 755 $(TOOLS_DIR)/$(SVINIT)/debian/initscripts/share/default.rcS $(ROOTFS_DIR)/etc/default/rcS
	install -m 755 $(TOOLS_DIR)/$(SVINIT)/debian/initscripts/init-functions $(ROOTFS_DIR)/etc/init.d/init-functions
	ln -sf sbin/init $(ROOTFS_DIR)/init
	ln -sf ../init.d/halt $(ROOTFS_DIR)/etc/rc.d/rc0.d/S90halt
	ln -sf ../init.d/reboot $(ROOTFS_DIR)/etc/rc.d/rc6.d/S90reboot
	ln -sf ../init.d/sendsigs $(ROOTFS_DIR)/etc/rc.d/rc0.d/S20sendsigs
	ln -sf ../init.d/sendsigs $(ROOTFS_DIR)/etc/rc.d/rc6.d/S20sendsigs
	ln -sf ../init.d/single $(ROOTFS_DIR)/etc/rc.d/rc1.d/S20single

bksvinit_install:
	#make -C $(TOOLS_DIR)/$(SVINIT)/src ROOT=../../../$(BKROOTFS_DIR) INSTALL=install install
	install -m 755 $(TOOLS_DIR)/$(SVINIT)/src/init $(BKROOTFS_DIR)/sbin
	install -m 755 $(TOOLS_DIR)/$(SVINIT)/src/mountpoint $(BKROOTFS_DIR)/bin
	install -d $(BKROOTFS_DIR)/etc
	install -m 755 $(TOOLS_DIR)/$(SVINIT)/debian/share/inittab $(BKROOTFS_DIR)/etc
	cp -a $(TOOLS_DIR)/$(SVINIT)/debian/initscripts/etc/default \
		$(TOOLS_DIR)/$(SVINIT)/debian/initscripts/etc/init.d \
		$(TOOLS_DIR)/$(SVINIT)/debian/initscripts/etc/rc.d $(BKROOTFS_DIR)/etc
	install -m 755 $(TOOLS_DIR)/$(SVINIT)/debian/sysv-rc/etc/init.d/rc \
		$(TOOLS_DIR)/$(SVINIT)/debian/sysv-rc/etc/init.d/rcS \
		$(BKROOTFS_DIR)/etc/init.d/
	install -m 755 $(TOOLS_DIR)/$(SVINIT)/debian/initscripts/sbin/fsck.nfs $(BKROOTFS_DIR)/sbin/fsck.nfs
	install -m 644 $(TOOLS_DIR)/$(SVINIT)/debian/initscripts/etc/default/bootlogd \
		$(TOOLS_DIR)/$(SVINIT)/debian/initscripts/etc/default/devpts \
		$(TOOLS_DIR)/$(SVINIT)/debian/initscripts/etc/default/halt \
		$(TOOLS_DIR)/$(SVINIT)/debian/initscripts/etc/default/tmpfs \
		$(BKROOTFS_DIR)/etc/default/.
	install -m 755 $(TOOLS_DIR)/$(SVINIT)/debian/initscripts/share/default.rcS $(BKROOTFS_DIR)/etc/default/rcS
	install -m 755 $(TOOLS_DIR)/$(SVINIT)/debian/initscripts/init-functions $(BKROOTFS_DIR)/etc/init.d/init-functions
	ln -sf sbin/init $(BKROOTFS_DIR)/init
	ln -sf ../init.d/halt $(BKROOTFS_DIR)/etc/rc.d/rc0.d/S90halt
	ln -sf ../init.d/reboot $(BKROOTFS_DIR)/etc/rc.d/rc6.d/S90reboot
	ln -sf ../init.d/sendsigs $(BKROOTFS_DIR)/etc/rc.d/rc0.d/S20sendsigs
	ln -sf ../init.d/sendsigs $(BKROOTFS_DIR)/etc/rc.d/rc6.d/S20sendsigs
	ln -sf ../init.d/single $(BKROOTFS_DIR)/etc/rc.d/rc1.d/S20single


#
# Tools - udev
#
udev:
	make -C $(TOOLS_DIR)/$(UDEV_DIR)/ ARCH=none CROSS_COMPILE=arm_v5t_le- OPTIMIZATION=-O2 udevdir=/dev \
		USE_KLIBC=false USE_LOG=false DEBUG=false V=true 'EXTRAS=extras/scsi_id extras/volume_id'
	arm_v5t_le-strip -s $(TOOLS_DIR)/$(UDEV_DIR)/udevtest $(TOOLS_DIR)/$(UDEV_DIR)/udevinfo \
		$(TOOLS_DIR)/$(UDEV_DIR)/udevmonitor $(TOOLS_DIR)/$(UDEV_DIR)/udevsettle \
		$(TOOLS_DIR)/$(UDEV_DIR)/udevd $(TOOLS_DIR)/$(UDEV_DIR)/udevtrigger \
		$(TOOLS_DIR)/$(UDEV_DIR)/udevstart $(TOOLS_DIR)/$(UDEV_DIR)/udevcontrol

udev_clean:
	make -C $(TOOLS_DIR)/$(UDEV_DIR) clean

udev_install: bkudev_install
	make -C $(TOOLS_DIR)/$(UDEV_DIR)/ DESTDIR=../../../$(ROOTFS_DIR) install
	install -d $(ROOTFS_DIR)/etc/udev/scripts
	install -m 744 $(TOOLS_DIR)/$(UDEV_DIR)/../extra/scsi-devfs.sh $(ROOTFS_DIR)/etc/udev/scripts/
	install -m 744 $(TOOLS_DIR)/$(UDEV_DIR)/../extra/ide-devfs.sh $(ROOTFS_DIR)/etc/udev/scripts/
	install -m 744 $(TOOLS_DIR)/$(UDEV_DIR)/../extra/raid-devfs.sh $(ROOTFS_DIR)/etc/udev/scripts/
	install -m 744 $(TOOLS_DIR)/$(UDEV_DIR)/../extra/usb-automnt.sh $(ROOTFS_DIR)/etc/udev/scripts/
	install -m 744 $(TOOLS_DIR)/$(UDEV_DIR)/../extra/hdd-automnt.sh $(ROOTFS_DIR)/etc/udev/scripts/
	install -d $(ROOTFS_DIR)/etc/init.d
	install $(TOOLS_DIR)/$(UDEV_DIR)/../debian/udev.init $(ROOTFS_DIR)/etc/init.d/udev
	install $(TOOLS_DIR)/$(UDEV_DIR)/../debian/udev.udev-mtab.init $(ROOTFS_DIR)/etc/init.d/udev-mtab
	install -m 644 $(TOOLS_DIR)/$(UDEV_DIR)/../rules/cd-aliases-generator.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/compat.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/devfs.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/hotplug.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/hotplugd.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/permissions.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/persistent-input.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/persistent-net-generator.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/persistent.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/run.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/udev.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/usb-automnt.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/hdd-automnt.rules \
		$(ROOTFS_DIR)/etc/udev/rules.d
	install -m 644 $(TOOLS_DIR)/$(UDEV_DIR)/../extra/links.conf $(ROOTFS_DIR)/etc/udev/
	cp -a $(TOOLS_DIR)/$(UDEV_DIR)/extras/run_directory/dev.d $(ROOTFS_DIR)/etc/
	mkdir -p $(ROOTFS_DIR)/etc/hotplug.d/default
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/udevstart $(ROOTFS_DIR)/sbin/
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/udevd $(ROOTFS_DIR)/sbin/
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/udevcontrol $(ROOTFS_DIR)/sbin/
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/test-udev $(ROOTFS_DIR)/sbin/udev
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/../extra/links.conf $(ROOTFS_DIR)/etc/udev
	install -d $(ROOTFS_DIR)/etc/hotplug
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/../hotplug/hotplug.functions $(ROOTFS_DIR)/etc/hotplug
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/../hotplug/firmware.agent $(ROOTFS_DIR)/etc/hotplug
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/../hotplug/net.agent $(ROOTFS_DIR)/etc/hotplug
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/../hotplug/scsi-re-add $(ROOTFS_DIR)/etc/hotplug
	rm -rf $(ROOTFS_DIR)/usr/share/man

bkudev_install:
	make -C $(TOOLS_DIR)/$(UDEV_DIR)/ DESTDIR=../../../$(BKROOTFS_DIR) install
	install -d $(BKROOTFS_DIR)/etc/udev/scripts
	install -m 744 $(TOOLS_DIR)/$(UDEV_DIR)/../extra/scsi-devfs.sh $(BKROOTFS_DIR)/etc/udev/scripts/
	install -m 744 $(TOOLS_DIR)/$(UDEV_DIR)/../extra/ide-devfs.sh $(BKROOTFS_DIR)/etc/udev/scripts/
	install -m 744 $(TOOLS_DIR)/$(UDEV_DIR)/../extra/raid-devfs.sh $(BKROOTFS_DIR)/etc/udev/scripts/
	install -m 744 $(TOOLS_DIR)/$(UDEV_DIR)/../extra/usb-automnt.sh $(BKROOTFS_DIR)/etc/udev/scripts/
	install -d $(BKROOTFS_DIR)/etc/init.d
	install $(TOOLS_DIR)/$(UDEV_DIR)/../debian/udev.init $(BKROOTFS_DIR)/etc/init.d/udev
	install $(TOOLS_DIR)/$(UDEV_DIR)/../debian/udev.udev-mtab.init $(BKROOTFS_DIR)/etc/init.d/udev-mtab
	install -m 644 $(TOOLS_DIR)/$(UDEV_DIR)/../rules/cd-aliases-generator.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/compat.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/devfs.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/hotplug.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/hotplugd.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/permissions.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/persistent-input.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/persistent-net-generator.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/persistent.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/run.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/udev.rules \
		$(TOOLS_DIR)/$(UDEV_DIR)/../rules/usb-automnt.rules \
		$(BKROOTFS_DIR)/etc/udev/rules.d
	install -m 644 $(TOOLS_DIR)/$(UDEV_DIR)/../extra/links.conf $(BKROOTFS_DIR)/etc/udev/
	cp -a $(TOOLS_DIR)/$(UDEV_DIR)/extras/run_directory/dev.d $(BKROOTFS_DIR)/etc/
	mkdir -p $(BKROOTFS_DIR)/etc/hotplug.d/default
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/udevstart $(BKROOTFS_DIR)/sbin/
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/udevd $(BKROOTFS_DIR)/sbin/
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/udevcontrol $(BKROOTFS_DIR)/sbin/
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/test-udev $(BKROOTFS_DIR)/sbin/udev
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/../extra/links.conf $(BKROOTFS_DIR)/etc/udev
	install -d $(BKROOTFS_DIR)/etc/hotplug
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/../hotplug/hotplug.functions $(BKROOTFS_DIR)/etc/hotplug
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/../hotplug/firmware.agent $(BKROOTFS_DIR)/etc/hotplug
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/../hotplug/net.agent $(BKROOTFS_DIR)/etc/hotplug
	install -m 755 $(TOOLS_DIR)/$(UDEV_DIR)/../hotplug/scsi-re-add $(BKROOTFS_DIR)/etc/hotplug
	rm -rf $(BKROOTFS_DIR)/usr/share/man


#
# Tools - Openssh
#
openssh: openssh_config
	make -C $(TOOLS_DIR)/$(SSH_DIR)/objdir 'CFLAGS=-O2 -DBROKEN_CMSG_TYPE -Wall \
		-DLOGIN_PROGRAM=\"/bin/login\" -DSSHD_PAM_SERVICE=\"ssh\" -D__FILE_OFFSET_BITS=64'
	arm_v5t_le-strip -s $(TOOLS_DIR)/$(SSH_DIR)/objdir/ssh $(TOOLS_DIR)/$(SSH_DIR)/objdir/ssh-add \
		$(TOOLS_DIR)/$(SSH_DIR)/objdir/ssh-agent $(TOOLS_DIR)/$(SSH_DIR)/objdir/ssh-keygen $(TOOLS_DIR)/$(SSH_DIR)/objdir/ssh-keyscan

openssh_config:
	$(TOOLS_DIR)/$(SSH_DIR)/conf.sh

openssh_clean:
	make -C $(TOOLS_DIR)/$(SSH_DIR)/objdir clean

openssh_install:
	make -C $(TOOLS_DIR)/$(SSH_DIR)/objdir DESTDIR=$(PWD)/$(ROOTFS_DIR) STRIP_OPT= install-files install-sysconf
	install -d -m 755 $(ROOTFS_DIR)/etc/pam.d
	install -p -m 644 $(TOOLS_DIR)/$(SSH_DIR)/debian/openssh-server.ssh.pam $(ROOTFS_DIR)/etc/pam.d/ssh
	mkdir -p $(ROOTFS_DIR)/var/empty/sshd
	mkdir -p $(ROOTFS_DIR)/etc/init.d
	install -p -m 755 $(TOOLS_DIR)/$(SSH_DIR)/debian/openssh-server.init $(ROOTFS_DIR)/etc/init.d/ssh
	@echo '# Set AUTOKEYGEN=yes to make the ssh init script autogenerate'
	@echo '# the required keys if they are not on the system.'
	@echo AUTOKEYGEN=yes
	rm -rf $(ROOTFS_DIR)/usr/share/man



#
# Tools - Samba
#
samba: samba_config
	make -C $(TOOLS_DIR)/$(SMB_DIR)/objdir
	make -C $(TOOLS_DIR)/$(SMB_DIR)/objdir 'CC=arm_v5t_le-gcc  -DUSE_SETRESUID -DHAVE_IFACE_IFCONF \
		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DHAVE_IFACE_IFCONF \
		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE' nsswitch
	make -C $(TOOLS_DIR)/$(SMB_DIR)/objdir 'CC=arm_v5t_le-gcc  -DUSE_SETRESUID -DHAVE_IFACE_IFCONF \
		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DHAVE_IFACE_IFCONF \
		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE' proto
	make -C $(TOOLS_DIR)/$(SMB_DIR)/objdir 'CC=arm_v5t_le-gcc  -DUSE_SETRESUID -DHAVE_IFACE_IFCONF \
		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DHAVE_IFACE_IFCONF \
		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE' all nsswitch/libnss_wins.so
	make -C $(TOOLS_DIR)/$(SMB_DIR)/objdir 'CC=arm_v5t_le-gcc  -DUSE_SETRESUID -DHAVE_IFACE_IFCONF \
		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DHAVE_IFACE_IFCONF \
		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE' debug2html
	make -C $(TOOLS_DIR)/$(SMB_DIR)/objdir 'CC=arm_v5t_le-gcc  -DUSE_SETRESUID -DHAVE_IFACE_IFCONF \
		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DHAVE_IFACE_IFCONF \
		-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE' bin/smbspool
	arm_v5t_le-strip -s $(TOOLS_DIR)/$(SMB_DIR)/objdir/bin/smbd $(TOOLS_DIR)/$(SMB_DIR)/objdir/bin/nmbd \
		$(TOOLS_DIR)/$(SMB_DIR)/objdir/bin/nmblookup $(TOOLS_DIR)/$(SMB_DIR)/objdir/bin/smbmount \
		$(TOOLS_DIR)/$(SMB_DIR)/objdir/bin/smbumount $(TOOLS_DIR)/$(SMB_DIR)/objdir/bin/smbmnt
	
samba_config:
	$(TOOLS_DIR)/$(SMB_DIR)/conf.sh

samba_clean:
	make -C $(TOOLS_DIR)/$(SMB_DIR)/objdir clean

samba_install:
	mkdir -p $(ROOTFS_DIR) \
	$(ROOTFS_DIR)/sbin \
	$(ROOTFS_DIR)/etc/samba \
	$(ROOTFS_DIR)/var/lock/samba \
	$(ROOTFS_DIR)/var/log/samba \
	$(ROOTFS_DIR)/var/spool/samba \
	$(ROOTFS_DIR)/var/lib/samba \
	$(ROOTFS_DIR)/var/run/samba \
	$(ROOTFS_DIR)/lib
	install -m755 $(TOOLS_DIR)/$(SMB_DIR)/objdir/bin/nmblookup $(ROOTFS_DIR)/usr/bin
	install -m755 $(TOOLS_DIR)/$(SMB_DIR)/objdir/bin/smbmount $(ROOTFS_DIR)/usr/bin
	install -m755 $(TOOLS_DIR)/$(SMB_DIR)/objdir/bin/smbumount $(ROOTFS_DIR)/usr/bin
	install -m755 $(TOOLS_DIR)/$(SMB_DIR)/objdir/bin/smbmnt $(ROOTFS_DIR)/usr/bin
	install -m755 $(TOOLS_DIR)/$(SMB_DIR)/objdir/bin/smbd $(ROOTFS_DIR)/usr/sbin
	install -m755 $(TOOLS_DIR)/$(SMB_DIR)/objdir/bin/nmbd $(ROOTFS_DIR)/usr/sbin
	install -m755 $(TOOLS_DIR)/$(SMB_DIR)/source/script/mksmbpasswd.sh $(ROOTFS_DIR)/usr/bin
	ln -sf ../usr/bin/smbmount $(ROOTFS_DIR)/sbin/mount.smbfs
	ln -sf ../usr/bin/smbmount $(ROOTFS_DIR)/sbin/mount.smb
	install -m755 $(TOOLS_DIR)/$(SMB_DIR)/debian/samba.init $(ROOTFS_DIR)/etc/init.d/samba
	install -m664 $(TOOLS_DIR)/$(SMB_DIR)/debian/samba.logrotate $(ROOTFS_DIR)/etc/logrotate.d/samba
	install -m644 $(TOOLS_DIR)/$(SMB_DIR)/debian/samba.pamd $(ROOTFS_DIR)/etc/pam.d/samba
	install -m644 $(TOOLS_DIR)/$(SMB_DIR)/debian/samba.cron.daily $(ROOTFS_DIR)/etc/cron.daily/samba
	install -m644 $(TOOLS_DIR)/$(SMB_DIR)/debian/smb.conf $(ROOTFS_DIR)/etc/samba/smb.conf



#
# Tools - Netkit-base
#
netkit-base:
	make -C $(TOOLS_DIR)/$(NKITBASE_DIR)/ CC=arm_v5t_le-gcc LDFLAGS=
	arm_v5t_le-strip $(TOOLS_DIR)/$(NKITBASE_DIR)/inetd/inetd

netkit-base_clean:
	make -C $(TOOLS_DIR)/$(NKITBASE_DIR)/ clean

netkit-base_install:
	#make -C $(TOOLS_DIR)/$(NKITBASE_DIR)/inetd install INSTALLROOT=../../../$(ROOTFS_DIR) \
		SBINDIR=/usr/sbin MANDIR=/usr/share/man BINDIR=/usr/bin
	install $(TOOLS_DIR)/$(NKITBASE_DIR)/debian/inetd.init.d $(ROOTFS_DIR)/etc/init.d/inetd
	install $(TOOLS_DIR)/$(NKITBASE_DIR)/debian/cron.daily $(ROOTFS_DIR)/etc/cron.daily/inetd


#
# Tools - Openssl
#
openssl: openssl_config
	make -C $(TOOLS_DIR)/$(SSL_DIR) 'DIRS=crypto ssl' all
	make -C $(TOOLS_DIR)/$(SSL_DIR) INSTALL_PREFIX=$(PWD)/$(TOOLS_DIR)/$(SSL_DIR)/$(ROOTFS_DIR) install
	arm_v5t_le-strip -s $(TOOLS_DIR)/$(SSL_DIR)/$(ROOTFS_DIR)/usr/bin/openssl
	arm_v5t_le-strip -s $(TOOLS_DIR)/$(SSL_DIR)/libcrypto.so.0.9.8
	arm_v5t_le-strip -s $(TOOLS_DIR)/$(SSL_DIR)/libssl.so.0.9.8

openssl_config:
	$(TOOLS_DIR)/$(SSL_DIR)/conf.sh

openssl_clean:
	rm -rf $(TOOLS_DIR)/$(SSL_DIR)/$(ROOTFS_DIR)
	make -C $(TOOLS_DIR)/$(SSL_DIR) clean

openssl_install:
	install -m755 $(TOOLS_DIR)/$(SSL_DIR)/$(ROOTFS_DIR)/usr/bin/openssl \
		$(TOOLS_DIR)/$(SSL_DIR)/$(ROOTFS_DIR)/usr/bin/c_rehash \
		$(ROOTFS_DIR)/usr/bin
	mkdir -p $(ROOTFS_DIR)/etc/ssl
	#cp -a $(TOOLS_DIR)/$(SSL_DIR)/$(ROOTFS_DIR)/usr/lib/* $(ROOTFS_DIR)/usr/lib/
	#chmod 0644 $(ROOTFS_DIR)/usr/lib/libcrypto.a $(ROOTFS_DIR)/usr/lib/libssl.a 
	cp -a $(TOOLS_DIR)/$(SSL_DIR)/apps/openssl.cnf.tmpl $(ROOTFS_DIR)/etc/ssl/
	cp -a $(TOOLS_DIR)/$(SSL_DIR)/$(ROOTFS_DIR)/usr/lib/ssl/certs $(ROOTFS_DIR)/etc/ssl/
	cp -a $(TOOLS_DIR)/$(SSL_DIR)/$(ROOTFS_DIR)/usr/lib/ssl/private $(ROOTFS_DIR)/etc/ssl/
	cp -a $(TOOLS_DIR)/$(SSL_DIR)/$(ROOTFS_DIR)/usr/lib/ssl/misc/CA.sh $(ROOTFS_DIR)/usr/sbin
	cp -a $(TOOLS_DIR)/$(SSL_DIR)/$(ROOTFS_DIR)/usr/lib/ssl/misc/c_* $(ROOTFS_DIR)/usr/sbin
	cp -a $(TOOLS_DIR)/$(SSL_DIR)/libcrypto.so $(TOOLS_DIR)/$(SSL_DIR)/libcrypto.so.0.9.8 \
		$(TOOLS_DIR)/$(SSL_DIR)/libssl.so $(TOOLS_DIR)/$(SSL_DIR)/libssl.so.0.9.8 \
		$(ROOTFS_DIR)/usr/lib/
	chmod 0644 $(ROOTFS_DIR)/usr/lib/libcrypto.so.0.9.8 $(ROOTFS_DIR)/usr/lib/libcrypto.so \
		$(ROOTFS_DIR)/usr/lib/libssl.so $(ROOTFS_DIR)/usr/lib/libssl.so.0.9.8
	ln -sf /etc/ssl $(ROOTFS_DIR)/usr/lib/ssl
	ln -sf libcrypto.so.0.9.8 $(ROOTFS_DIR)/usr/lib/libcrypto.so.0
	ln -sf libssl.so.0.9.8 $(ROOTFS_DIR)/usr/lib/libssl.so.0
	ln -sf libcrypto.so.0.9.8 $(ROOTFS_DIR)/usr/lib/libcrypto.so
	ln -sf libssl.so.0.9.8 $(ROOTFS_DIR)/usr/lib/libssl.so


#
# Tools - Stunnel
#
stunnel: stunnel_config
	make -C $(TOOLS_DIR)/$(STUNNEL_DIR) all
	make -C $(TOOLS_DIR)/$(STUNNEL_DIR) prefix=$(PWD)/$(TOOLS_DIR)/$(STUNNEL_DIR)/$(ROOTFS_DIR)/usr \
		exec_prefix=$(PWD)/$(TOOLS_DIR)/$(STUNNEL_DIR)/$(ROOTFS_DIR)/usr \
		bindir=$(PWD)/$(TOOLS_DIR)/$(STUNNEL_DIR)/$(ROOTFS_DIR)/usr/bin \
		sbindir=$(PWD)/$(TOOLS_DIR)/$(STUNNEL_DIR)/$(ROOTFS_DIR)/usr/sbin \
		sysconfdir=$(PWD)/$(TOOLS_DIR)/$(STUNNEL_DIR)/$(ROOTFS_DIR)/etc \
		datadir=$(PWD)/$(TOOLS_DIR)/$(STUNNEL_DIR)/$(ROOTFS_DIR)/usr/share \
		includedir=$(PWD)/$(TOOLS_DIR)/$(STUNNEL_DIR)/$(ROOTFS_DIR)/usr/include \
		libdir=$(PWD)/$(TOOLS_DIR)/$(STUNNEL_DIR)/$(ROOTFS_DIR)/usr/lib \
		libexecdir=$(PWD)/$(TOOLS_DIR)/$(STUNNEL_DIR)/$(ROOTFS_DIR)/usr/libexec \
		localstatedir=$(PWD)/$(TOOLS_DIR)/$(STUNNEL_DIR)/$(ROOTFS_DIR)/var \
		sharedstatedir=$(PWD)/$(TOOLS_DIR)/$(STUNNEL_DIR)/$(ROOTFS_DIR)/usr/share \
		mandir=$(PWD)/$(TOOLS_DIR)/$(STUNNEL_DIR)/$(ROOTFS_DIR)/usr/share/man \
		infodir=$(PWD)/$(TOOLS_DIR)/$(STUNNEL_DIR)/$(ROOTFS_DIR)/usr/share/info \
		install man8dir=$(PWD)/$(TOOLS_DIR)/$(STUNNEL_DIR)/$(ROOTFS_DIR)/usr/share/man/man8
	arm_v5t_le-strip -s $(TOOLS_DIR)/$(STUNNEL_DIR)/$(ROOTFS_DIR)/usr/sbin/stunnel
	arm_v5t_le-strip -s $(TOOLS_DIR)/$(STUNNEL_DIR)/libstunnel.so

stunnel_config:
	$(TOOLS_DIR)/$(STUNNEL_DIR)/conf.sh

stunnel_clean:
	make -C $(TOOLS_DIR)/$(STUNNEL_DIR) clean

stunnel_install:
	$(TOOLS_DIR)/$(STUNNEL_DIR)/mkinstalldirs $(ROOTFS_DIR)/usr/sbin $(ROOTFS_DIR)/usr/lib $(ROOTFS_DIR)/var/run/stunnel/
	install -c -m 711 $(TOOLS_DIR)/$(STUNNEL_DIR)/stunnel $(ROOTFS_DIR)/usr/sbin
	install -c -m 755 $(TOOLS_DIR)/$(STUNNEL_DIR)/libstunnel.so $(ROOTFS_DIR)/usr/lib
	mv $(ROOTFS_DIR)/usr/lib/libstunnel.so $(ROOTFS_DIR)/usr/lib/libstunnel.so.3
	ln -sf libstunnel.so.3 $(ROOTFS_DIR)/usr/lib/libstunnel.so
	install -d $(ROOTFS_DIR)/etc/init.d
	install $(TOOLS_DIR)/$(STUNNEL_DIR)/debian/stunnel.init $(ROOTFS_DIR)/etc/init.d/stunnel
	install $(TOOLS_DIR)/$(STUNNEL_DIR)/debian/stunnel.conf $(ROOTFS_DIR)/etc/


#
# Tools - Nettools
#
nettool:
	make -C $(TOOLS_DIR)/$(NTOOLS_DIR)/ CC=arm_v5t_le-gcc LOPTS=
	make -C $(TOOLS_DIR)/$(NTOOLS_DIR)/ install BASEDIR=$(PWD)/$(TOOLS_DIR)/$(NTOOLS_DIR)/$(ROOTFS_DIR) mandir=/usr/share/man
	arm_v5t_le-strip $(TOOLS_DIR)/$(NTOOLS_DIR)/$(ROOTFS_DIR)/bin/netstat \
		$(TOOLS_DIR)/$(NTOOLS_DIR)/$(ROOTFS_DIR)/bin/netstat \
		$(TOOLS_DIR)/$(NTOOLS_DIR)/$(ROOTFS_DIR)/sbin/iptunnel \
		$(TOOLS_DIR)/$(NTOOLS_DIR)/$(ROOTFS_DIR)/sbin/nameif \
		$(TOOLS_DIR)/$(NTOOLS_DIR)/$(ROOTFS_DIR)/sbin/plipconfig \
		$(TOOLS_DIR)/$(NTOOLS_DIR)/$(ROOTFS_DIR)/sbin/mii-tool \
		$(TOOLS_DIR)/$(NTOOLS_DIR)/$(ROOTFS_DIR)/sbin/route \
		$(TOOLS_DIR)/$(NTOOLS_DIR)/$(ROOTFS_DIR)/sbin/arp \
		$(TOOLS_DIR)/$(NTOOLS_DIR)/$(ROOTFS_DIR)/sbin/slattach \
		$(TOOLS_DIR)/$(NTOOLS_DIR)/$(ROOTFS_DIR)/sbin/ipmaddr \
		$(TOOLS_DIR)/$(NTOOLS_DIR)/$(ROOTFS_DIR)/sbin/rarp \
		$(TOOLS_DIR)/$(NTOOLS_DIR)/$(ROOTFS_DIR)/sbin/ifconfig

nettool_clean:
	make -C $(TOOLS_DIR)/$(NTOOLS_DIR)/ clean

nettool_install:
	install $(TOOLS_DIR)/$(NTOOLS_DIR)/$(ROOTFS_DIR)/sbin/mii-tool \
		$(TOOLS_DIR)/$(NTOOLS_DIR)/$(ROOTFS_DIR)/sbin/nameif \
		$(ROOTFS_DIR)/sbin

#
# Tools - memstat
#
memstat:
	make -C $(TOOLS_DIR)/$(MEMSTAT_DIR)/ CC=arm_v5t_le-gcc
	make -C $(TOOLS_DIR)/$(MEMSTAT_DIR)/ install prefix=$(PWD)/$(TOOLS_DIR)/$(MEMSTAT_DIR)/$(ROOTFS_DIR)/usr
	arm_v5t_le-strip $(TOOLS_DIR)/$(MEMSTAT_DIR)/$(ROOTFS_DIR)/usr/bin/memstat

memstat_clean:
	make -C $(TOOLS_DIR)/$(MEMSTAT_DIR)/ clean

memstat_install:
	install $(TOOLS_DIR)/$(MEMSTAT_DIR)/$(ROOTFS_DIR)/usr/bin/memstat $(ROOTFS_DIR)/usr/bin
	install $(TOOLS_DIR)/$(MEMSTAT_DIR)/memstat.conf $(ROOTFS_DIR)/etc

#
# Tools - mdadm
#
mdadm:
	make -C $(TOOLS_DIR)/$(MDADM_DIR)/
	arm_v5t_le-strip $(TOOLS_DIR)/$(MDADM_DIR)/mdadm

mdadm_clean:
	make -C $(TOOLS_DIR)/$(MDADM_DIR)/ clean

mdadm_install:
	install $(TOOLS_DIR)/$(MDADM_DIR)/mdadm $(ROOTFS_DIR)/usr/bin
	install $(TOOLS_DIR)/$(MDADM_DIR)/mdadm.conf $(ROOTFS_DIR)/etc


#
#  Applications arm
#
apps_arm: appget armprep oemprep bkapps_arm
	make -C $(APPS_DIR)/$(PJPROJ_DIR)
	make -C $(APPS_DIR)

bkapps_arm:
	make -C $(APPS_DIR)/$(BRFS_INIT_DIR)/

#
# Applications x86
#
apps_x86: appget x86prep oemprep
	make -C $(APPS_DIR)/$(PJPROJ_DIR)
	make -C $(APPS_DIR)


#
# Applications - Production test
#
prodtest:
	make -C $(APPS_DIR)/$(PRODTEST_DIR)/ all

prodtest_clean:
	make -C $(APPS_DIR)/$(PRODTEST_DIR)/ clean

prodtest_install:
	install $(APPS_DIR)/$(PRODTEST_DIR)/prodtest $(ROOTFS_DIR)/usr/local/sbin/
	install $(APPS_DIR)/$(PRODTEST_DIR)/S51prodtest $(ROOTFS_DIR)/etc/rc.d/rcS.d

prodtest_uninstall:
	rm -f $(ROOTFS_DIR)/etc/rc.d/rcS.d/S51prodtest
	rm -f $(ROOTFS_DIR)/usr/local/sbin/prodtest
	rm -f $(APPS_INST_DIR)/usr/local/sbin/prodtest


#
# Uboot
#
uboot:
	make -C $(UBOOT_DIR) mrproper
	make -C $(UBOOT_DIR) rd88f5182_NAS2_TINY_seenergy_config
	make -C $(UBOOT_DIR)

#
# Web
#
web: webget oemprep
	make -C $(WEB_DIR) clean all


############################
#	Install
############################
install: preinstall rootfs_install web_install postinstall
full_install: preinstall kernel_install rootfs_install web_install full_postinstall

kernel_install:
	install -m 644 $(KERNEL_DIR)/arch/arm/boot/uImage $(BUILD_DIR)
	install -d $(ROOTFS_DIR)/modules/
	#find $(KERNEL_DIR)/ -name *.ko | xargs cp -t $(ROOTFS_DIR)/modules/
	install -m 644 $(KERNEL_IMG) $(TFTP_DIR)/uImage

ROOTFS_INSTALL_DEPS=common_install tools_install apps_install 
ifeq ($(CONFIG_PRODTEST),y)
	ROOTFS_INSTALL_DEPS+=prodtest_install
endif
ROOTFS_INSTALL_DEPS+=set_owner $(RAMDISK_GZ) $(ROOTFS_IMG) $(BKROOTFS_IMG)
rootfs_install: $(ROOTFS_INSTALL_DEPS)
	install -m 644 $(ROOTFS_IMG) $(TFTP_DIR)/rootfs
	install -m 644 $(BKROOTFS_IMG) $(TFTP_DIR)/bkrootfs

apps_install: bkapps_install
ifeq ($(CONFIG_APPS),y)
	install -m 755 $(APPS_INST_DIR)/home/* $(ROOTFS_DIR)/home/
endif
	install -d $(ROOTFS_DIR)/usr/local/sbin/
	install -m 755 $(APPS_INST_DIR)/usr/local/sbin/* $(ROOTFS_DIR)/usr/local/sbin/
	install -m 644 $(VERSION_FILE) $(ROOTFS_DIR)/etc/
	./prepapps.sh set_dhcp_defip
ifeq ($(CONFIG_PJPOOL_DBG),y)
	echo "CONFIG_PJPOOL_DBG=y" > $(ROOTFS_DIR)/etc/mainserver.conf
else
	echo "CONFIG_PJPOOL_DBG=n" > $(ROOTFS_DIR)/etc/mainserver.conf
endif

bkapps_install:
	install -d $(BKROOTFS_DIR)/usr/local/sbin/
	install -m 755 $(APPS_INST_DIR)/usr/local/sbin/update_d $(BKROOTFS_DIR)/usr/local/sbin/
	install -m 644 $(VERSION_FILE) $(BKROOTFS_DIR)/etc/
	./prepapps.sh set_dhcp_defip
	install -m 755 $(APPS_DIR)/$(BRFS_INIT_DIR)/bkrootfs_init $(BKROOTFS_DIR)/etc/rc.d/rcS.d/S58bkrootfs_init

web_install:
	install -m 644 $(WEB_DIR)/$(WEB_TAR) $(BUILD_DIR)

TOOLSINSTALL_OBJS=bbox_install svinit_install udev_install netkit-base_install
ifeq ($(CONFIG_OPENSSH),y)
	TOOLSINSTALL_OBJS+=openssh_install
endif
ifeq ($(CONFIG_OPENSSL),y)
	TOOLSINSTALL_OBJS+=openssl_install
endif
ifeq ($(CONFIG_SMB),y)
	TOOLSINSTALL_OBJS+=samba_install 
endif
ifeq ($(CONFIG_STUNNEL),y)
	TOOLSINSTALL_OBJS+=stunnel_install 
endif
ifeq ($(CONFIG_NETTOOL),y)
	TOOLSINSTALL_OBJS+=nettool_install
endif
ifeq ($(CONFIG_MEMSTAT),y)
	TOOLSINSTALL_OBJS+=memstat_install
endif
ifeq ($(CONFIG_MDADM),y)
	TOOLSINSTALL_OBJS+=mdadm_install
endif
TOOLSINSTALL_OBJS+=tools_postinstall
tools_install: $(TOOLSINSTALL_OBJS)

tools_postinstall: bktools_postinstall
	find $(ROOTFS_DIR)/ -name "*svn*" | xargs rm -rf

bktools_postinstall:
	find $(BKROOTFS_DIR)/ -name "*svn*" | xargs rm -rf

common_install: bkcommon_install
	tar xvzf $(TOOLS_DIR)/rootfs_util/rootfs.tar.gz -C $(ROOTFS_DIR)
	ln -sf ../lib $(ROOTFS_DIR)/home/lib
	mkdir -p $(ROOTFS_DIR)/sbin \
		$(ROOTFS_DIR)/etc/{init.d,cron.daily,logrotate.d,pam.d} \
		$(ROOTFS_DIR)/usr/{bin,sbin} \
		$(ROOTFS_DIR)/etc/network
	ln -sf /dev/shm/network $(ROOTFS_DIR)/etc/network/run

bkcommon_install:
	tar xvzf $(TOOLS_DIR)/rootfs_util/rootfs_alt.tar.gz -C $(BKROOTFS_DIR)
	ln -sf ../lib $(BKROOTFS_DIR)/home/lib
	mkdir -p $(BKROOTFS_DIR)/sbin \
		$(BKROOTFS_DIR)/etc/{init.d,cron.daily,logrotate.d,pam.d} \
		$(BKROOTFS_DIR)/usr/{bin,sbin} \
		$(BKROOTFS_DIR)/etc/network
	ln -sf /dev/shm/network $(BKROOTFS_DIR)/etc/network/run

set_owner: bkset_owner
	chown root:root $(ROOTFS_DIR)
	chown -R root:root $(ROOTFS_DIR)/bin
	chown -R root:root $(ROOTFS_DIR)/sbin
	chown -R root:root $(ROOTFS_DIR)/usr
	chown -R root:root $(ROOTFS_DIR)/etc
	chown -h root:root $(ROOTFS_DIR)/linuxrc

bkset_owner:
	chown root:root $(BKROOTFS_DIR)
	chown -R root:root $(BKROOTFS_DIR)/bin
	chown -R root:root $(BKROOTFS_DIR)/sbin
	chown -R root:root $(BKROOTFS_DIR)/usr
	chown -R root:root $(BKROOTFS_DIR)/etc
	chown -h root:root $(BKROOTFS_DIR)/linuxrc


############################
#	Clean
############################
dbgclean:
	sudo rm -rf $(BUILD_DIR)
	sudo rm -rf $(ROOTFS_DIR)/bin $(ROOTFS_DIR)/sbin $(ROOTFS_DIR)/usr $(ROOTFS_DIR)/linuxrc \
		$(ROOTFS_DIR)/init $(ROOTFS_DIR)/etc/rc.d $(ROOTFS_DIR)/modules/ \
		$(ROOTFS_DIR)/etc/default $(ROOTFS_DIR)/etc/init.d

distclean:
	make -C $(KERNEL_DIR) clean
	make -C $(TOOLS_DIR)/$(BBOX) distclean
	make -C $(TOOLS_DIR)/$(SVINIT)/src clobber
	make -C $(TOOLS_DIR)/$(UDEV_DIR) clean
	rm -rf $(TOOLS_DIR)/$(SSH_DIR)/objdir
	rm -rf $(TOOLS_DIR)/$(SMB_DIR)/objdir
	rm -f $(TOOLS_DIR)/$(SSL_DIR)/objdir
	rm -f $(TOOLS_DIR)/$(STUNNEL_DIR)/objdir

TOOLSCLEAN_OBJS= svinit_clean udev_clean netkit-base_clean
ifeq ($(CONFIG_OPENSSH),y)
	TOOLSCLEAN_OBJS+=openssh_clean
endif
ifeq ($(CONFIG_OPENSSL),y)
	TOOLSCLEAN_OBJS+=openssl_clean
endif
ifeq ($(CONFIG_SMB),y)
	TOOLSCLEAN_OBJS+=samba_clean
endif
ifeq ($(CONFIG_STUNNEL),y)
	TOOLSCLEAN_OBJS+=stunnel_clean
endif
ifeq ($(CONFIG_NETTOOL),y)
	TOOLSCLEAN_OBJS+=nettool_clean
endif
ifeq ($(CONFIG_MEMSTAT),y)
	TOOLSCLEAN_OBJS+=memstat_clean
endif
ifeq ($(CONFIG_MDADM),y)
	TOOLSCLEAN_OBJS+=mdadm_clean
endif
tool_clean: $(TOOLSCLEAN_OBJS)
	@echo "Subdirectory Tools cleaned";

uboot_clean:
	make -C $(UBOOT_DIR) clean

clean: apps_clean web_clean tool_clean uboot_clean

kernel_clean:
	make -C $(KERNEL_DIR) clean

rootfs_clean: bkrootfs_clean
	rm -f $(RAMDISK_GZ)
	rm -f $(ROOTFS_IMG)

bkrootfs_clean:
	rm -f $(BKRAMDISK_GZ)
	rm -f $(BKROOTFS_IMG)

apps_clean: bkapps_clean
	make -C $(APPS_DIR)/$(PJPROJ_DIR) clean
	make -C $(APPS_DIR) clean
	rm -rf $(APPS_INST_DIR)

bkapps_clean:
	make -C $(APPS_DIR)/bkrootfs_init clean

web_clean: webget
	make -C $(WEB_DIR) clean


############################
#	Prep rules
############################
armprep:
	./prepapps.sh arm

x86prep:
	./prepapps.sh x86

oemprep:
	./prepapps.sh oem

rootfsprep:
	install -d $(APPS_INST_DIR)/home/
	install -d $(APPS_INST_DIR)/usr/local/sbin/


############################
#	Get rules
############################
REVISION=
ifneq ($(CONFIG_REVISION),HEAD)
	REVISION=-r $(CONFIG_REVISION)
endif
RELEASE=
ifneq ($(CONFIG_RELEASE),trunk)
	RELEASE=$(CONFIG_RELEASE)
endif

kernelget: headerget
	svn co $(REVISION) http://twss:81/svn/Project/D00100/trunk/source/$(KERNEL_DIR) $(KERNEL_DIR)

rootfsget: toolsget appget headerget

headerget:
	svn co $(REVISION) http://twss:81/svn/Project/D00100/trunk/source/$(HEADER_DIR) $(HEADER_DIR)

toolsget:
	svn co $(REVISION) http://twss:81/svn/Project/D00100/trunk/source/$(TOOLS_DIR) $(TOOLS_DIR)

ubootget:
	svn co $(REVISION) http://twss:81/svn/Project/D00100/trunk/source/$(UBOOT_DIR) $(UBOOT_DIR)

appget:
	svn co $(REVISION) http://twss:81/svn/Project/DA0100/$(CONFIG_RELEASE)/source $(APPS_DIR)
	install -d $(APPS_DIR)/library

webget: headerget
	svn co $(REVISION) http://twss:81/svn/Project/D00100/trunk/source/tools/rootfs_util/web tools/rootfs_util/web
	svn co $(REVISION) http://twss:81/svn/Project/DA0100/$(CONFIG_RELEASE)/source/web $(WEB_DIR)
	cp $(TOOLS_DIR)/$(WEB_MAKEFILE)/Makefile $(WEB_DIR)


.PHONY: all install full_install clean distclean appclean rootfs_clean webclean\
	kernel rootfs rootfsprep uboot apps_arm apps_x86 armprep x86prep web \
	tools udev svinit bbox openssh netkit-base openssl stunnel \
	kernelget rootfsget toolsget ubootget appget webget headerget \
	rootfs_install common_install udev_install apps_install tools_install bbox_install \
	openssh_install netkit-base_install openssl_install stunnel_install \
	prodtest prodtest_install prodtest_clean
