From 82c1636590f4210ddce46609371b478a61f2476d Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Sat, 1 Dec 2018 13:15:57 +0800 Subject: [PATCH] Add a bootstrap-haskell script, fixes #36 --- README.md | 18 ++++++++++++ bootstrap-haskell | 75 +++++++++++++++++++++++++++++++++++++++++++++++ ghcup | 2 +- 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100755 bootstrap-haskell diff --git a/README.md b/README.md index 6ca122f..4a88a61 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,24 @@ Similar in scope to [rustup](https://github.com/rust-lang-nursery/rustup.rs), [p ## Installation +### Simple bootstrap of ghcup, GHC and cabal-install + +```sh +# complete bootstrap +curl https://raw.githubusercontent.com/haskell/ghcup/master/bootstrap-haskell -sSf | sh + +# prepare your environment +. "$HOME/.ghcup/env" +echo '. $HOME/.ghcup/env' >> "$HOME/.bashrc" # or similar + +# now create a project, such as: +mkdir myproject && cd myproject +cabal init -n --is-executable +cabal v2-run +``` + +### Manual install + Just place the `ghcup` shell script into your `PATH` anywhere. E.g.: diff --git a/bootstrap-haskell b/bootstrap-haskell new file mode 100755 index 0000000..5b2b026 --- /dev/null +++ b/bootstrap-haskell @@ -0,0 +1,75 @@ +#!/bin/sh + +# safety subshell to avoid executing anything in case this script is not downloaded properly +( + +die() { + (>&2 printf "\\033[0;31m%s\\033[0m\\n" "$1") + exit 2 +} + +edo() +{ + printf "\\033[0;35m%s\\033[0m\\n" "$*" + "$@" || exit 2 +} + +echo +echo "Welcome to Haskell!" +echo +echo "This will download and install the Glasgow Haskell Compiler (GHC) for " +echo "the Haskell programming language, and the Cabal build tool." +echo +echo "It will add the 'cabal', 'ghc', and 'ghcup' executables to bin directory " +echo "located at: " +echo +echo " $HOME/.ghcup/bin" +echo +echo "and create the environment file $HOME/.ghcup/env" +echo "which you should source in your ~/.bashrc or similar to get the required" +echo "PATH components." +echo + +if [ -z "${BOOTSTRAP_HASKELL_NONINTERACTIVE}" ] ; then + echo "To proceed with the installation press enter, to cancel press ctrl-c." + echo "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 + edo ghcup upgrade + fi +else + edo curl https://raw.githubusercontent.com/haskell/ghcup/master/ghcup > "${HOME}"/.ghcup/bin/ghcup + edo chmod +x "${HOME}"/.ghcup/bin/ghcup + + cat <<-EOF > "${HOME}"/.ghcup/env || die "Failed to create env file" + export PATH="\$HOME/.cabal/bin:\$HOME/.ghcup/bin:\$PATH" + EOF + # shellcheck disable=SC1090 + edo . "${HOME}"/.ghcup/env +fi + +edo ghcup install + +edo ghcup set +edo ghcup install-cabal + +edo cabal new-update +edo cabal new-install --symlink-bindir="$HOME/.cabal/bin" cabal-install + +printf "\\033[0;35m%s\\033[0m\\n" "" +printf "\\033[0;35m%s\\033[0m\\n" "Installation done!" +printf "\\033[0;35m%s\\033[0m\\n" "" +printf "\\033[0;35m%s\\033[0m\\n" "Don't forget to source $HOME/.ghcup/env in your ~/.bashrc or similar." +printf "\\033[0;35m%s\\033[0m\\n" "" + + +) diff --git a/ghcup b/ghcup index 3dcb470..ee34e26 100755 --- a/ghcup +++ b/ghcup @@ -245,7 +245,7 @@ FLAGS: -h, --help Prints help information ARGS: - [VERSION|TAG] E.g. \"8.4.3\" or \"8.6.1\" or + [VERSION|TAG] E.g. \"8.4.3\" or \"8.6.3\" or a tag like \"recommended\" or \"latest\" (default: discovers recommended version)