if [ -n "${HSENV}" ]; then if [ "" = "${HSENV}" -a "" = "${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 " environment." fi return 1 fi export HSENV="" export 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'." HSENV_PATH_BACKUP="$PATH" if ; then HSENV_PS1_BACKUP="$PS1" fi 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 if ; then PS1="$HSENV_PS1_BACKUP" unset -v HSENV_PS1_BACKUP fi 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 -f deactivate_hsenv if [ -n "$BASH" -o -n "$ZSH_VERSION" ]; then hash -r fi } PATH_PREPENDIX="$(cat /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 /ghc_package_path_var | sed -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}=)" if ; then if [ -n "$HSENV_NAME" ]; then PS1="($HSENV_NAME)$PS1" else PS1="[hsenv]$PS1" fi fi 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