#!/bin/bash

_APT_UPDATED=false
CIRROS_BRANCH="lp:cirros"
CIRROS_D=""
DEPS=(
  bc
  bison
  build-essential
  bzr
  flex
  gettext
  libncurses5-dev
  qemu-kvm
  quilt
  rsync
  texinfo
  unzip
  wget
)

error() { echo "$@" 1>&2; }
fail() { [ $# -eq 0 ] || error "$@"; exit 2; }

apt_get() {
    local ret=""
    if [ "$1" != "update" ] && ! $_APT_UPDATED; then
        error "updating apt"
        apt_get update >/dev/null || {
            ret=$?;
            error "failed to update apt [$ret]";
            return $ret;
        }
        _APT_UPDATED=true
    fi
    sudo DEBIAN_FRONTEND=noninteractive apt-get --quiet \
        --assume-yes "$@" </dev/null
}

filter_installed_packages() {
    # write to stdout, a list of packages not installed locally
    local fmt='${Package} ${Version}\n'
    LC_ALL=C dpkg-query --show "--showformat=${fmt}" "$@" 2>&1 | awk '
        $0 ~ /[Nn]o packages/ {
            sub("[.]$","",$NF);
            pkgs[n]=$NF;
            n=n+1;
        }
        $2 == "" {
                pkgs[n]=$1;
                n=n+1;
        };
        END { for(p in pkgs) {printf("%s ",pkgs[p])}; printf("\n"); }' n=0
}

apt_install() {
    local needed
    needed=$(filter_installed_packages "$@")
    [ -z "$needed" ] && return 0
    error "installing: $needed"
    apt_get install "$@"
}

dist_id=$(lsb_release --short --id) || fail "failed: lsb_release --short --id"
case "$dist_id" in
    *buntu) :;;
    *) fail "do not know how to setup $dist_id";;
esac

ver=$(lsb_release --short --release)
[[ "$ver" < "14.04" ]] &&
    fail "building not supported prior to 14.04"

me=$(readlink -f "$0")
myd=$(dirname "$me")

if [ -f "$myd/../fixup-fs" ]; then
    CIRROS_D=$(cd "$myd/.." && pwd)
elif [ -f "$PWD/cirros/fixup-fs" ]; then
    CIRROS_D="$PWD/cirros"
fi

apt_install "${DEPS[@]}"

if [ -z "$CIRROS_D" ]; then
    error "getting $CIRROS_BRANCH to $PWD/cirros"
    bzr branch "$CIRROS_BRANCH" cirros ||
        fail "failed branch $CIRROS_BRANCH"
    CIRROS_D="$PWD/cirros"
fi

error "set up functional to $CIRROS_D"

# vi: ts=4 expandtab
