#!/bin/sh

burl="https://launchpad.net/ubuntu/+archive/primary/+files/linux-image"
outdir="./download"
def_arches="i386 x86_64 arm powerpc ppc64 ppc64le aarch64"

error() { echo "$@" 1>&2; }
fail() { [ $# -eq 0 ] || error "$@"; exit 1; }
dl() {
   local url="$1" target="$2" tfile="" t=""
   [ -f "$target" ] && return
   t=$(dirname "$target")
   tfile=$(mktemp "$t/.${0##*/}.XXXXXX") || return
   wget "$url" -O "$tfile" &&
      mv "$tfile" "$target" ||
      { t=$?; rm -f "$tfile"; return $t; }
}

[ "$1" = "--outdir" ] && { outdir="$1" && shift; }
kver="$1"
shift

if [ $# -eq 0 ]; then
   set -- ${def_arches}
fi

[ -d "$outdir" ] || mkdir -p "$outdir" ||
   fail "failed mkdir $outdir"


[ -n "$kver" ] || fail "must give kernel version"

# version like 3.13.0-52.86
#              3.19.0-20.20~14.04.1

kpart=${kver%-*}
upart=${kver#*-}
abi=${upart%%.*}
kmajor=${kpart%%.*}
kminor=${kpart#*.}; kminor=${kminor%.*}
kmicro=${kpart#*.*.}

for arch in "$@"; do
    xarch=$arch;
    [ "$arch" = "x86_64" ] && xarch="amd64";
    if [ "$kmajor.$kminor" = "3.2" ]; then
        case "$arch" in
            x86_64|i386) flav="virtual";;
            arm) flav="omap"; xarch="armel";;
            powerpc) flav="powerpc64-smp";;
            *) fail "unknown kernel:arch for $kver:$arch"
        esac
    elif [ "$kmajor.$kminor" = "3.13" -o "$kmajor.$kminor" = "3.19" ]; then
        case "$arch" in
            arm) xarch="armhf"; flav="generic";;
            aarch64) xarch=arm64; flav="generic";;
            powerpc|ppc64) xarch=powerpc; flav="powerpc64-smp";;
            ppc64le) xarch="ppc64el"; flav="generic";;
            x86_64|i386|arm64) flav="generic";;
            *) fail "unknown kernel:arch for $kver:$arch"
        esac
    else
        fail "unknown kernel $kver ($kmajor.$kminor)"
    fi
    url="$burl-${kmajor}.${kminor}.${kmicro}-${abi}-${flav}_${kver}_${xarch}.deb"
    dl "$url" "$outdir/${url##*/}" || fail "failed dl $url"
    ln -sf ${url##*/} "$outdir/kernel-${arch}.deb" ||
      fail "failed symlink for $outdir/kernel-$arch.deb"
done

