#!/bin/bash

cat <<'EOF'

export MPIENV_ROOT="$HOME/.mpienv"

if [ -z "${MPIENV_VERSIONS_DIR:-}" ]; then
    export MPIENV_VERSIONS_DIR=$MPIENV_ROOT/versions
fi

mkdir -p ${MPIENV_VERSIONS_DIR}
mkdir -p ${MPIENV_VERSIONS_DIR}/shims

if [ ! -f $MPIENV_VERSIONS_DIR/shims ]; then
    G=$MPIENV_VERSIONS_DIR/version_global
    if [ -f $G ]; then
        ln -s $(cat $G) $MPIENV_VERSIONS_DIR/shims
    fi
fi

export PATH=$MPIENV_VERSIONS_DIR/shims/bin:${PATH:-}
export LD_LIBRARY_PATH=${MPIENV_VERSIONS_DIR}/shims/lib:${MPIENV_VERSIONS_DIR}/shims/lib64:${LD_LIBRARY_PATH:-}

function usage() {
    echo "Usage: mpienv [command] [options...]"
}

function mpienv() {
    if [ "0" = "${#*}" ]; then
        usage
        return -1
    fi

    declare -r root=$MPIENV_ROOT
    declare -r command="$1"
    shift

    case "$command" in
        "use" )
            {
                eval $(env PYTHONPATH=$MPIENV_ROOT:${PYTHONPATH:-} \
                           python -m mpienv.command.use $*)
                if [ -z "${BASH_VERSION:-}" -a ! -z "${ZSH_VERSION:-}" ]; then
                    rehash
                fi
            }
            ;;
        "configure" )
            {
                env PYTHONPATH=$MPIENV_ROOT:${PYTHONPATH:-} \
                    python -m mpienv.command.configure "$@"
            }
            ;;
        "build" )
            {
                env PYTHONPATH=$MPIENV_ROOT:${PYTHONPATH:-} \
                    python -m mpienv.command.build "$@"
            }
            ;;
        "install" )
            {
                env PYTHONPATH=$MPIENV_ROOT:${PYTHONPATH:-} \
                    python -m mpienv.command.install "$@"
            }
            ;;
        "clean" )
            {
                env PYTHONPATH=$MPIENV_ROOT:${PYTHONPATH:-} \
                    python -m mpienv.command.clean "$@"
            }
            ;;
        "add" )
            {
               env PYTHONPATH=$MPIENV_ROOT:${PYTHONPATH:-} \
                   python -m mpienv.command.add $*
            }
            ;;
        "rm" )
            {
                env PYTHONPATH=$MPIENV_ROOT:${PYTHONPATH:-} \
                    python -m mpienv.command.rm "$@"
            }
            ;;
        "rename" )
            {
                env PYTHONPATH=$MPIENV_ROOT:${PYTHONPATH:-} \
                    python -m mpienv.command.rename "$@"
            }
            ;;
        "list" )
            {
                env PYTHONPATH=$MPIENV_ROOT:${PYTHONPATH:-} \
                    python -m mpienv.command.list "$@"
            }
            ;;
        "info" )
            {
                env PYTHONPATH=$MPIENV_ROOT:${PYTHONPATH:-} \
                    python -m mpienv.command.info "$@"
            }
            ;;
        "autodiscover" )
            {
                env PYTHONPATH=$MPIENV_ROOT:${PYTHONPATH:-} \
                    python -m mpienv.command.autodiscover "$@"
            }
            ;;
        "prefix" )
            {
                env PYTHONPATH=$MPIENV_ROOT:${PYTHONPATH:-} \
                    python -m mpienv.command.prefix "$@"
            }
            ;;
        "exec" )
            {
                env PYTHONPATH=$MPIENV_ROOT:${PYTHONPATH:-} \
                    python -m mpienv.command.exec "$@"
            }
            ;;
        "help" )
            {
                env PYTHONPATH=$MPIENV_ROOT:${PYTHONPATH:-} \
                    python -m mpienv.command.help "$@"
            }
            ;;
        * )
            echo "mpienv [ERROR]: Unknown command '$command'"
            ;;
    esac
}
EOF

