#!/bin/bash

PREFIX=/srv/devel-chroots
SUITE=$1

if [[ -z "$SUITE" || ! -d "$PREFIX/$SUITE" ]] ; then
        echo "Please supply a suite"
        echo
        echo "The following are available:"
        for dir in `ls -d $PREFIX/*`; do
                echo "     - ${dir##*/}"
        done
        exit 1
fi

WORKING_DIR=$PREFIX/$SUITE

if [ "$( mount | grep $WORKING_DIR )" == "" ] ; then

        # Check for necessary packages
        echo "Checking for 'essential!' packages"
        # bootstrap doesn't warn about autopoint being missing
        echo -n "   o autopoint"
        [ -f $WORKING_DIR/var/lib/dpkg/info/autopoint.list ] && echo "." || echo "!"

        echo -n "   o build-essential"
        [ -f $WORKING_DIR/var/lib/dpkg/info/build-essential.list ] && echo "." || echo "!"

        echo -n "   o devscripts"
        [ -f $WORKING_DIR/var/lib/dpkg/info/devscripts.list ] && echo "." || echo "!"

        echo -n "   o quilt"
        [ -f $WORKING_DIR/var/lib/dpkg/info/quilt.list ] && echo "." || echo "!"

        echo -n "   o yasm"
        [ -f $WORKING_DIR/var/lib/dpkg/info/yasm.list ] && echo "." || echo "!"

        echo
        echo -e "\033[01;31mPlease make sure, to run 'apt-get build-dep xbmc'\nbefore building anything!\033[00m"
        echo

        echo "Copying/refreshing necessary files"
        echo -n "   - /etc/resolv.conf"
        cp -p /etc/resolv.conf $WORKING_DIR/etc/resolv.conf
        [ $? -eq 0 ] && echo "." || echo "!"

        echo -n "   - /etc/hosts"
        cp -p /etc/hosts $WORKING_DIR/etc/hosts
        [ $? -eq 0 ] && echo "." || echo "!"

        echo -n "   - /root/.bash*"
        rsync -aq --exclude=.bash_history /root/.bash* $WORKING_DIR/root/
        [ $? -eq 0 ] && echo "." || echo "!"

        echo -n "   - /root/.quiltrc"
        echo 'QUILT_REFRESH_ARGS="-p ab --diffstat --sort --strip-trailing-whitespace"' > \
                $WORKING_DIR/root/.quiltrc
        [ $? -eq 0 ] && echo "." || echo "!"

        echo -n "   - /root/.bash/environment/CHROOT"
        echo "$SUITE" > $WORKING_DIR/root/.bash/environment/CHROOT
        [ $? -eq 0 ] && echo "." || echo "!"

        echo -n "   - /root/.bash/environment/DCH"
        cat <<EOF > $WORKING_DIR/root/.bash/environment/DCH
export DEBFULLNAME="Christian Heim"
export DEBEMAIL="christian.heim@barfoo.org"
EOF
        [ $? -eq 0 ] && echo "." || echo "!"

        echo
        echo "Mounting virtual filesystems"

        echo -n "   - /dev"
        mount --bind /dev $WORKING_DIR/dev
        [ $? -eq 0 ] && echo "." || echo "!"

        echo -n "   - /dev/pts"
        mount --bind /dev/pts $WORKING_DIR/dev/pts
        [ $? -eq 0 ] && echo "." || echo "!"

        echo -n "   - /proc"
        mount --bind /proc $WORKING_DIR/proc
        [ $? -eq 0 ] && echo "." || echo "!"

        echo -n "   - /root/svn-builds"
        mount --bind /srv/devel-chroots/svn-builds $WORKING_DIR/root/svn-builds
        [ $? -eq 0 ] && echo "." || echo "!"

        echo -n "   - /sys"
        mount --bind /sys $WORKING_DIR/sys
        [ $? -eq 0 ] && echo "." || echo "!"

        echo

        if [ -f $WORKING_DIR/usr/local/sbin/prep-chroot-custom-mount.sh ] ; then
          echo "o Executing custom mount script in $WORKING_DIR/usr/local/sbin/prep-chroot-custom-mount.sh"
          $WORKING_DIR/usr/local/sbin/prep-chroot-custom-mount.sh mount $WORKING_DIR
        fi

        [ ${SUITE##*-} == "i386" ] && chroot_cmd="linux32 chroot" || chroot_cmd="chroot"
        HOSTNAME=`hostname -f` HOME=/root USER=root LANG=C LC_ALL=C \
                $chroot_cmd $WORKING_DIR /bin/bash --login

        echo "o Determing stale process(es)"
        PROCESS_LIST=`lsof -n | grep $WORKING_DIR | cut -d\  -f7 | sort -u`
        for process in $PROCESS_LIST; do
                [ "$process" != "" ] && kill -9 $process
        done

        echo "o Unmounting virtual filesystem(s)"

        if [ -x $WORKING_DIR/usr/local/sbin/prep-chroot-custom-mount.sh ] ; then
          echo "o Executing custom mount script in $WORKING_DIR/usr/local/sbin/prep-chroot-custom-mount.sh"
          $WORKING_DIR/usr/local/sbin/prep-chroot-custom-mount.sh umount
        fi

        echo -n "   - /dev/pts"
        umount $WORKING_DIR/dev/pts
        [ $? -eq 0 ] && echo "." || echo "!"

        echo -n "   - /dev"
        umount $WORKING_DIR/dev
        [ $? -eq 0 ] && echo "." || echo "!"

        echo -n "   - /proc"
        umount $WORKING_DIR/proc
        [ $? -eq 0 ] && echo "." || echo "!"

        echo -n "   - /root/svn-builds"
        umount $WORKING_DIR/root/svn-builds
        [ $? -eq 0 ] && echo "." || echo "!"

        echo -n "   - /sys"
        umount $WORKING_DIR/sys
        [ $? -eq 0 ] && echo "." || echo "!"

        echo "o Cleansing chroot"
        echo -n "   - /var/cache/apt/archives"
        rm -f /var/cache/apt/archives/*.deb
        [ $? -eq 0 ] && echo "." || echo "!"

        echo -n "   - /tmp"
        rm -rf /tmp/*
        [ $? -eq 0 ] && echo "." || echo "!"
fi
