#!/bin/sh

# Generate a base sysroot for running the BuildStream integration tests.
#
# The sysroot is based off the Alpine Linux distribution. The script downloads
# a release of Alpine, sets up a cheap container using `bwrap` and installs the
# packages that are needed by the integration tests, then outputs a .tar.xz
# file.

set -eux

ALPINE_ARCH=${ARCH:-x86-64}
ALPINE_BASE=http://dl-cdn.alpinelinux.org/alpine/v3.7/releases/${ALPINE_ARCH}/alpine-minirootfs-3.7.0-${ALPINE_ARCH}.tar.gz

mkdir root

wget ${ALPINE_BASE} -O alpine-base.tar.gz

tar -x -f ./alpine-base.tar.gz -C ./root --exclude dev/\*

run() {
    # This turns the unpacked rootfs into a container using Bubblewrap.
    # The Alpine package manager (apk) calls `chroot` when running package
    # triggers so we need to enable CAP_SYS_CHROOT. We also have to fake
    # UID 0 (root) inside the container to avoid permissions errors.
    bwrap --bind ./root / --dev /dev --proc /proc --tmpfs /tmp \
          --ro-bind /etc/resolv.conf /etc/resolv.conf \
          --setenv PATH "/usr/bin:/usr/sbin:/bin:/sbin" \
          --unshare-user --uid 0 --gid 0 \
          --cap-add CAP_SYS_CHROOT \
          /bin/sh -c "$@"
}

# Enable testing repo for Tiny C Compiler package
run "echo http://dl-cdn.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories"

# Fetch the list of Alpine packages.
run "apk update"

# There are various random errors from `apk add` to do with ownership, probably
# because of our hacked up `bwrap` container. The errors seem harmless so I am
# just ignoring them.
set +e

# Install stuff needed by all integration tests that compile C code.
#
# Note that we use Tiny C Compiler in preference to GCC. There is a huge
# size difference -- 600KB for TinyCC vs. 50MB to 100MB for GCC. TinyCC
# supports most of the ISO C99 standard, but has no C++ support at all.
run "apk add binutils libc-dev make tcc"
run "ln -s /usr/bin/tcc /usr/bin/cc"

# Install stuff for tests/integration/autotools
run "apk add autoconf automake"

# Install stuff for tests/integration/cmake
run "apk add cmake"

# Install stuff for tests/integration/pip
run "apk add python3"

set -e

# Cleanup the package cache
run "rm -R /var/cache/apk"

tar -c -v -J -f integration-tests-base.tar.xz -C root .
