Add a bootstrap-haskell script, fixes #36

This commit is contained in:
Julian Ospald 2018-12-01 13:15:57 +08:00
parent 9cc652e34d
commit 82c1636590
No known key found for this signature in database
GPG Key ID: 511B62C09D50CD28
3 changed files with 94 additions and 1 deletions

View File

@ -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.:

75
bootstrap-haskell Executable file
View File

@ -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/tty
fi
edo mkdir -p "${HOME}"/.ghcup/bin
if command -V "ghcup" >/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" ""
)

2
ghcup
View File

@ -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)