packages feed

hsenv-0.3: skeletons/activate

if [ -n "${HSENV}" ]; then
    if [ "<HSENV>" = "${HSENV}" -a "<HSENV_NAME>" = "${HSENV_NAME}" ]; then
        echo "${HSENV_NAME} Virtual Haskell Environment is already active."
    else
        echo "There is already ${HSENV_NAME} Virtual Haskell Environment activated."
        echo "(at ${HSENV})"
        echo "Deactivate it first (using command 'deactivate_hsenv'), to activate"
        echo "<HSENV_NAME> environment."
    fi
    return 1
fi

export HSENV="<HSENV>"
export HSENV_NAME="<HSENV_NAME>"

echo "Activating ${HSENV_NAME} Virtual Haskell Environment (at ${HSENV})."
echo ""
echo "Use regular Haskell tools (ghc, ghci, ghc-pkg, cabal) to manage your Haskell environment."
echo ""
echo "To exit from this virtual environment, enter command 'deactivate_hsenv'."

export "HSENV_PATH_BACKUP"="${PATH}"
export "HSENV_PS1_BACKUP"="${PS1}"

deactivate_hsenv() {
    echo "Deactivating ${HSENV_NAME} Virtual Haskell Environment (at ${HSENV})."
    echo "Restoring previous environment settings."

    export "PATH"="${HSENV_PATH_BACKUP}"
    unset -v "HSENV_PATH_BACKUP"
    export "PS1"="${HSENV_PS1_BACKUP}"
    unset -v "HSENV_PS1_BACKUP"

    unset -v PACKAGE_DB_FOR_CABAL
    unset -v PACKAGE_DB_FOR_GHC_PKG
    unset -v PACKAGE_DB_FOR_GHC
    unset -v HSENV
    unset -v HSENV_NAME
    unset -v GHC_PACKAGE_PATH
    unset -f deactivate_hsenv

    if [ -n "$BASH" -o -n "$ZSH_VERSION" ]; then
        hash -r
    fi
}

PATH_PREPENDIX="$(cat <HSENV_DIR>/path_var_prependix)"
export PATH="${PATH_PREPENDIX}:${PATH}"
unset -v PATH_PREPENDIX

unset -v PACKAGE_DB_FOR_GHC
ghc --version > /dev/null
if [ "$?" -ne 0 ]; then
    echo "Failed to get ghc version. Deactivating environment..."
    deactivate_hsenv
    exit 1
fi

# To compare version numbers as ints, split at dots, check them all.
GHC_VERSION_OUTPUT="$(ghc --version)"
GHC_VERSION_NUMBER="$(echo $GHC_VERSION_OUTPUT | sed 's/.* //' | tr '.' ' ')"

item=1
for check_num in 7 6 1
do
  cur_num=$(echo $GHC_VERSION_NUMBER | awk "{ print \$$item; }")

  if [ "$cur_num" -lt "$check_num" ]
  then
    PKG_DB_OPT_SUFFIX="conf"
    break
  fi
  item=$(expr $item + 1)
done

# If it's still unset, we're >= 7.6.1
if [ -z "$PKG_DB_OPT_SUFFIX" ]
then
    PKG_DB_OPT_SUFFIX="db"
fi

GHC_PACKAGE_PATH_REPLACEMENT="$(cat <HSENV_DIR>/ghc_package_path_var | sed -r -e 's/^/:/' -e 's/::*/:/g' -e 's/:\s*$//')"

replace_pkg () {
  replacement=$1

  echo "$GHC_PACKAGE_PATH_REPLACEMENT" | sed -e "s/:/ $replacement/g"
}

export PACKAGE_DB_FOR_CABAL="$(replace_pkg '--package-db=')"
export PACKAGE_DB_FOR_GHC_PKG=" --no-user-package-${PKG_DB_OPT_SUFFIX} $(replace_pkg --package-${PKG_DB_OPT_SUFFIX}=)"
export PACKAGE_DB_FOR_GHC=" -no-user-package-${PKG_DB_OPT_SUFFIX} $(replace_pkg -package-${PKG_DB_OPT_SUFFIX}=)"
export PACKAGE_DB_FOR_GHC_MOD=" -g -no-user-package-${PKG_DB_OPT_SUFFIX} $(replace_pkg '-g -package-'${PKG_DB_OPT_SUFFIX}=)"

export PS1="(${HSENV_NAME})${PS1}"

unset -v GHC_VERSION_OUTPUT
unset -v GHC_VERSION_NUMBER
unset -v PKG_DB_OPT_SUFFIX
unset -v GHC_PACKAGE_PATH_REPLACEMENT

if [ -n "$BASH" -o -n "$ZSH_VERSION" ]; then
    hash -r
fi