#!/bin/bash -e

SCRIPTDIR=/usr/bin

if [ "$0" = ./mklivecd ]; then
    SCRIPTDIR=.
    . ../data/functions
else
    . /usr/share/separator/functions
fi


PROG="${0##*/}"

print_usage()
{
    [ "$1" = 0 ] || exec >&2
    cat <<EOF
Usage: $PROG [options] <workdir>

$PROG - tool for create live cd from Sisyphus repository with configs into <workdir>

Valid options are:
  -h, --help	display help screen
  -v, --version	display version information
  -d, --debug 	show debug output
  -c, --isoonly create iso image from current out tree
		     				     
Report bugs to <rider@altlinux.org>
EOF
    [ -n "$1" ] && exit "$1" || exit
}

#parse command line options
TEMP=`getopt -n $PROG -o a:,b:,v,d,h,c -l aptconf:,box:,version,debug,help,onlyiso -- "$@"` || exit 1
eval set -- "$TEMP"

workdir=
deps_file=
langs=
ONLYISO=
ONLYBOX=
while :; do
    case "$1" in
	-h|--help) print_usage 0
	    ;;
	-w|--workdir)
	    shift
	    workdir="$1"
	    ;;
	-c|--onlyiso)
	    ONLYISO=1
	    ;;
	-d|--debug)
	    DEBUG=1
	    MKARGS="-d"
	    ;;
	-b|--box)
	    shift
	    ONLYBOX="$1"
	    ;;
	-v|--version) print_version;exit 0
	    ;;
	--) shift; break
	;;
	*) "unrecognized option: $1"
	exit 1
	;;
    esac
    shift
done

WORKDIR=$@


[ -z "$WORKDIR" ] && print_usage 0
WORKDIR=`realpath $WORKDIR`
APTBOX="$WORKDIR/aptbox"
PROFILE="$WORKDIR/profile"
LISTDIR="$PROFILE/packages"
TMPDIR="$WORKDIR/tmp"
OUTDIR="$WORKDIR/out"

[ -d "$PROFILE" ] || print_usage 0

. "$PROFILE/config"

[ -n "$ONLYBOX" ] && BOXES="$ONLYBOX"

if [ -z "$ONLYISO" ];then
    # create root for all boxes
    $SCRIPTDIR/mklive-root -b "$BOXES" $MKARGS $WORKDIR || exit 1
    # make it bootable
    $SCRIPTDIR/mklive-boot $WORKDIR || exit 1
fi


if [ -z "$BOXES" ];then
    Info "BOXES not found, proccesing default box..."    
    BOXES="__FALSEGHRBDNSK"
fi



# process for all boxes
for BOX in $BOXES;do
    CDFILENAME=
    # use config for boxes, if exists
    if [ -f $PROFILE/$BOX ];then 
	Info "Making box bootable with $BOX configuration file"
	. $PROFILE/$BOX
	OUTDIR="$WORKDIR/out/$BOXID"
    else
	if [ "$BOX" != "__FALSEGHRBDNSK" ];then
	    Info "configuration file $BOX not found"
	    exit 1
	fi
    fi
    
    # create file with information about disk
    mkdir -p $OUTDIR/.disk/
    echo "$PUBLISHER $VERSION $LABEL ($CODENAME)" >$OUTDIR/.disk/info

    [ -z "$CDFILENAME" ] && CDFILENAME=livecd.iso
    # make iso
    mkisofs -b isolinux/isolinux.bin -c isolinux/boot.cat -copyright "LICENSE.html" --volset "$PUBLISHER $VERSION $LABEL ($CODENAME)" -V "$SUITE" -publisher "$PUBLISHER" -p `id -n -u` -sysid "$ORIGIN" -no-emul-boot -boot-info-table -boot-load-size 4 -J -l -r -o $WORKDIR/$CDFILENAME $OUTDIR/
    echo
    Info "Done: $WORKDIR/$CDFILENAME"
    echo
done
