#!/bin/bash

PROG=$0

function usage () {
    echo "usage: $PROG [ --no-clean ] [ -m ] -s sources.list [ -o builddir ] <source-tree>" 1>&2
}

function error () {
    code=$1
    shift
    echo ${PROG}: $* 1>&2
    exit $code
}

function indent () {
    sed -e 's/^/    /'
}

CLEAN=false
while [ $# -gt 0 ] ; do
    case $1 in
	--no-clean) CLEAN=false; shift;;
	--clean) CLEAN=true; shift;;
	-o) ROOT=$2; shift 2;;
	-s) SOURCES="-s $2" ; shift 2;;
        -m) MIRROR="-m" ; shift 1;;
        --help) usage ; exit 0;;
	*) ARGS="$ARGS $1"; shift;;
    esac
done

if [ -z "$ARGS" ] ; then
    usage
    exit 1
fi

if [ -z "$SOURCES" ] ; then
    usage
    error 5 "No sources.list specified."
fi    

if [ -z "$ROOT" ] ; then
    ROOT=build-env.$TREE
fi

TREE=$(basename $ARGS)
export DEBIAN_FRONTEND=noninteractive

echo ; echo "****************************************************************"
echo "Creating build environment..." 1>&2
if ! (build-env $MIRROR $SOURCES -o "$ROOT" with pbuilder | indent) ; then
    error 10 "Could not create build-env environment."
fi
if ! mkdir -p "$ROOT/build" ; then
    error 11 "Could not create $ROOT/build"
fi

echo ; echo "****************************************************************"
echo "Copying source tree..." 1>&2
if ! rsync -a "$TREE/" "$ROOT/build" ; then
    error 20 "Could not copy source tree from $TREE to $ROOT/build."
fi

echo ; echo "****************************************************************"
echo "Installing build dependencies..." 1>&2
if ! (chroot "$ROOT"  bash -c 'export DEBIAN_FRONTEND=noninteractive; cd /build && /usr/lib/pbuilder/pbuilder-satisfydepends' | indent) ; then
    error 30 "Could not satisfy build dependencies."
fi

echo ; echo "****************************************************************"
echo "Running dpkg-buildpackage..." 1>&2
if ! (chroot "$ROOT" bash -c 'cd /build && dpkg-buildpackage' | indent ) ; then
    error 40 "dpkg-buildpackage returned an error."
fi

if $CLEAN ; then
    echo ; echo "****************************************************************"
    echo "Cleaning up build-env..." 1>&2
    if ! rm -r "$ROOT" ; then
	error 50 "Could not clean up build environment: $ROOT"
    fi
else
    echo ; echo "****************************************************************"
    echo "You specified --noclean.  Not removing build-env: $ROOT" 1>&2
fi

echo ; echo "****************************************************************"
echo "Success."
exit 0
