#!/bin/bash

usage() {
	echo "Usage: buildinstall [--comp <component>] [--pkgorder <file>] [--version <version>] [--product <product>] [--release <comment>] [--prodpath <path>] [--discs <discstring>] <root>" >&2
	exit 1
}

COMPNAME=dist-7.0
RUN=1
PRODUCTPATH="PU_IAS"

while [ $# -gt 0 ]; do
    case $1 in
	--pkgorder)
	    PKGORDER=$2
	    PKGORDERSTR="--pkgorder $2"
	    shift; shift
	    ;;
	--comp)
	    COMPNAME=$2
	    shift; shift
	    ;;
	--version)
	    VERSION=$2
	    shift; shift
	    ;;
	--release)
	    RELEASESTR=$2
	    shift; shift
	    ;;
        --product)
	    PRODUCTSTR=$2
	    shift; shift
	    ;;
	--prodpath)
	    PRODUCTPATH=$2
	    shift; shift
	    ;;
	--debug)
	    DEBUGSTR="--debug"
	    shift
	    ;;
	--second)
	    RUN=2
	    shift
	    ;;
	--buildinstdir)
	    BUILDINSTDIR=$2
	    shift; shift
	    ;;
	--discs)
	    DISCSTR=$2
	    shift; shift
	    ;;
	*)
	    if [ -n "$DIR" -o ! -d $1/$PRODUCTPATH/RPMS ]; then
		usage
	    fi
	    DIR=$1
	    shift
	    ;;
    esac
done

if [ -z "$PRODUCTSTR" ]; then
    usage
fi

if [ -z "$VERSION" ]; then
    usage
fi

if [ -z "$DIR" ]; then
    usage
fi

if [ -z "$RELEASESTR" ]; then
    usage
fi

if [ -z "$DISCSTR" ]; then
    DISCSTR="1,2,3"
fi

p=`cd $DIR; /bin/pwd`

if [ -z "$BUILDINSTDIR" ]; then
    BUILDINSTDIR=$p/buildinstall.tree.$$
    rm -rf $BUILDINSTDIR
    mkdir -p $BUILDINSTDIR
fi
TREEDIR=/tmp/treedir.$$

UPD_INSTROOT=$BUILDINSTDIR/upd-instroot
MK_IMAGES=$BUILDINSTDIR/mk-images
MK_STAMP=$BUILDINSTDIR/makestamp.py
BUILDINSTALL=$BUILDINSTDIR/buildinstall

BUILDARCH=`rpm -qp --qf "%{ARCH}" $p/$PRODUCTPATH/RPMS/anaconda-runtime-[0-9]*`

firstRun() {
echo "Running buildinstall..."

pushd $BUILDINSTDIR
rpm2cpio $p/$PRODUCTPATH/RPMS/anaconda-runtime-[0-9]* | cpio --quiet -iumd './usr*'
popd

UPD_INSTROOT=./upd-instroot
MK_IMAGES=./mk-images
MK_STAMP=./makestamp.py
BUILDINSTALL=./buildinstall

for f in $UPD_INSTROOT $MK_IMAGES $MK_STAMP $BUILDINSTALL; do
    if [ ! -f $f ]; then
	cp -a $BUILDINSTDIR/usr/lib/anaconda-runtime/$f* $BUILDINSTDIR/
    else
	cp -a $f* $BUILDINSTDIR/
    fi
done

UPD_INSTROOT=$BUILDINSTDIR/upd-instroot
MK_IMAGES=$BUILDINSTDIR/mk-images
MK_STAMP=$BUILDINSTDIR/makestamp.py
BUILDINSTALL=$BUILDINSTDIR/buildinstall

rm -rf $BUILDINSTDIR/usr

echo "Going to run buildinstall again"
# run it again for the second half
if [ -x /usr/bin/runroot ]; then
    runroot $COMPNAME --onlyone --arch $BUILDARCH "$BUILDINSTALL --buildinstdir $BUILDINSTDIR --second $PKGORDERSTR --comp $COMPNAME --version $VERSION --release '\"$RELEASESTR\"' --product '\"$PRODUCTSTR\"' --prodpath $PRODUCTPATH --discs '\"$DISCSTR\"' $DIR" 
else
    $BUILDINSTALL --buildinstdir $BUILDINSTDIR --second $PKGORDERSTR --comp $COMPNAME --version $VERSION --release "$RELEASESTR" --product "$PRODUCTSTR" --prodpath $PRODUCTPATH --discs "$DISCSTR" $DIR 
fi

rm -rf $BUILDINSTDIR
}

secondRun() {
echo "Building images..."
if [ -x /usr/bin/runroot ]; then
    runroot $COMPNAME --onlyone --arch $BUILDARCH "$UPD_INSTROOT $DEBUGSTR --comp $COMPNAME $p/$PRODUCTPATH/RPMS $TREEDIR/image-template $TREEDIR/instimage"
else
    $UPD_INSTROOT $DEBUGSTR --comp $COMPNAME $p/$PRODUCTPATH/RPMS $TREEDIR/image-template $TREEDIR/instimage
fi

if [ -n "$PKGORDER" ]; then
    echo "Getting package order..."
    if [ -x /usr/bin/runroot ]; then
	runroot --quiet $COMPNAME --onlyone --arch $BUILDARCH \
	    "PYTHONPATH=$TREEDIR/instimage/usr/lib/anaconda $TREEDIR/instimage/usr/lib/anaconda-runtime/pkgorder $p $BUILDARCH $PRODUCTPATH" > $PKGORDER
    else
	PYTHONPATH=$TREEDIR/instimage/usr/lib/anaconda $TREEDIR/instimage/usr/lib/anaconda-runtime/pkgorder $p $BUILDARCH $PRODUCTPATH > $PKGORDER
    fi
fi

echo "Making images..."
if [ -x /usr/bin/runroot ]; then
    runroot $COMPNAME --onlyone --arch $BUILDARCH "cd $BUILDINSTDIR\; ./mk-images $DEBUGSTR $p/$PRODUCTPATH/RPMS $p $TREEDIR/image-template $TREEDIR/instimage $BUILDARCH '\"$PRODUCTSTR\"' $VERSION $PRODUCTPATH"
else
    $MK_IMAGES $DEBUGSTR $p/$PRODUCTPATH/RPMS $p $TREEDIR/image-template $TREEDIR/instimage $BUILDARCH "$PRODUCTSTR" $VERSION $PRODUCTPATH
fi

echo "Writing .discinfo file"
$MK_STAMP --releasestr="$RELEASESTR" --arch=$BUILDARCH --discNum="$DISCSTR" --baseDir=$PRODUCTPATH/base --packagesDir=$PRODUCTPATH/RPMS --pixmapsDir=$PRODUCTPATH/pixmaps --outfile=$p/.discinfo

if [ -x /usr/bin/runroot ]; then
    runroot $COMPNAME --onlyone --arch $BUILDARCH "rm -rf $TREEDIR/image-template $TREEDIR/instimage"
else
    rm -rf $TREEDIR/image-template $TREEDIR/instimage
fi
}

if [ $RUN == 1 ]; then
    firstRun
else
    secondRun
fi
