#
# Remote Drive Share
# Copyright (c) 2010, Intel Corporation.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms and conditions of the GNU General Public License,
# version 2, as published by the Free Software Foundation.
#
# This program is distributed in the hope 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., 
# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
#

# Constants
APP = rds
APP_ISO = $(APP).iso
BUSYBOX = busybox-1.16.2
LINUX = linux-2.6.33.2
NTFS3G = ntfs-3g-2010.3.6
LIBNTFS3G = libntfs-3g.so.75
SAMBA = samba-3.4.1
SYSLINUX = syslinux-3.84
ZLIB = zlib-1.2.3

all: clean init busybox samba ntfs-3g kernel syslinux zlib iso 

#--------------------------------------------------------------------------------------

clean:
	-rm -rf _install
	-rm -rf kernel
	-rm $(APP_ISO)
	-rm $(APP_KVMISO)

#--------------------------------------------------------------------------------------

#Initialize
init:
	-mkdir _install
	
	#Setup Init
	-cp -R collateral/etc/ _install/

	#create necessary default directories
	-mkdir _install/mnt
	-mkdir _install/proc
	-mkdir _install/root
	-mkdir _install/tmp
	-mkdir _install/sys
	-mkdir _install/sys/class
	-mkdir _install/dev

	#create block devices for login
	-mknod -m 600 _install/dev/console c 5 1 
	-mknod -m 600 _install/dev/ram0 b 1 0

	#copy udhcpc script
	-mkdir _install/usr
	-mkdir _install/usr/share
	-mkdir _install/usr/share/udhcpc
	-cp collateral/default.script _install/usr/share/udhcpc/default.script

#--------------------------------------------------------------------------------------

	
#busybox
.PHONY: busybox
busybox: init
	#busybox requires libm.so.6
	-mkdir _install/bin
	-mkdir _install/lib
	-mkdir _install/lib/tls
	-mkdir _install/lib/tls/i686
	-mkdir _install/lib/tls/i686/cmov
	-mkdir _install/sys
	-mkdir _install/sys/class
	
	#copy libs from rds libs directory
	-cp collateral/libs/libm.so.6 _install/lib/tls/i686/cmov/libm.so.6
	
	#install fresh
	-rm -rf busybox
	-tar -xf tars/$(BUSYBOX).tar.bz2
	-mv $(BUSYBOX) busybox
	
	cd busybox; make distclean; cp -a ../collateral/busybox/.busyboxconfig .config;	make install

#--------------------------------------------------------------------------------------

#SAMBA
.PHONY: samba
samba: init
	#install fresh
	-rm -rf samba
	-tar -xf tars/$(SAMBA).tar.gz
	-mv $(SAMBA) samba
	
	#make samba
	-rm -rf samba/_install
	-mkdir samba/_install
	cd samba/source3; ./configure --enable-shared=yes --disable-cups --disable-swat --disable-iprint --without-ldap --without-ads --without-cifsmount --without-sendfile-support --disable-pie --disable-fam --disable-gnutls --with-included-popt --without-winbind --without-sys-quotas --without-cluster-support

	cd samba/source3; make
	path=`pwd`; cd samba/source3; make install prefix="$$path"/samba/_install

	#create _install destination directories
	-mkdir _install/bin
	-mkdir _install/tmp
	-mkdir _install/usr
	-mkdir _install/usr/lib
	-mkdir _install/usr/lib/auth
	-mkdir _install/usr/local/
	-mkdir _install/usr/local/samba
	-mkdir _install/usr/local/samba/lib
	-mkdir _install/usr/local/samba/lib/charset
	-mkdir _install/usr/local/samba/lib/private
	-mkdir _install/usr/local/samba/private
	-mkdir _install/usr/local/samba/var
	-mkdir _install/usr/local/samba/var/empty
	-mkdir _install/usr/local/samba/var/lib
	-mkdir _install/usr/local/samba/var/lib/misc
	-mkdir _install/usr/local/samba/var/locks
	-mkdir _install/usr/local/samba/var/log
	-mkdir _install/usr/local/samba/var/run
	-mkdir _install/lib
	-mkdir _install/lib/auth
	-mkdir _install/lib/tls
	-mkdir _install/lib/tls/i686
	-mkdir _install/lib/tls/i686/cmov
	-mkdir _install/sbin
	-mkdir _install/share
	-mkdir _install/share/locale
	-mkdir _install/var
	-mkdir _install/var/empty
	-mkdir _install/var/lib
	-mkdir _install/var/lib/misc
	-mkdir _install/var/locks
	-mkdir _install/var/log
	-mkdir _install/var/log/samba
	-mkdir _install/var/run

	#Start File copy from Samba _install Directory
	cp samba/_install/lib/libtalloc.so.1 _install/usr/lib/libtalloc.so.1
	cp samba/_install/lib/libtdb.so.1 _install/usr/lib/libtdb.so.1
	cp samba/_install/lib/lowcase.dat _install/lib/lowcase.dat
	cp samba/_install/lib/upcase.dat _install/lib/upcase.dat
	cp samba/_install/lib/valid.dat _install/lib/valid.dat
	cp samba/_install/lib/valid.dat _install/usr/local/samba/lib/valid.dat

	cp samba/_install/lib/auth/script.so _install/lib/auth/script.so

	cp samba/_install/lib/charset/CP437.so _install/lib/CP437.so
	cp samba/_install/lib/charset/CP850.so _install/lib/CP850.so

	cp samba/_install/sbin/nmbd _install/sbin/nmbd
	strip _install/sbin/nmbd
	upx -9 -q _install/sbin/nmbd
	cp samba/_install/sbin/smbd _install/sbin/smbd
	strip _install/sbin/smbd
	upx -9 -q _install/sbin/smbd
	cp samba/testdata/samba3/secrets.tdb _install/usr/local/samba/private/secrets.tdb
	
	cp samba/_install/bin/pdbedit _install/bin/pdbedit
	strip _install/bin/pdbedit
	upx -9 -q _install/bin/pdbedit

	cp -R samba/_install/share/locale/ _install/share/
	#End File copy from Samba _install Directory

	#copy from collateral
	cp collateral/samba/smb.conf _install/usr/local/samba/lib/smb.conf
	#end copy from collateral

	#create empty tmp log files
	touch _install/var/log/wtmp
	touch _install/var/run/utmp
	touch _install/usr/local/samba/var/log/wtmp
	touch _install/usr/local/samba/var/run/utmp

	#Start Copy from rds libs
	cp collateral/libs/libresolv.so.2 _install/lib/tls/i686/cmov/libresolv.so.2
	cp collateral/libs/libnsl.so.1 _install/lib/tls/i686/cmov/libnsl.so.1
	cp collateral/libs/libdl.so.2 _install/lib/tls/i686/cmov/libdl.so.2
	cp collateral/libs/libc.so.6 _install/lib/tls/i686/cmov/libc.so.6
	cp collateral/libs/ld-linux.so.2 _install/lib/ld-linux.so.2
	cp collateral/libs/libcrypt.so.1 _install/lib/tls/i686/cmov/libcrypt.so.1
	cp collateral/libs/libnss_dns.so.2 _install/lib/libnss_dns.so.2
	cp collateral/libs/libnss_files.so.2 _install/lib/libnss_files.so.2
	#End Copy from rds libs
 
#--------------------------------------------------------------------------------------

#NTFS-3G *** only compile if ntfs-3g tar file exists ***
.PHONY: ntfs-3g
ntfs-3g: init

	-rm -rf ntfs-3g
	-rm _install/bin/ntfs-3g
	-rm _install/lib/$(LIBNTFS3G)

	#install fresh
ifeq ($(findstring tgz,$(wildcard tars/ntfs-3g*)), tgz)
	-tar -xf tars/$(NTFS3G).tgz
else
	-tar -xf tars/$(NTFS3G).gz
endif
	-mv $(NTFS3G) ntfs-3g
	
	#Clean ntfs-3g
	-rm -rf ntfs-3g/src/attr
	-mkdir ntfs-3g/src/attr
	-cp collateral/headers/xattr.h ntfs-3g/src/attr/xattr.h
	cd ntfs-3g; ./configure
	cd ntfs-3g; make clean
	cd ntfs-3g; make
	
	#create directory structure in destination _install
	-mkdir _install/lib
	-mkdir _install/lib/tls
	-mkdir _install/lib/tls/i686
	-mkdir _install/lib/tls/i686/cmov
	-mkdir _install/bin
	#create directory structure in destination _install

	#start copy from ntfs 3g install
	-cp ntfs-3g/src/.libs/ntfs-3g _install/bin/ntfs-3g
	strip _install/bin/ntfs-3g
	upx -9 -q _install/bin/ntfs-3g
	-cp ntfs-3g/libntfs-3g/.libs/$(LIBNTFS3G) _install/lib/$(LIBNTFS3G)
	#end copy from ntfs 3g install

	#start copy from rds libs
	-cp collateral/libs/libpthread.so.0 _install/lib/tls/i686/cmov/libpthread.so.0 
	-cp collateral/libs/ld-linux.so.2 _install/lib/ld-linux.so.2
	-cp collateral/libs/libc.so.6 _install/lib/tls/i686/cmov/libc.so.6
	#end copy from rds libs

#--------------------------------------------------------------------------------------

#KERNEL
.PHONY: kernel
kernel: init
	#install fresh
	-rm -rf linux
	-tar -xf tars/$(LINUX).tar.bz2
	-mv $(LINUX) linux
	
	-mkdir kernel
	cd linux; make distclean; make mrproper
	-cp -a collateral/linux/.config linux/.config
	cd linux; make bzImage
	-cp -a linux/arch/x86/boot/bzImage kernel/vmlinuz-rds
	-cp -a linux/usr/gen_init_cpio kernel/gen_init_cpio

#--------------------------------------------------------------------------------------

#Syslinux
.PHONY: syslinux
syslinux: init
	#install fresh
	-rm -rf syslinux
	-tar -xf tars/$(SYSLINUX).tar.gz
	-mv $(SYSLINUX) syslinux
	
	-rm collateral/iso/isolinux.bin
	cd syslinux; make clean
	cd syslinux; make
	cp -a syslinux/core/isolinux.bin collateral/iso/isolinux.bin

#---------------------------------------------------------------------------------------

#Zlib Library
.PHONY: zlib
zlib: init
	#install fresh
	-rm -rf zlib
	-tar -xf tars/$(ZLIB).tar.gz
	-mv $(ZLIB) zlib
	

	#Clean old zlib iso and make clean
	-rm _install/lib/libz.so.1
	cd zlib; make clean
	-rm -rf zlib/_install

	#Create necessary directories
	-mkdir zlib/_install
	-mkdir zlib/_install/libdir
	-mkdir _install/lib
	
	#make zlib
	path=`pwd`; cd zlib; ./configure --prefix="$$path"/zlib/_install --libdir="$$path"/zlib/_install/libdir --shared
	cd zlib; make
	cd zlib; make install

	#copy zlib lib to _install
	cp -a zlib/_install/libdir/libz.so.1.2.3 _install/lib/libz.so.1

#--------------------------------------------------------------------------------------

#ISO
iso:
	rm -f $(APP)
	rm -f $(APP_ISO)
	rm -rf isoimage/
	rm -rf cdrom
	rm -rf images

	#copy main script for sol operation
	-mkdir _install/usr/bin
	-cp collateral/usr/bin/runscript _install/usr/bin/runscript

	#copy licenses and images
	mkdir -p images cdrom isoimage
	cp -a collateral/license/COPYING.2 isoimage/
	cp -a collateral/license/COPYING.3 isoimage/
	cp -a collateral/license/COPYING.LIB isoimage/
	cp -a collateral/iso/isolinux.bin isoimage/
	cp -a collateral/iso/isolinux.cfg isoimage/
	cp -a kernel/vmlinuz-rds isoimage/vmlinuz

	dd if=/dev/zero of=images/initrd.img bs=1k count=160000
	/sbin/mke2fs -F -v -m0 images/initrd.img
	mount -o loop images/initrd.img ./cdrom
	chmod 4755 ./_install/bin/busybox
	cp -av _install/* ./cdrom/.
	umount ./cdrom
	gzip -9 < images/initrd.img > isoimage/initrd.bin

	mkisofs -R -o ./$(APP_ISO) -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table isoimage/
	rm -rf isoimage/
	rm -rf cdrom
	rm -rf images	

