#!/bin/sh

# PackPack version
PACKVERSION=

# Path to PackPack makefiles
PACKDIR=/usr/share/packpack

# Source directory
SOURCEDIR=${PWD}

# Build directory
BUILDDIR=${BUILDDIR:-${SOURCEDIR}/build}

# Docker repository to use
DOCKER_REPO=${DOCKER_REPO:-packpack/packpack}

# Docker image to use
if [ -n "${OS}" ] && [ -n "${DIST}" ]; then
    if echo "${DIST}" | grep -c '^[0-9]\+$' > /dev/null; then
        # Numeric dist, e.g. centos6 or fedora23
        DOCKER_IMAGE="${OS}${DIST}"
    else
        # Non-numeric dist, e.g. debian-sid, ubuntu-precise, etc.
        DOCKER_IMAGE="${OS}-${DIST}"
    fi
else
    # Use ubuntu-xenial docker image if OS or DIST is invalid
    DOCKER_IMAGE=ubuntu-xenial
fi

version() {
    echo "PackPack version ${PACKVERSION}"
}

usage() {
    echo "# PackPack version ${PACKVERSION}"
    echo ""
    echo "Usage: OS=ubuntu DIST=xenial $0 [TARGET..]"
    echo ""
    echo "## Available Targets"
    echo ""
    echo " * tarball - pack a source tarball"
    echo " * prepare - prepare a build directory"
    echo " * package - build packages (default)"
    echo " * clean   - remove all created files"
    echo ""
    echo "## Environment Variables"
    echo ""
    echo " * PRODUCT - the name of software product, e.g. 'tarantool'"
    echo " * OS - the name of distribution, e.g. debian or fedora (${OS})"
    echo " * DIST - the version of distrition, e.g. xenial or 24 (${DIST})"
    echo " * BUILDDIR - directory used for out-of-source build (${BUILDDIR})"
    echo " * DOCKER_REPO - Docker repository to use (${DOCKER_REPO})"
    echo ""
    echo "See also ${PACKDIR}/config.mk"
    echo ""
    echo "The actual list of distribution is available on Docker Hub:"
    echo ""
    echo "   https://hub.docker.com/r/${DOCKER_REPO}/tags/"
    echo ""
    echo "## Documentation"
    echo ""
    echo " * See https://github.com/packpack/packpack"
    echo ""
}

case "$1" in
    -V|--version)
        version
        exit 0
    ;;
    -h|--help)
        usage
        exit 1
        ;;
    *) ;;
esac

#
# Create an entry point for Docker to allow builds from non-root user
#
mkdir -p ${BUILDDIR}
echo \
    "#!/bin/sh\n"\
    "sudo useradd -u $(id -u) $USER\n"\
    "sudo usermod -a -G sudo $USER 2>/dev/null || true\n"\
    "sudo usermod -a -G wheel $USER 2>/dev/null || true\n"\
    "sudo usermod -a -G adm $USER 2>/dev/null || true\n"\
    "sudo -E -u $USER \$@\n"\
    > ${BUILDDIR}/userwrapper.sh
chmod a+x ${BUILDDIR}/userwrapper.sh

#
# Save defined configuration variables to ./env file
#
env | grep -E "PRODUCT|VERSION|RELEASE|TARBALL_|CHANGELOG_" > ${BUILDDIR}/env

#
# Start Docker
#
set -ex
docker run \
        --volume "${PACKDIR}:/pack:ro" \
        --volume "${SOURCEDIR}:/source:ro" \
        --volume "${BUILDDIR}:/build" \
        --env-file ${BUILDDIR}/env \
        --workdir /source \
        --rm=true \
        --entrypoint=/build/userwrapper.sh \
        -e CCACHE_DIR=/ccache \
        --volume "${HOME}/.cache:/ccache" \
        ${DOCKER_REPO}:${DOCKER_IMAGE} \
        make -f /pack/Makefile -C /source BUILDDIR=/build -j $@

# vim: filetype=sh tabstop=4 shiftwidth=4 softtabstop=4 expandtab
