#!/bin/sh # safety subshell to avoid executing anything in case this script is not downloaded properly ( : "${GHCUP_INSTALL_BASE_PREFIX:=$HOME}" die() { (>&2 printf "\\033[0;31m%s\\033[0m\\n" "$1") exit 2 } edo() { "$@" || die "\"$*\" failed!" } eghcup() { if [ -z "${BOOTSTRAP_HASKELL_VERBOSE}" ] ; then edo ghcup "$@" else edo ghcup --verbose "$@" fi } download_ghcup() { _plat="$(uname -s)" _arch=$(uname -m) _ghver="0.1.5" case "${_plat}" in "linux"|"Linux") case "${_arch}" in x86_64|amd64) _url=https://downloads.haskell.org/~ghcup/${_ghver}/x86_64-linux-ghcup-${_ghver} ;; i*86) _url=https://downloads.haskell.org/~ghcup/${_ghver}/i386-linux-ghcup-${_ghver} ;; *) die "Unknown architecture: ${_arch}" ;; esac ;; "FreeBSD"|"freebsd") case "${_arch}" in x86_64|amd64) ;; i*86) die "i386 currently not supported!" ;; *) die "Unknown architecture: ${_arch}" ;; esac _url=https://downloads.haskell.org/~ghcup/${_ghver}/x86_64-portbld-freebsd-ghcup-${_ghver} ;; "Darwin"|"darwin") case "${_arch}" in x86_64|amd64) ;; i*86) die "i386 currently not supported!" ;; *) die "Unknown architecture: ${_arch}" ;; esac _url=https://downloads.haskell.org/~ghcup/${_ghver}/x86_64-apple-darwin-ghcup-${_ghver} ;; *) die "Unknown platform: ${_plat}" ;; esac edo curl -Lf "${_url}" > "${GHCUP_INSTALL_BASE_PREFIX}"/.ghcup/bin/ghcup unset _plat _arch _url _ghver } echo echo "Welcome to Haskell!" echo echo "This will download and install the Glasgow Haskell Compiler (GHC)" echo "and the Cabal build tool." echo echo "ghcup installs only into the following directory, which can be removed anytime:" echo " $GHCUP_INSTALL_BASE_PREFIX/.ghcup" echo if [ -z "${BOOTSTRAP_HASKELL_NONINTERACTIVE}" ] ; then printf "\\033[0;35m%s\\033[0m\\n" "Press ENTER to proceed" printf "\\033[0;35m%s\\033[0m\\n" "or ctrl-c to abort." printf "\\033[0;35m%s\\033[0m\\n" "Note that this script can be re-run at any given time." echo # Wait for user input to continue. # shellcheck disable=SC2034 read -r answer /dev/null 2>&1 ; then if [ -z "${BOOTSTRAP_HASKELL_NO_UPGRADE}" ] ; then eghcup upgrade fi else download_ghcup edo chmod +x "${GHCUP_INSTALL_BASE_PREFIX}"/.ghcup/bin/ghcup cat <<-EOF > "${GHCUP_INSTALL_BASE_PREFIX}"/.ghcup/env || die "Failed to create env file" export PATH="\$HOME/.cabal/bin:\${GHCUP_INSTALL_BASE_PREFIX:=\$HOME}/.ghcup/bin:\$PATH" EOF # shellcheck disable=SC1090 edo . "${GHCUP_INSTALL_BASE_PREFIX}"/.ghcup/env eghcup upgrade fi echo echo "$(ghcup tool-requirements)" echo if [ -z "${BOOTSTRAP_HASKELL_NONINTERACTIVE}" ] ; then printf "\\033[0;35m%s\\033[0m\\n" "Press ENTER to proceed" printf "\\033[0;35m%s\\033[0m\\n" "or ctrl-c to abort." printf "\\033[0;35m%s\\033[0m\\n" "Installation may take a while." echo # Wait for user input to continue. # shellcheck disable=SC2034 read -r answer > "${GHCUP_PROFILE_FILE}" printf "\\033[0;35m%s\\033[0m\\n" "OK! ${GHCUP_PROFILE_FILE} has been modified. Restart your terminal for the changes to take effect," printf "\\033[0;35m%s\\033[0m\\n" "or type \"source ${GHCUP_INSTALL_BASE_PREFIX}/.ghcup/env\" to apply them in your current terminal session." exit 0;; [Nn]*) exit 0;; *) echo "Please type YES or NO and press enter.";; esac done fi ) # vim: tabstop=4 shiftwidth=4 expandtab