#!/bin/bash
## Source this file.
## Usage: apply [vanilla | vanilla-nocache | *eh_elf] [dbg | *release]

# ==== INPUT ACQUISITION ====
flavour="eh_elf"
dbg="release"
while [ "$#" -gt 0 ] ; do
    case "$1" in
        "vanilla" | "vanilla-nocache" | "eh_elf")
            flavour="$1"
            ;;
        "dbg" | "release")
            dbg="$1"
            ;;
        *)
            >&2 echo "Unknown argument: $1"
            exit 1
            ;;
    esac
    shift
done

# ==== UNSET PREVIOUS ENVIRONMENT ====

type -t deactivate
[ -n "$(type -t deactivate)" ] && deactivate

# ==== DEFINE DEACTIVATE ====

function deactivate {
    export CPATH="$CPATH_EHELFSAVE"
    export LIBRARY_PATH="$LIBRARY_PATH_EHELFSAVE"
    export LD_LIBRARY_PATH="$LD_LIBRARY_PATH_EHELFSAVE"
    export PS1="$PS1_EHELFSAVE"
    export PATH="$PATH_EHELFSAVE"

    unset CPATH_EHELFSAVE
    unset LIBRARY_PATH_EHELFSAVE
    unset LD_LIBRARY_PATH_EHELFSAVE
    unset PS1_EHELFSAVE
    unset PATH_EHELFSAVE

    unset deactivate
}

# ==== PREFIX ====
export PERF_PREFIX="$HOME/local/perf-$flavour"

LIBUNWIND_PREFIX="$HOME/local/libunwind"
case "$flavour" in
    "vanilla" | "vanilla-nocache" )
        LIBUNWIND_PREFIX="${LIBUNWIND_PREFIX}-vanilla"
        ;;
    "eh_elf" )
        LIBUNWIND_PREFIX="${LIBUNWIND_PREFIX}-eh_elf"
        ;;
    * )
        >&2 echo "$flavour: unknown flavour"
        exit 1
        ;;
esac
case "$dbg" in
    "dbg" )
        LIBUNWIND_PREFIX="${LIBUNWIND_PREFIX}-dbg"
        ;;
    "release" )
        LIBUNWIND_PREFIX="${LIBUNWIND_PREFIX}-release"
        ;;
    * )
        >&2 echo "$dbg: unknown debug mode (release | dbg)"
        exit 1
        ;;
esac

export LIBUNWIND_PREFIX


# ==== EXPORTING ENV VARS ====

function colon_prepend {
    if [ -z "$2" ]; then
        echo "$1"
    elif [ -z "$1" ] ; then
        echo "$2"
    else
        echo "$1:$2"
    fi
}

function ifpath {
    if [ -e "$1" ] ; then
        echo "$1"
    fi
}

export CPATH_EHELFSAVE="$CPATH"
export LIBRARY_PATH_EHELFSAVE="$LIBRARY_PATH"
export LD_LIBRARY_PATH_EHELFSAVE="$LD_LIBRARY_PATH"
export PATH_EHELFSAVE="$PATH"
export PS1_EHELFSAVE="$PS1"

export CPATH="$(colon_prepend \
    "$LIBUNWIND_PREFIX/include/:$PERF_PREFIX/include" "$CPATH")"
export LIBRARY_PATH="$(colon_prepend \
    "$LIBUNWIND_PREFIX/lib/:$PERF_PREFIX/lib" "$LIBRARY_PATH")"
export LD_LIBRARY_PATH="$(colon_prepend \
    "$LIBUNWIND_PREFIX/lib/:$PERF_PREFIX/lib" "$LD_LIBRARY_PATH")"
export PATH="$(colon_prepend \
    "$(colon_prepend \
        "$(ifpath "$LIBUNWIND_PREFIX/bin")" \
        "$(ifpath "$PERF_PREFIX/bin")")" \
    "$PATH")"

export PS1="($flavour $dbg) $PS1"

unset ifpath
unset colon_prepend
