| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | #!/bin/sh | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 15:04:00 +00:00
										 |  |  | # Main settings: | 
					
						
							|  |  |  | #   * BOOTSTRAP_HASKELL_NONINTERACTIVE - any nonzero value for noninteractive installation | 
					
						
							|  |  |  | #   * BOOTSTRAP_HASKELL_NO_UPGRADE - any nonzero value to not trigger the upgrade | 
					
						
							|  |  |  | #   * GHCUP_USE_XDG_DIRS - any nonzero value to respect The XDG Base Directory Specification | 
					
						
							|  |  |  | #   * BOOTSTRAP_HASKELL_VERBOSE - any nonzero value for more verbose installation | 
					
						
							|  |  |  | #   * BOOTSTRAP_HASKELL_GHC_VERSION | 
					
						
							|  |  |  | #   * BOOTSTRAP_HASKELL_CABAL_VERSION | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 15:06:39 +00:00
										 |  |  | # License: LGPL-3.0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | # safety subshell to avoid executing anything in case this script is not downloaded properly | 
					
						
							|  |  |  | ( | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | plat="$(uname -s)" | 
					
						
							|  |  |  | arch=$(uname -m) | 
					
						
							| 
									
										
										
										
											2021-06-07 17:35:06 +00:00
										 |  |  | ghver="0.1.14.1" | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | base_url="https://downloads.haskell.org/~ghcup" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case "${plat}" in | 
					
						
							|  |  |  |         MSYS*|MINGW*) | 
					
						
							|  |  |  | 			: "${GHCUP_INSTALL_BASE_PREFIX:=/c}" | 
					
						
							|  |  |  | 			GHCUP_DIR=${GHCUP_INSTALL_BASE_PREFIX}/ghcup | 
					
						
							|  |  |  | 			GHCUP_BIN=${GHCUP_INSTALL_BASE_PREFIX}/ghcup/bin | 
					
						
							| 
									
										
										
										
											2021-06-07 15:06:44 +00:00
										 |  |  | 			: "${GHCUP_MSYS2:=${GHCUP_DIR}/msys64}" | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 			;; | 
					
						
							|  |  |  | 		*) | 
					
						
							|  |  |  | 			: "${GHCUP_INSTALL_BASE_PREFIX:=$HOME}" | 
					
						
							|  |  |  | 			export GHCUP_USE_XDG_DIRS | 
					
						
							| 
									
										
										
										
											2020-07-28 23:43:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 			if [ -n "${GHCUP_USE_XDG_DIRS}" ] ; then | 
					
						
							|  |  |  | 				GHCUP_DIR=${XDG_DATA_HOME:=$HOME/.local/share}/ghcup | 
					
						
							|  |  |  | 				GHCUP_BIN=${XDG_BIN_HOME:=$HOME/.local/bin} | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 				GHCUP_DIR=${GHCUP_INSTALL_BASE_PREFIX}/.ghcup | 
					
						
							|  |  |  | 				GHCUP_BIN=${GHCUP_INSTALL_BASE_PREFIX}/.ghcup/bin | 
					
						
							|  |  |  | 			fi | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | esac | 
					
						
							| 
									
										
										
										
											2020-07-28 23:43:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-13 21:39:45 +00:00
										 |  |  | : "${BOOTSTRAP_HASKELL_GHC_VERSION:=recommended}" | 
					
						
							|  |  |  | : "${BOOTSTRAP_HASKELL_CABAL_VERSION:=recommended}" | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | die() { | 
					
						
							|  |  |  |     (>&2 printf "\\033[0;31m%s\\033[0m\\n" "$1") | 
					
						
							|  |  |  |     exit 2 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | warn() { | 
					
						
							|  |  |  | 	case "${plat}" in | 
					
						
							|  |  |  | 			MSYS*|MINGW*) | 
					
						
							|  |  |  | 				echo -e "\\033[0;35m$1\\033[0m" | 
					
						
							|  |  |  | 				;; | 
					
						
							|  |  |  | 			*) | 
					
						
							|  |  |  | 				printf "\\033[0;35m%s\\033[0m\\n" "$1" | 
					
						
							|  |  |  | 				;; | 
					
						
							|  |  |  | 	esac | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 18:14:43 +00:00
										 |  |  | edo() { | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  |     "$@" || die "\"$*\" failed!" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | eghcup() { | 
					
						
							| 
									
										
										
										
											2020-07-21 23:25:12 +00:00
										 |  |  | 	edo _eghcup "$@" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _eghcup() { | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 	if [ -n "${BOOTSTRAP_HASKELL_YAML}" ] ; then | 
					
						
							|  |  |  | 		args="-s ${BOOTSTRAP_HASKELL_YAML}" | 
					
						
							|  |  |  | 	fi  | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  |     if [ -z "${BOOTSTRAP_HASKELL_VERBOSE}" ] ; then | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  |         ghcup ${args} "$@" | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  |     else | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  |         ghcup ${args} --verbose "$@" | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  |     fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-29 19:07:05 +00:00
										 |  |  | _done() { | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 	case "${plat}" in | 
					
						
							|  |  |  | 			MSYS*|MINGW*) | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "All done!" | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "In a new powershell or cmd.exe session, now you can..." | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "Start a simple repl via:" | 
					
						
							|  |  |  | 				echo "  ghci" | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "Start a new haskell project in the current directory via:" | 
					
						
							|  |  |  | 				echo "  cabal init --interactive" | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "Install other GHC versions and tools via:" | 
					
						
							|  |  |  | 				echo "  ghcup list" | 
					
						
							|  |  |  | 				echo "  ghcup install <tool> <version>" | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "To install system libraries and update msys2/mingw64," | 
					
						
							|  |  |  | 				echo "open the \"Mingw haskell shell\"" | 
					
						
							|  |  |  | 				echo "and the \"Mingw package management docs\"" | 
					
						
							|  |  |  | 				echo "desktop shortcuts." | 
					
						
							|  |  |  | 				;; | 
					
						
							|  |  |  | 			*) | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "All done!" | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "To start a simple repl, run:" | 
					
						
							|  |  |  | 				echo "  ghci" | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "To start a new haskell project in the current directory, run:" | 
					
						
							|  |  |  | 				echo "  cabal init --interactive" | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "To install other GHC versions and tools, run:" | 
					
						
							|  |  |  | 				echo "  ghcup tui" | 
					
						
							|  |  |  | 				;; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	esac | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-29 19:07:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	exit 0 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | download_ghcup() { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  |     case "${plat}" in | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  |         "linux"|"Linux") | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 			case "${arch}" in | 
					
						
							| 
									
										
										
										
											2020-04-13 13:22:16 +00:00
										 |  |  | 				x86_64|amd64) | 
					
						
							| 
									
										
										
										
											2020-07-20 12:47:42 +00:00
										 |  |  | 					# we could be in a 32bit docker container, in which | 
					
						
							|  |  |  | 					# case uname doesn't give us what we want | 
					
						
							|  |  |  | 					if [ "$(getconf LONG_BIT)" = "32" ] ; then | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 						_url=${base_url}/${ghver}/i386-linux-ghcup-${ghver} | 
					
						
							| 
									
										
										
										
											2020-07-20 12:47:42 +00:00
										 |  |  | 					elif [ "$(getconf LONG_BIT)" = "64" ] ; then | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 						_url=${base_url}/${ghver}/x86_64-linux-ghcup-${ghver} | 
					
						
							| 
									
										
										
										
											2020-07-20 12:47:42 +00:00
										 |  |  | 					else | 
					
						
							|  |  |  | 						die "Unknown long bit size: $(getconf LONG_BIT)" | 
					
						
							|  |  |  | 					fi | 
					
						
							| 
									
										
										
										
											2020-04-13 13:22:16 +00:00
										 |  |  | 					;; | 
					
						
							|  |  |  | 				i*86) | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 					_url=${base_url}/${ghver}/i386-linux-ghcup-${ghver} | 
					
						
							| 
									
										
										
										
											2020-04-13 13:22:16 +00:00
										 |  |  | 					;; | 
					
						
							| 
									
										
										
										
											2021-02-26 14:38:35 +00:00
										 |  |  | 				armv7*) | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 					_url=${base_url}/${ghver}/armv7-linux-ghcup-${ghver} | 
					
						
							| 
									
										
										
										
											2021-02-26 14:38:35 +00:00
										 |  |  | 					;; | 
					
						
							|  |  |  | 				aarch64|arm64|armv8l) | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 					_url=${base_url}/${ghver}/aarch64-linux-ghcup-${ghver} | 
					
						
							| 
									
										
										
										
											2021-02-26 14:38:35 +00:00
										 |  |  | 					;; | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 				*) die "Unknown architecture: ${arch}" | 
					
						
							| 
									
										
										
										
											2020-04-13 13:22:16 +00:00
										 |  |  | 					;; | 
					
						
							|  |  |  | 			esac | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | 			;; | 
					
						
							|  |  |  |         "FreeBSD"|"freebsd") | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 			case "${arch}" in | 
					
						
							| 
									
										
										
										
											2020-04-13 13:22:16 +00:00
										 |  |  | 				x86_64|amd64) | 
					
						
							|  |  |  | 					;; | 
					
						
							|  |  |  | 				i*86) | 
					
						
							|  |  |  | 					die "i386 currently not supported!" | 
					
						
							|  |  |  | 					;; | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 				*) die "Unknown architecture: ${arch}" | 
					
						
							| 
									
										
										
										
											2020-04-13 13:22:16 +00:00
										 |  |  | 					;; | 
					
						
							|  |  |  | 			esac | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 			_url=${base_url}/${ghver}/x86_64-portbld-freebsd-ghcup-${ghver} | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  |             ;; | 
					
						
							|  |  |  |         "Darwin"|"darwin") | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 			case "${arch}" in | 
					
						
							| 
									
										
										
										
											2020-04-13 13:22:16 +00:00
										 |  |  | 				x86_64|amd64) | 
					
						
							|  |  |  | 					;; | 
					
						
							|  |  |  | 				i*86) | 
					
						
							|  |  |  | 					die "i386 currently not supported!" | 
					
						
							|  |  |  | 					;; | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 				*) die "Unknown architecture: ${arch}" | 
					
						
							|  |  |  | 					;; | 
					
						
							|  |  |  | 			esac | 
					
						
							|  |  |  | 			_url=${base_url}/${ghver}/x86_64-apple-darwin-ghcup-${ghver} ;; | 
					
						
							|  |  |  |         MSYS*|MINGW*) | 
					
						
							|  |  |  | 			case "${arch}" in | 
					
						
							|  |  |  | 				x86_64|amd64) | 
					
						
							| 
									
										
										
										
											2021-06-06 13:33:57 +00:00
										 |  |  | 					_url=https://downloads.haskell.org/ghcup/0.1.15-rc2/x86_64-mingw64-ghcup-0.1.15.exe | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 					;; | 
					
						
							|  |  |  | 				*) die "Unknown architecture: ${arch}" | 
					
						
							| 
									
										
										
										
											2020-04-13 13:22:16 +00:00
										 |  |  | 					;; | 
					
						
							|  |  |  | 			esac | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 			;; | 
					
						
							|  |  |  |         *) die "Unknown platform: ${plat}" | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | 			;; | 
					
						
							|  |  |  |     esac | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  |     case "${plat}" in | 
					
						
							|  |  |  |         MSYS*|MINGW*) | 
					
						
							|  |  |  | 			edo curl -Lf "${_url}" > "${GHCUP_BIN}"/ghcup.exe | 
					
						
							|  |  |  | 			edo chmod +x "${GHCUP_BIN}"/ghcup.exe | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | 		*) | 
					
						
							|  |  |  | 			edo curl -Lf "${_url}" > "${GHCUP_BIN}"/ghcup | 
					
						
							|  |  |  | 			edo chmod +x "${GHCUP_BIN}"/ghcup | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | 	esac | 
					
						
							| 
									
										
										
										
											2020-07-21 23:25:12 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-27 18:14:43 +00:00
										 |  |  |   edo mkdir -p "${GHCUP_DIR}" | 
					
						
							| 
									
										
										
										
											2020-07-28 23:43:00 +00:00
										 |  |  | 	cat <<-EOF > "${GHCUP_DIR}"/env || die "Failed to create env file" | 
					
						
							|  |  |  | 		export PATH="\$HOME/.cabal/bin:${GHCUP_BIN}:\$PATH" | 
					
						
							| 
									
										
										
										
											2020-07-21 23:25:12 +00:00
										 |  |  | 		EOF | 
					
						
							|  |  |  | 	# shellcheck disable=SC1090 | 
					
						
							| 
									
										
										
										
											2020-07-28 23:43:00 +00:00
										 |  |  |     edo . "${GHCUP_DIR}"/env | 
					
						
							| 
									
										
										
										
											2020-07-21 23:25:12 +00:00
										 |  |  |     eghcup upgrade | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo | 
					
						
							|  |  |  | echo "Welcome to Haskell!" | 
					
						
							|  |  |  | echo | 
					
						
							| 
									
										
										
										
											2020-05-06 20:33:52 +00:00
										 |  |  | echo "This script will download and install the following binaries:" | 
					
						
							| 
									
										
										
										
											2020-07-29 19:07:05 +00:00
										 |  |  | echo "  * ghcup - The Haskell toolchain installer" | 
					
						
							| 
									
										
										
										
											2020-05-06 20:33:52 +00:00
										 |  |  | echo "  * ghc   - The Glasgow Haskell Compiler" | 
					
						
							| 
									
										
										
										
											2021-05-30 13:17:04 +00:00
										 |  |  | echo "  * cabal - The Cabal build tool for managing Haskell software" | 
					
						
							|  |  |  | echo "  * stack - (optional) A cross-platform program for developing Haskell projects" | 
					
						
							|  |  |  | echo "  * hls   - (optional) A language server for developers to integrate with their editor/IDE" | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | echo | 
					
						
							| 
									
										
										
										
											2020-07-28 23:43:00 +00:00
										 |  |  | if [ -z "${GHCUP_USE_XDG_DIRS}" ] ; then | 
					
						
							| 
									
										
										
										
											2020-07-29 19:07:05 +00:00
										 |  |  | 	echo "ghcup installs only into the following directory," | 
					
						
							|  |  |  |     echo "which can be removed anytime:" | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 	case "${plat}" in | 
					
						
							|  |  |  | 			MSYS*|MINGW*) | 
					
						
							|  |  |  | 				echo "  $(cygpath -w "$GHCUP_DIR")" | 
					
						
							|  |  |  | 				;; | 
					
						
							|  |  |  | 			*) | 
					
						
							|  |  |  | 				echo "  $GHCUP_DIR" | 
					
						
							|  |  |  | 				;; | 
					
						
							|  |  |  | 	esac | 
					
						
							| 
									
										
										
										
											2020-07-28 23:43:00 +00:00
										 |  |  | else | 
					
						
							| 
									
										
										
										
											2020-07-29 19:07:05 +00:00
										 |  |  | 	echo "ghcup installs into XDG directories as long as" | 
					
						
							|  |  |  |     echo "'GHCUP_USE_XDG_DIRS' is set." | 
					
						
							| 
									
										
										
										
											2020-07-28 23:43:00 +00:00
										 |  |  | fi | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | echo | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if [ -z "${BOOTSTRAP_HASKELL_NONINTERACTIVE}" ] ; then | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  |     warn "Press ENTER to proceed or ctrl-c to abort." | 
					
						
							|  |  |  |     warn "Note that this script can be re-run at any given time." | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  |     echo | 
					
						
							|  |  |  |     # Wait for user input to continue. | 
					
						
							|  |  |  |     # shellcheck disable=SC2034 | 
					
						
							|  |  |  |     read -r answer </dev/tty | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-28 23:43:00 +00:00
										 |  |  | edo mkdir -p "${GHCUP_BIN}" | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if command -V "ghcup" >/dev/null 2>&1 ; then | 
					
						
							|  |  |  |     if [ -z "${BOOTSTRAP_HASKELL_NO_UPGRADE}" ] ; then | 
					
						
							| 
									
										
										
										
											2020-07-21 23:25:12 +00:00
										 |  |  |         _eghcup upgrade || download_ghcup | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  |     fi | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  | 	download_ghcup | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | echo "$(if [ -n "${BOOTSTRAP_HASKELL_YAML}" ] ; then ghcup -s "${BOOTSTRAP_HASKELL_YAML}" tool-requirements ; else ghcup tool-requirements ; fi)" | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | echo | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if [ -z "${BOOTSTRAP_HASKELL_NONINTERACTIVE}" ] ; then | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  |     warn "Press ENTER to proceed or ctrl-c to abort." | 
					
						
							|  |  |  |     warn "Installation may take a while." | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  |     echo | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Wait for user input to continue. | 
					
						
							|  |  |  |     # shellcheck disable=SC2034 | 
					
						
							|  |  |  |     read -r answer </dev/tty | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-14 17:07:57 +00:00
										 |  |  | eghcup --cache install ghc "${BOOTSTRAP_HASKELL_GHC_VERSION}" | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-14 17:07:57 +00:00
										 |  |  | eghcup set ghc "${BOOTSTRAP_HASKELL_GHC_VERSION}" | 
					
						
							|  |  |  | eghcup --cache install cabal "${BOOTSTRAP_HASKELL_CABAL_VERSION}" | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | adjust_cabal_config() { | 
					
						
							| 
									
										
										
										
											2021-06-07 15:06:44 +00:00
										 |  |  | 	edo cabal user-config -a "extra-prog-path: $(cygpath -w $GHCUP_BIN), $(cygpath -w "$HOME"/AppData/Roaming/cabal/bin), $(cygpath -w "$GHCUP_MSYS2"/usr/bin), $(cygpath -w "$GHCUP_MSYS2"/mingw64/bin)" -a "extra-include-dirs: $(cygpath -w "$GHCUP_MSYS2"/mingw64/include)" -a "extra-lib-dirs: $(cygpath -w "$GHCUP_MSYS2"/mingw64/lib)" -f init | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case "${plat}" in | 
					
						
							|  |  |  |         MSYS*|MINGW*) | 
					
						
							|  |  |  | 			if [ -z "${BOOTSTRAP_HASKELL_NONINTERACTIVE}" ] ; then | 
					
						
							|  |  |  | 				warn "Create an initial cabal.config including relevant msys2 paths (recommended)?" | 
					
						
							|  |  |  | 				warn "[Y] Yes  [N] No  [?] Help (default is \"Y\")." | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				while true; do | 
					
						
							|  |  |  | 					read -r mingw_answer </dev/tty | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					case $mingw_answer in | 
					
						
							|  |  |  | 						[Yy]* | "") | 
					
						
							|  |  |  | 							adjust_cabal_config | 
					
						
							|  |  |  | 							break ;; | 
					
						
							|  |  |  | 						[Nn]*) | 
					
						
							|  |  |  | 							echo "Make sure that your global cabal.config references the correct mingw64 paths (extra-prog-path, extra-include-dirs and extra-lib-dirs)." | 
					
						
							| 
									
										
										
										
											2021-06-07 15:06:44 +00:00
										 |  |  | 							echo "And set the environment variable GHCUP_MSYS2 to the root path of your msys2 installation." | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 							sleep 5 | 
					
						
							|  |  |  | 							break ;; | 
					
						
							|  |  |  | 						*) | 
					
						
							|  |  |  | 							echo "Possible choices are:" | 
					
						
							|  |  |  | 							echo | 
					
						
							|  |  |  | 							echo "Y - Yes, create a cabal.config with pre-set paths to msys2/mingw64 (default)" | 
					
						
							|  |  |  | 							echo "N - No, leave the current/default cabal config untouched" | 
					
						
							|  |  |  | 							echo | 
					
						
							|  |  |  | 							echo "Please make your choice and press ENTER." | 
					
						
							|  |  |  | 							;; | 
					
						
							|  |  |  | 					esac | 
					
						
							|  |  |  | 				done | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 				adjust_cabal_config | 
					
						
							|  |  |  | 			fi | 
					
						
							|  |  |  | 			;; | 
					
						
							|  |  |  | esac | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-28 21:48:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | edo cabal new-update | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if [ -z "${BOOTSTRAP_HASKELL_NONINTERACTIVE}" ] ; then | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 	warn "Do you want to install haskell-language-server (HLS) now?" | 
					
						
							|  |  |  | 	warn "HLS is a language-server that provides IDE-like functionality" | 
					
						
							|  |  |  | 	warn "and can integrate with different editors, such as Vim, Emacs, VS Code, Atom, ..." | 
					
						
							|  |  |  | 	warn "Also see https://github.com/haskell/haskell-language-server/blob/master/README.md" | 
					
						
							|  |  |  | 	warn "" | 
					
						
							|  |  |  | 	warn "[Y] Yes  [N] No  [?] Help (default is \"N\")." | 
					
						
							|  |  |  | 	warn "" | 
					
						
							| 
									
										
										
										
											2020-09-29 08:52:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-29 08:12:03 +00:00
										 |  |  | 	while true; do | 
					
						
							|  |  |  | 		read -r hls_answer </dev/tty | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case $hls_answer in | 
					
						
							|  |  |  | 			[Yy]*) | 
					
						
							|  |  |  | 				eghcup --cache install hls | 
					
						
							|  |  |  | 				break ;; | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 			[Nn]* | "") | 
					
						
							| 
									
										
										
										
											2020-09-29 08:12:03 +00:00
										 |  |  | 				break ;; | 
					
						
							|  |  |  | 			*) | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 				echo "Possible choices are:" | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "Y - Yes, install the haskell-langauge-server" | 
					
						
							|  |  |  | 				echo "N - No, don't install anything more (default)" | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "Please make your choice and press ENTER." | 
					
						
							|  |  |  | 				;; | 
					
						
							| 
									
										
										
										
											2020-09-29 08:12:03 +00:00
										 |  |  | 		esac | 
					
						
							|  |  |  | 	done | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 	warn "Do you want to install stack now?" | 
					
						
							|  |  |  | 	warn "Stack is a haskell build tool similar to cabal that is used by some projects." | 
					
						
							|  |  |  | 	warn "Also see https://docs.haskellstack.org/" | 
					
						
							|  |  |  | 	warn "" | 
					
						
							|  |  |  | 	warn "[Y] Yes  [N] No  [?] Help (default is \"N\")." | 
					
						
							|  |  |  | 	warn "" | 
					
						
							| 
									
										
										
										
											2021-05-30 13:17:04 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	while true; do | 
					
						
							|  |  |  | 		read -r stack_answer </dev/tty | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		case $stack_answer in | 
					
						
							|  |  |  | 			[Yy]*) | 
					
						
							|  |  |  | 				eghcup --cache install stack | 
					
						
							|  |  |  | 				break ;; | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 			[Nn]* | "") | 
					
						
							| 
									
										
										
										
											2021-05-30 13:17:04 +00:00
										 |  |  | 				break ;; | 
					
						
							|  |  |  | 			*) | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 				echo "Possible choices are:" | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "Y - Yes, install stack" | 
					
						
							|  |  |  | 				echo "N - No, don't install anything more (default)" | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "Please make your choice and press ENTER." | 
					
						
							|  |  |  | 				;; | 
					
						
							| 
									
										
										
										
											2021-05-30 13:17:04 +00:00
										 |  |  | 		esac | 
					
						
							|  |  |  | 	done | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  |     echo "In order to run ghc and cabal, you need to adjust your PATH variable." | 
					
						
							| 
									
										
										
										
											2020-07-28 23:43:00 +00:00
										 |  |  |     echo "You may want to source '$GHCUP_DIR/env' in your shell" | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  |     echo "configuration to do so (e.g. ~/.bashrc)." | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	case $SHELL in | 
					
						
							|  |  |  | 		*/zsh) # login shell is zsh | 
					
						
							|  |  |  | 			GHCUP_PROFILE_FILE="$HOME/.zshrc" | 
					
						
							|  |  |  | 			MY_SHELL="zsh" ;; | 
					
						
							|  |  |  | 		*/bash) # login shell is bash | 
					
						
							| 
									
										
										
										
											2020-05-02 21:50:09 +00:00
										 |  |  | 			GHCUP_PROFILE_FILE="$HOME/.bashrc" | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | 			MY_SHELL="bash" ;; | 
					
						
							|  |  |  | 		*/sh) # login shell is sh, but might be a symlink to bash or zsh | 
					
						
							|  |  |  | 			if [ -n "${BASH}" ] ; then | 
					
						
							| 
									
										
										
										
											2020-05-02 21:50:09 +00:00
										 |  |  | 				GHCUP_PROFILE_FILE="$HOME/.bashrc" | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | 				MY_SHELL="bash" | 
					
						
							|  |  |  | 			elif [ -n "${ZSH_VERSION}" ] ; then | 
					
						
							|  |  |  | 				GHCUP_PROFILE_FILE="$HOME/.zshrc" | 
					
						
							|  |  |  | 				MY_SHELL="zsh" | 
					
						
							|  |  |  | 			else | 
					
						
							| 
									
										
										
										
											2020-07-29 19:07:05 +00:00
										 |  |  | 			    _done | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | 			fi | 
					
						
							|  |  |  | 			;; | 
					
						
							| 
									
										
										
										
											2020-07-14 17:08:20 +00:00
										 |  |  | 		*/fish) # login shell is fish | 
					
						
							|  |  |  | 			GHCUP_PROFILE_FILE="$HOME/.config/fish/config.fish" | 
					
						
							|  |  |  | 			MY_SHELL="fish" ;; | 
					
						
							| 
									
										
										
										
											2020-07-29 19:07:05 +00:00
										 |  |  | 		*) _done ;; | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | 	esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 	warn "" | 
					
						
							|  |  |  | 	warn "Detected ${MY_SHELL} shell on your system..." | 
					
						
							|  |  |  | 	warn "If you want ghcup to automatically add the required PATH variable to \"${GHCUP_PROFILE_FILE}\"" | 
					
						
							|  |  |  | 	warn "" | 
					
						
							|  |  |  | 	warn "[Y] Yes  [N] No  [?] Help (default is \"Y\")." | 
					
						
							|  |  |  | 	warn "" | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     while true; do | 
					
						
							|  |  |  |         read -r next_answer </dev/tty | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         case $next_answer in | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  |             [Nn]*) | 
					
						
							|  |  |  |                 _done ;; | 
					
						
							|  |  |  |             [Yy]* | "") | 
					
						
							| 
									
										
										
										
											2020-07-14 17:08:20 +00:00
										 |  |  | 				case $MY_SHELL in | 
					
						
							|  |  |  | 					"") break ;; | 
					
						
							|  |  |  | 					fish) | 
					
						
							| 
									
										
										
										
											2020-08-09 08:33:32 +00:00
										 |  |  | 						if ! grep -q "ghcup-env" "${GHCUP_PROFILE_FILE}" ; then | 
					
						
							| 
									
										
										
										
											2021-03-08 15:18:26 +00:00
										 |  |  | 							mkdir -p "${GHCUP_PROFILE_FILE%/*}" | 
					
						
							| 
									
										
										
										
											2020-08-09 08:33:32 +00:00
										 |  |  | 							echo "# ghcup-env" >> "${GHCUP_PROFILE_FILE}" | 
					
						
							|  |  |  | 							echo "set -q GHCUP_INSTALL_BASE_PREFIX[1]; or set GHCUP_INSTALL_BASE_PREFIX \$HOME" >> "${GHCUP_PROFILE_FILE}" | 
					
						
							| 
									
										
										
										
											2020-08-20 13:51:37 +00:00
										 |  |  | 							echo "test -f $GHCUP_DIR/env ; and set -gx PATH \$HOME/.cabal/bin $GHCUP_BIN \$PATH" >> "${GHCUP_PROFILE_FILE}" | 
					
						
							| 
									
										
										
										
											2020-08-09 08:33:32 +00:00
										 |  |  | 						fi | 
					
						
							| 
									
										
										
										
											2020-07-14 17:08:20 +00:00
										 |  |  | 						break ;; | 
					
						
							| 
									
										
										
										
											2020-09-28 07:59:35 +00:00
										 |  |  | 					bash) | 
					
						
							|  |  |  | 						if ! grep -q "ghcup-env" "${GHCUP_PROFILE_FILE}" ; then | 
					
						
							|  |  |  | 							echo "[ -f \"${GHCUP_DIR}/env\" ] && source \"${GHCUP_DIR}/env\" # ghcup-env" >> "${GHCUP_PROFILE_FILE}" | 
					
						
							|  |  |  | 						fi | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 						case "${plat}" in | 
					
						
							| 
									
										
										
										
											2020-09-28 07:59:35 +00:00
										 |  |  | 							"Darwin"|"darwin") | 
					
						
							|  |  |  | 								if ! grep -q "ghcup-env" "${HOME}/.bash_profile" ; then | 
					
						
							|  |  |  | 									echo "[[ -f ~/.bashrc ]] && source ~/.bashrc # ghcup-env" >> "${HOME}/.bash_profile" | 
					
						
							|  |  |  | 								fi | 
					
						
							|  |  |  | 								;; | 
					
						
							|  |  |  | 						esac | 
					
						
							|  |  |  | 						break ;; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					zsh) | 
					
						
							| 
									
										
										
										
											2020-08-09 08:33:32 +00:00
										 |  |  | 						if ! grep -q "ghcup-env" "${GHCUP_PROFILE_FILE}" ; then | 
					
						
							|  |  |  | 							echo "[ -f \"${GHCUP_DIR}/env\" ] && source \"${GHCUP_DIR}/env\" # ghcup-env" >> "${GHCUP_PROFILE_FILE}" | 
					
						
							|  |  |  | 						fi | 
					
						
							| 
									
										
										
										
											2020-07-14 17:08:20 +00:00
										 |  |  | 						break ;; | 
					
						
							|  |  |  | 				esac | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  |                 warn "OK! ${GHCUP_PROFILE_FILE} has been modified. Restart your terminal for the changes to take effect," | 
					
						
							|  |  |  |                 warn "or type \"source ${GHCUP_DIR}/env\" to apply them in your current terminal session." | 
					
						
							| 
									
										
										
										
											2020-07-29 19:07:05 +00:00
										 |  |  | 				_done | 
					
						
							|  |  |  |                 ;; | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 			*) | 
					
						
							|  |  |  | 				echo "Possible choices are:" | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "Y - Yes, update my \"${GHCUP_PROFILE_FILE}\" (default)" | 
					
						
							|  |  |  | 				echo "N - No, don't mess with my configuration" | 
					
						
							|  |  |  | 				echo | 
					
						
							|  |  |  | 				echo "Please make your choice and press ENTER." | 
					
						
							|  |  |  | 				;; | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  |         esac | 
					
						
							|  |  |  |     done | 
					
						
							|  |  |  | fi | 
					
						
							| 
									
										
										
										
											2021-05-14 21:09:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | _done | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-11 19:40:01 +00:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # vim: tabstop=4 shiftwidth=4 expandtab | 
					
						
							|  |  |  | 
 |