#!/usr/bin/env bash
# Bail on first error
set -e
# Bail if an unset variable is encountered
set -u
# Enable debugging output
set -x
# Give a pipeline a non-zero exit code if one of its constituents fails
set -o pipefail

function llvm_linux_target_triple() {
    echo "x86_64-linux-gnu-ubuntu-16.04"
}

function llvm_macos_target_triple() {
    case "$1" in
        [0-8].* | 9.0.0)    echo "x86_64-darwin-apple" ;;
        # Starting with 9.0.1, triple swapped ordering
        *)                  echo "x86_64-apple-darwin" ;;
    esac
}

function llvm_version_triple() {
    case "$1" in
        5.0) echo "5.0.1" ;;
        # By default, take the .0 patch release
        *)   echo "$1.0"  ;;
    esac
}

function llvm_base_url() {
    local llvm_version_triple=$1

    case "$llvm_version_triple" in
        [0-8].* | 9.0.0)
            echo "http://releases.llvm.org/$llvm_version_triple"
            ;;
        # Starting with 9.0.1, releases are hosted on github
        *)
            echo "https://github.com/llvm/llvm-project/releases/download/llvmorg-$llvm_version_triple"
            ;;
    esac
}

function llvm_download() {
    local base_url=$1
    local arch=$2

    export LLVM=clang+llvm-${LLVM_VERSION_TRIPLE}-$arch
    export LLVM_DIRECTORY="$HOME/.llvm/${LLVM}"

    if [ -d "${LLVM_DIRECTORY}" ]; then
        echo "Using cached LLVM download for ${LLVM}..."
    else
        wget $base_url/${LLVM}.tar.xz
        mkdir -p "${LLVM_DIRECTORY}"
        tar xf ${LLVM}.tar.xz -C "${LLVM_DIRECTORY}" --strip-components=1
    fi

    export LIBCLANG_PATH="${LLVM_DIRECTORY}/lib"
    export LLVM_CONFIG_PATH="${LLVM_DIRECTORY}/bin/llvm-config"
}

export LLVM_VERSION_TRIPLE=`llvm_version_triple ${LLVM_VERSION}`

base_url=`llvm_base_url ${LLVM_VERSION_TRIPLE}`

if [ "${TRAVIS_OS_NAME}" == "linux" ]; then
    llvm_download $base_url `llvm_linux_target_triple ${LLVM_VERSION_TRIPLE}`
    export LD_LIBRARY_PATH="${LLVM_DIRECTORY}/lib":${LD_LIBRARY_PATH:-}
else
    llvm_download $base_url `llvm_macos_target_triple ${LLVM_VERSION_TRIPLE}`
    export DYLD_LIBRARY_PATH="${LLVM_DIRECTORY}/lib":${DYLD_LIBRARY_PATH:-}
fi

# Subsequent scripts can see the state of `set -eu`, so unset it again.
set +eu
