#!/bin/sh

. ./scripts/parse-config

if [ "$arch" = any ] ; then
	echo
	echo "ERROR: No architecture configured."
	echo
	echo "Type './scripts/Help Config' for details."
	echo
	exit 1
fi

start="`date '+%D %T'`"

finish() {
	for x in 1 2 3 4 5 6 7 8 9 0 ; do echo -en \\007 ; sleep 1 ; done
	exit $1
}

warnbeep() {
	echo -en \\007 ; sleep 1 ; echo -en \\007 ; sleep 1
	echo -en \\007 ; sleep 1 ; echo -en \\007 ; sleep 5
}

{
	trap 'exit 1' INT
	exec < /dev/null

	echo -e "\n ** Testing **\n"
	
	echo -e "\n ** Cleaning up **\n"
	./scripts/Cleanup
	
	echo -n "Free Disk Space: "
        x=`df . | tail -1 | tr -s ' ' | cut -f4 -d' '` ; x=`expr $x / 1024`
        if [ $x -gt 3700 ] ; then echo "$x MB -> ok." ; else
        echo "$x MB -> WARNING: may be not enough (<3700)" ; warnbeep ; fi
	
	if [ -f rock-$arch-$rockver/base-pkgs/00-dirtree.tar.bz2 ] ; then

		echo -e "\n **  WARNING  **\n"
		echo -e "Found packages in rock-$arch-$rockver/ -> skipping" \
		     "building of packages!\n"
		warnbeep

	else
	
	    echo -e "\n ** Building Stage 1 **"
	    ./scripts/Build-Stage 1 || finish 1

	    if [ $crossnative = native ] ; then
		
		echo -e "\n ** Stages 2-5 and E in the chroot tree **\n"
		#
		
		chroot="$base/dist"
		
		if [ ! -f "$chroot/rock-orig/scripts/Build-Pkg" ] ; then
                  realbase=$(dirname $(cd scripts ; /bin/pwd))
		  mkdir -p $chroot/rock-linux
		  mkdir -p $chroot/rock-orig
		  mount --bind $realbase $chroot/rock-orig
		fi
		
		[ -d $chroot/dev/shm ]     || mount -t devfs none $chroot/dev
		[ -d $chroot/proc/mounts ] || mount -t proc  none $chroot/proc
		
		cp -v Config $chroot/rock-linux/Config
		[ -f /etc/localtime ] && cp -v /etc/localtime $chroot/etc/localtime
		
		#
		cd $chroot ; cat > make_chroot.sh <<- EOS
			. /etc/profile
			set -e
			cd /rock-orig
			./scripts/Create-Links /rock-linux
			cd /rock-linux
			rm -f backup
			./scripts/Build-Stage 2
			./scripts/Build-Stage 3
			./scripts/Build-Stage 4
			if [ $makerebuild != 0 ] ; then
				./scripts/Build-Stage 5
			fi
			if [ $buildextpkgs != 0 ] ; then
				./scripts/Build-Stage E
			fi
			./scripts/Build-Pkg rock-debug
		EOS
		chroot $chroot/ /bin/sh make_chroot.sh || finish 1
		rm -f make_chroot.sh ; cd $base ; echo
	    	umount $chroot/{rock-orig,proc,dev} > /dev/null 2>&1
	    fi

	    echo -e "\n ** Move package files **\n"

	    mkdir -p rock-$arch-$rockver/base-pkgs

	    # Move base packages
	    #
	    echo "Moving package archives to the proper location ..."
	    grep '^[xoz]' scripts/packages | cut -d ' ' -f5 | while read pkg ; do
		[ -f tars/$arch-$pkg.tar.bz2 ] &&
			mv -v tars/$arch-$pkg.tar.bz2 \
			      rock-$arch-$rockver/base-pkgs/$pkg.tar.bz2
		[ -f $chroot/rock-linux/tars/$arch-$pkg.tar.bz2 ] &&
			mv -v $chroot/rock-linux/tars/$arch-$pkg.tar.bz2 \
			      rock-$arch-$rockver/base-pkgs/$pkg.tar.bz2
	    done

	    # Move package meta data (base and ext)
	    #
	    rm -rf rock-$arch-$rockver/info
	    mv -v $chroot/var/adm rock-$arch-$rockver/info

	    # info.tar.bz2 (needed for network install)
	    #
	    tar --use-compress-program=bzip2 -cf \
		rock-$arch-$rockver/info/info.tar.bz2 \
		-C rock-$arch-$rockver/info/ flists/ packages/ cksums/

	    # create rock-$arch-$rockver/Install.bin
	    #
	    cp $chroot/usr/lib/install-disk/bin/install_bin.static \
	       rock-$arch-$rockver/Install.bin

	fi

	if [ $crossnative = native ] ; then
	    echo "\n ** Building default subdistributions **"

	    if [ $abortonerror = 1 ] ; then
		./scripts/Build-Subdist install-disks || finish 1
		./scripts/Build-Subdist rescue        || finish 1
		# ./scripts/Build-Subdist read-only     || finish 1
	    else
		./scripts/Build-Subdist install-disks
		./scripts/Build-Subdist rescue
		# ./scripts/Build-Subdist read-only
	    fi
	fi

	#echo -e "\n ** Clean up **\n"
	#./scripts/Cleanup

	date "+%n ** Finished ($start - %D %T) **%n"
} 2>&1 | {
	trap '' INT
	tee -a build.out
}

finish 0
