#!/bin/sh

# Script to install a version of astyle in ~/astyle.local/
#
# Used by CI builds
#
# Currently only supports git repos as sources
#
# Usage: /path/to/install_astyle.sh <astyle-git-repo> <version-tag>

INSTALL_ROOT=~/astyle.local

# ----------------------------------------------------------------------------
# U S A G E
# ----------------------------------------------------------------------------
usage()
{
    echo "** Usage: $0 <git-repo> <version-tag>"
    echo "   e.g. $0 https://gitlab.com/saalen/astyle.git 3.4.12"
} >&2

# ----------------------------------------------------------------------------
# C A L L _ M A K E
#
# Calls make with the specified parameters, but only displays the error
# log if it fails
# ----------------------------------------------------------------------------
call_make()
{
    # Disable set -e, if active
    set_entry_opts=`set +o`
    set +e

    status=1
    log=`mktemp /tmp/astyle-log.XXXXXXXXXX`
    if [ -n "$log" ]; then
        make "$@" >"$log" 2>&1
        status=$?
        if [ $status -ne 0 ]; then
            cat "$log" >&2
        fi
        rm "$log"
    fi

    # Re-enable `set -e` if active before
    $set_entry_opts

    return $status
}


# ----------------------------------------------------------------------------
# M A I N
# ----------------------------------------------------------------------------
if [ $# -ne 2 ]; then
    usage
    exit 1
fi

REPO_URL="$1"
ASTYLE_VER="$2"

# Already installed?
exe=$INSTALL_ROOT/$ASTYLE_VER/usr/bin/astyle
if [ -x "$exe" ]; then
    echo "astyle version $ASTYLE_VER is already installed at $exe" >&2
    exit 0
fi

workdir=`mktemp -d /tmp/astyle.XXXXXXXXXX`
if [ -z "$workdir" ]; then
    echo "** Unable to create temporary working directory" 2>&1
    exit 1
fi

# Use a sub-process for the next bit to restrict the scope of 'set -e'
(
    set -e ; # Exit sub-process on first error

    # Put everything in this directory
    FILESDIR=$INSTALL_ROOT/$ASTYLE_VER

    git clone -b "${ASTYLE_VER}" --depth 1 ${REPO_URL} "$workdir"
    cd "$workdir"/AStyle

    make_args="DESTDIR=$FILESDIR"

    echo "Creating Makefiles..."
    cmake .

    echo "Making astyle..."
    call_make $make_args

    echo "Installing astyle..."
    mkdir -p "$FILESDIR"
    call_make install $make_args
    # make install DESTDIR=~/astyle.local/3.1
)
status=$?

if [ $status -eq 0 ]; then
    rm -rf "$workdir"
else
    "** Script failed. Work dir is $workdir" >&2
fi

exit $status
