#!/bin/bash

set -e

distro=$1
repo=$(git rev-parse --show-toplevel)

on_exit() {
    M=$(grep -Po "$(readlink -f $distro)\S+" /proc/mounts)
    [ -n "$M" ] && sudo umount $M
}

mark_is() {
    grep -q "$1" $distro/mark.log
}

if [ ! -d "$distro" ]; then
    dist_deb=$(echo $(ls -1 /usr/share/debootstrap/scripts 2>/dev/null))
    dist_rpm=$(echo $(rinse --list-distributions 2>/dev/null | grep -v :))
    [ -z "$distro" ] && {
	echo -e "Usage: $0 distro
    Where distro is one of the following:
	DEB: ${dist_deb:-# none, please install debootstrap}
	RPM: ${dist_rpm:-# none, please install rinse}
"
	exit 1
    }
    eval "case \"$distro\" in
    ${dist_deb// /|})
	sudo debootstrap --include=sudo $distro $distro;;
    ${dist_rpm// /|})
	echo sudo | sudo rinse --arch amd64 --directory $distro --distribution $distro --add-pkg-list /dev/stdin;;
    *)
	echo \"Unknown distro: $distro\"
	exit 1;;
    esac"
fi

trap on_exit EXIT

[ -c $distro/dev/tty ] || sudo mknod $distro/dev/tty c 5 0
[ -c $distro/dev/null ] || {
    [ -f $distro/dev/null ] && sudo rm $distro/dev/null
    sudo mknod -m 666 $distro/dev/null c 1 3
}

mark_is postinstall || sudo chroot $distro /bin/bash -c '
    case $(lsb_release -is 2>dev/null) in
    Ubuntu)
	echo "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe" >> /etc/apt/sources.list
	apt-get update
	;;
    esac
    grep -P "CentOS|Scientific Linux" /etc/redhat-release && {
	yum-config-manager --add-repo http://www.lfarkas.org/linux/packages/centos/lfarkas.repo
	sed -i "s!\\\$releasever/\\\$basearch/!\$releasever/mingw-w64/\$basearch!" /etc/yum.repos.d/lfarkas.repo
	rpm -i http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    }
    echo postinstall >>/mark.log
'

case $distro in
    opensuse-*) pkg_install="zypper -n install";;
    centos-*|slc-*) pkg_install="yum -y install";;
    *) pkg_install="apt-get --force-yes -y install";;
esac

grep -P "^$USER:" /etc/passwd | sudo tee -a $distro/etc/passwd >/dev/null
grep -P "^$USER:" /etc/group | sudo tee -a $distro/etc/group >/dev/null

for f in /sys /proc $repo; do
    grep -qw "$(readlink -f $distro)$f" /proc/mounts && continue
    sudo mkdir -p $distro$f
    sudo mount --bind $f $distro$f
done

[ -f spec.$distro ] && . ./spec.$distro

mark_is builddep || {
    [ -n "$builddep" ] && sudo chroot $distro /bin/bash -c "$pkg_install $builddep"
#    echo builddep | sudo tee -a $distro/mark.log >/dev/null
}

sudo chroot $distro /usr/bin/sudo -u $USER /bin/bash -c "
cd $repo/source
./waf distclean configure build
"

