TOPDIR=$(CURDIR)
APT-DIST=http://ftp.us.debian.org/debian/pool/main/a/apt/apt_0.8.15.10.tar.gz
DPKG-DIST=http://ftp.us.debian.org/debian/pool/main/d/dpkg/dpkg_1.16.2.tar.bz2
APTPATH=$(CURDIR)/apt-0.8.15.10/bin:$(CURDIR)/usr/bin
TAR=ftp://ftp.gnu.org/gnu/tar/tar-1.26.tar.gz
FAKEROOT_VERSION:=1.9.5
FAKEROOT_SOURCE:=fakeroot_$(FAKEROOT_VERSION).tar.gz
FAKEROOT_SITE:=http://snapshot.debian.org/archive/debian/20080427T000000Z/pool/main/f/fakeroot/

all: apt

apt-download:
	if [ ! -f apt_0.8.15.10.tar.gz ]; then wget $(APT-DIST); fi
	if [ ! -f dpkg_1.16.2.tar.bz2 ]; then wget $(DPKG-DIST); fi
	if [ ! -f tar-1.26.tar.gz ]; then wget $(TAR); fi
	-rm -rf dpkg-1.16.2 dpkg-1.16.2.ori
	-rm -rf apt-0.8.15.10 apt-0.8.15.10.ori
	tar xvf tar-1.26.tar.gz
	tar xvf apt_0.8.15.10.tar.gz; cp -r dpkg-1.16.2 dpkg-1.16.2.ori; \
		cat apt-0.8.15.10.diff | patch -p1 -d apt-0.8.15.10
	tar xvf dpkg_1.16.2.tar.bz2; cp -r apt-0.8.15.10 apt-0.8.15.10.ori; \
		cat dpkg-1.16.2.diff | patch -p1 -d dpkg-1.16.2
	cd apt-0.8.15.10/buildlib; rm config.guess config.sub; \
		ln -s $(TOPDIR)/usr/misc/config.guess config.guess; \
		ln -s $(TOPDIR)/usr/misc/config.sub config.sub;

host-fakeroot-do:
	wget $(FAKEROOT_SITE)/$(FAKEROOT_SOURCE)
	tar xvf $(FAKEROOT_SOURCE)
	cd fakeroot-$(FAKEROOT_VERSION); ./configure --prefix=$(TOPDIR)/usr; make; make install

host-makedevs-do:
	gcc makedevs.c -o $(TOPDIR)/usr/bin/makedevs

host-fakeroot:
	if [ ! -e $(TOPDIR)/usr/bin/fakeroot ]; then make host-fakeroot-do; fi

host-makedevs:
	if [ ! -e $(TOPDIR)/usr/bin/makedevs ]; then make host-makedevs-do; fi

dpkg-compile:
	cd dpkg-1.16.2; ./configure --prefix=$(TOPDIR)/usr; make; make install

apt-compile:
	cd apt-0.8.15.10; ./configure --prefix=$(TOPDIR)/usr; make; 

tar-install:
	cd tar-1.26; ./configure --prefix=$(TOPDIR)/usr; make; make install

perl-install:
	perl -MCPAN -e 'install Config::Auto'
	perl -MCPAN -e 'install Parse::Debian::Packages'
	perl -MCPAN -e 'install Locale::gettext'

apt:
	export PATH=$${PATH}:$(APTPATH); \
	if [ ! -e /usr/bin/apt-get ]; then \
		echo apt-get missing; \
		make apt-download dpkg-compile apt-compile perl-install tar-install; \
	fi


multi-get: apt
	rm -rf $(CURDIR)/dist-multistrap-w
	cat m-sparc.config | sed -e 's@--CURDIR--@$(CURDIR)@g' > m-sparc-mod.config
	if [ ! -e /usr/bin/apt-get ]; then \
		export LD_LIBRARY_PATH=$(CURDIR)/apt-0.8.15.10/bin:$${LD_LIBRARY_PATH}; \
		export PERL5LIB=$${PERL5LIB}:$(CURDIR)/usr/lib/perl5/vendor_perl/5.10.0; \
		export PATH=$(APTPATH):$${PATH}; \
		perl $(CURDIR)/multistrap -m $(CURDIR)/apt-0.8.15.10/bin/methods -f $(CURDIR)/m-sparc-mod.config; \
	else \
		perl $(CURDIR)/multistrap -f $(CURDIR)/m-sparc-mod.config; \
	fi



multi: multi-get
	make multi-cpio
	make multi-nfs

# do some basic patching to be able for /init to
# get to a shell:
multi-prepare:
	cd $(PREPARE_DIR); ln -s sbin/init init; mkdir -p home/r0
	cp config/passwd.master $(PREPARE_DIR)/etc/passwd
	cp config/shadow.master $(PREPARE_DIR)/etc/shadow
	chmod a+r $(PREPARE_DIR)/etc/passwd
	cp -r config/pam.d/* $(PREPARE_DIR)/etc/pam.d/
	cp config/rc.master $(PREPARE_DIR)/etc/init.d/rc
	cp config/inittab.master $(PREPARE_DIR)/etc/inittab
	cp config/fstab.master $(PREPARE_DIR)/etc/fstab
	cd $(PREPARE_DIR); du -h . --max-depth=1

FAKEROOT_SCRIPT=$(CURDIR)/fakeroot.sh
CPIO=$(CURDIR)/dist-multistrap-w-cpio
FAKEROOT_TARGET_DIR=$(CPIO)
FULL_DEVICE_TABLE=$(CURDIR)/fakeroot_device_table.txt
ROOTFS_DEVICE_TABLES=$(CURDIR)/config/device_table.txt
multi-cpio: host-fakeroot host-makedevs
	rm -rf $(CPIO)
	cp -r $(CURDIR)/dist-multistrap-w $(CPIO)
	mv $(CPIO)/usr/share/locale $(CPIO)/usr/share/locale.bck
	mv $(CPIO)/usr/share/zoneinfo $(CPIO)/usr/share/zoneinfo.bck
	mkdir -p $(CPIO)/usr/share/locale
	mkdir -p $(CPIO)/usr/share/zoneinfo
	mv $(CPIO)/usr/share/locale.bck/en* $(CPIO)/usr/share/locale/
	mv $(CPIO)/usr/share/zoneinfo.bck/G* $(CPIO)/usr/share/zoneinfo/
	mv $(CPIO)/usr/share/zoneinfo.bck/CET $(CPIO)/usr/share/zoneinfo/
	rm -rf $(CPIO)/usr/share/{man,locale.bck,zoneinfo.bck,doc}
	rm -rf $(CPIO)/usr/share/{menu,misc,pixmaps,lintian}
	rm -rf $(CPIO)/usr/share/{perl,perl5}
	rm -rf $(CPIO)/usr/lib/gcc*
	rm -rf $(CPIO)/usr/lib/{python3,python2.6,python2.7,perl}
	rm -rf $(CPIO)/usr/bin/dpkg*
	rm -rf $(CPIO)/usr/bin/debconf-*
	rm -rf $(CPIO)/usr/bin/perl*
	rm -rf $(CPIO)/usr/bin/{oldfind,partx}
	rm -rf $(CPIO)/usr/bin/sha*
	rm -rf $(CPIO)/usr/bin/sensible*
	rm -rf $(CPIO)/usr/bin/{tic,timeout,find,csplit,debconf,delpart,diff,diff3,localedef,md5sum,mawk}
	rm -rf $(CPIO)/usr/bin/{ncurses5-config,ncursesw5-config,du,addpart}
	rm -rf $(CPIO)/sbin/fsck*
	rm -rf $(CPIO)/sbin/mkfs*
	rm -rf $(CPIO)/sbin/{fstab-decode,findfs,fdisk,mkswap}
	rm -rf $(CPIO)/usr/lib/libperl*
	rm -rf $(CPIO)/usr/lib/sparc-linux-gnu/gconv
	rm -rf $(CPIO)/var/lib/*
	rm -rf $(CPIO)/var/cache/apt
	make PREPARE_DIR=$(CPIO) multi-prepare
	echo "Generating root filesystem image rootfs.cpio"
	rm -f $(FAKEROOT_SCRIPT)
	echo "" > $(FAKEROOT_SCRIPT)
	echo "chown -R 0:0 $(FAKEROOT_TARGET_DIR)" >> $(FAKEROOT_SCRIPT)
	cat $(ROOTFS_DEVICE_TABLES) > $(FULL_DEVICE_TABLE)
	echo "$(CURDIR)/usr/bin/makedevs -d $(FULL_DEVICE_TABLE) $(FAKEROOT_TARGET_DIR)" >> $(FAKEROOT_SCRIPT)
	echo "cd $(FAKEROOT_TARGET_DIR) && find . | cpio --quiet -o -H newc > $(CURDIR)/rootfs.cpio" >> $(FAKEROOT_SCRIPT)
	chmod a+x $(FAKEROOT_SCRIPT)
	$(CURDIR)/usr/bin/fakeroot -- $(FAKEROOT_SCRIPT)

multi-nfs:
	rm -rf $(CURDIR)/dist-multistrap-w-nfs
	cp -r $(CURDIR)/dist-multistrap-w $(CURDIR)/dist-multistrap-w-nfs
	make PREPARE_DIR=$(CURDIR)/dist-multistrap-w-nfs multi-prepare

build:
	-rm -f ../.rootfs.cpio
	-ln -s $(CURDIR)/rootfs.cpio ../.rootfs.cpio

#	make -f $(CURDIR)/Makefile multi-cpio
#multi

pre_postconfig:
	-rm -f ../.rootfs.cpio
	-ln -s $(CURDIR)/rootfs.cpio ../.rootfs.cpio
