#!/bin/bash
# This file is part of curtin. See LICENSE file for copyright and license info.

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

rel="$(lsb_release -sc)"
case "$(uname -m)" in
  i?86|x86_64) qemu="qemu-system-x86";;
  ppc*) qemu="qemu-system-ppc";;
  s390x) qemu="qemu-system-s390x";;
esac
DEPS=(
  cloud-image-utils
  make
  net-tools
  python3
  python3-nose
  python3-simplestreams
  python3-yaml
  ovmf
  simplestreams
  $qemu
  ubuntu-cloudimage-keyring
  tgt
)

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 "$@"
}


apt_install "${DEPS[@]}"

# vi: ts=4 expandtab syntax=sh
