Add install-cabal subcommand, fixes #3
This commit is contained in:
parent
894a279a2d
commit
ea2d5c20d9
11
.travis.sh
11
.travis.sh
@ -19,14 +19,13 @@ set -e
|
|||||||
./ghcup -v set 8.2.2
|
./ghcup -v set 8.2.2
|
||||||
|
|
||||||
# install cabal-install
|
# install cabal-install
|
||||||
wget https://www.haskell.org/cabal/release/cabal-install-2.2.0.0/cabal-install-2.2.0.0-x86_64-unknown-linux.tar.gz
|
./ghcup -v install-cabal
|
||||||
tar -xzf cabal-install-2.2.0.0-x86_64-unknown-linux.tar.gz
|
|
||||||
|
|
||||||
export PATH="$HOME/.ghcup/bin:$PATH"
|
export PATH="$HOME/.cabal/bin:$HOME/.ghcup/bin:$PATH"
|
||||||
|
|
||||||
# install shellcheck
|
# install shellcheck
|
||||||
./cabal update
|
cabal update
|
||||||
./cabal install ShellCheck
|
cabal install ShellCheck
|
||||||
|
|
||||||
# check our script for errors
|
# check our script for errors
|
||||||
~/.cabal/bin/shellcheck ghcup
|
shellcheck ghcup
|
||||||
|
@ -55,7 +55,7 @@ See `ghcup --help`.
|
|||||||
## Feature considerations
|
## Feature considerations
|
||||||
|
|
||||||
- [ ] Allow to compile from source ([#2](https://github.com/hasufell/ghcup/issues/2))
|
- [ ] Allow to compile from source ([#2](https://github.com/hasufell/ghcup/issues/2))
|
||||||
- [ ] Allow to install cabal-install as well ([#3](https://github.com/hasufell/ghcup/issues/3))
|
- [x] Allow to install cabal-install as well ([#3](https://github.com/hasufell/ghcup/issues/3))
|
||||||
|
|
||||||
## Known problems
|
## Known problems
|
||||||
|
|
||||||
|
90
ghcup
90
ghcup
@ -90,6 +90,11 @@ SCRIPT_UPDATE_URL="https://raw.githubusercontent.com/hasufell/ghcup/master/ghcup
|
|||||||
# Base URL for all GHC tarballs.
|
# Base URL for all GHC tarballs.
|
||||||
GHC_DOWNLOAD_BASEURL="https://downloads.haskell.org/~ghc"
|
GHC_DOWNLOAD_BASEURL="https://downloads.haskell.org/~ghc"
|
||||||
|
|
||||||
|
# @VARIABLE: KNOWN_GOOD_CABAL
|
||||||
|
# @DESCRIPTION:
|
||||||
|
# The latests known good cabal-install version for
|
||||||
|
# which a pre-built binary exists.
|
||||||
|
KNOWN_GOOD_CABAL="2.2.0.0"
|
||||||
|
|
||||||
|
|
||||||
####################
|
####################
|
||||||
@ -119,6 +124,7 @@ SUBCOMMANDS:
|
|||||||
set Set currently active GHC version
|
set Set currently active GHC version
|
||||||
self-update Update this script in-place
|
self-update Update this script in-place
|
||||||
rm Remove an already installed GHC
|
rm Remove an already installed GHC
|
||||||
|
install-cabal Install cabal-install
|
||||||
|
|
||||||
DISCUSSION:
|
DISCUSSION:
|
||||||
ghcup installs the Glasgow Haskell Compiler from the official
|
ghcup installs the Glasgow Haskell Compiler from the official
|
||||||
@ -237,6 +243,33 @@ ARGS:
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# @FUNCTION: install_cabal_usage
|
||||||
|
# @DESCRIPTION:
|
||||||
|
# Print the help message for 'ghcup install-cabal' to STDERR
|
||||||
|
# and exit the script with status code 1.
|
||||||
|
install_cabal_usage() {
|
||||||
|
(>&2 echo "ghcup-install-cabal
|
||||||
|
Install the specified or a default cabal version
|
||||||
|
|
||||||
|
USAGE:
|
||||||
|
${SCRIPT} install-cabal [FLAGS] [VERSION]
|
||||||
|
|
||||||
|
FLAGS:
|
||||||
|
-h, --help Prints help information
|
||||||
|
-f, --force Overwrite already existing installation
|
||||||
|
|
||||||
|
ARGS:
|
||||||
|
<VERSION> E.g. \"2.4.0.0\"
|
||||||
|
|
||||||
|
DISCUSSION:
|
||||||
|
Installs the specified cabal-install version (or the default ${KNOWN_GOOD_CABAL})
|
||||||
|
into the global \"~/.cabal/bin\" directory, so it can be overwritten
|
||||||
|
by later \"cabal new-install cabal-install\".
|
||||||
|
")
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
@ -720,6 +753,46 @@ rm_ghc() {
|
|||||||
unset myghcver inst_location f
|
unset myghcver inst_location f
|
||||||
}
|
}
|
||||||
|
|
||||||
|
############################
|
||||||
|
#--[ Subcommand install ]--#
|
||||||
|
############################
|
||||||
|
|
||||||
|
|
||||||
|
# @FUNCTION: install_cabal
|
||||||
|
# @USAGE: <cabalversion>
|
||||||
|
# @DESCRIPTION:
|
||||||
|
# Installs the given cabal version.
|
||||||
|
install_cabal() {
|
||||||
|
[ -z "$1" ] && die "Internal error: no argument given to install_cabal"
|
||||||
|
|
||||||
|
mycabalver=$1
|
||||||
|
myarch=$(get_arch)
|
||||||
|
inst_location=$HOME/.cabal/bin
|
||||||
|
|
||||||
|
if [ -e "${inst_location}"/cabal ] && ! ${FORCE} ; then
|
||||||
|
die "\"${inst_location}/cabal\" already exist, use --force to overwrite"
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -e "${inst_location}" ] || {
|
||||||
|
edo mkdir "$HOME"/.cabal
|
||||||
|
edo mkdir "$HOME"/.cabal/bin
|
||||||
|
}
|
||||||
|
|
||||||
|
(
|
||||||
|
edo cd "$(mktemp -d)"
|
||||||
|
edo download "https://www.haskell.org/cabal/release/cabal-install-${mycabalver}/cabal-install-${mycabalver}-${myarch}-unknown-linux.tar.gz"
|
||||||
|
edo tar -xzf "cabal-install-${mycabalver}-${myarch}-unknown-linux.tar.gz"
|
||||||
|
edo mv cabal "${inst_location}"/cabal
|
||||||
|
) || die "Failed to install cabal-install"
|
||||||
|
|
||||||
|
status_message "Successfully installed cabal-install, you may want to run the following"
|
||||||
|
status_message "to get the really latest version:"
|
||||||
|
status_message " cabal new-install cabal-install"
|
||||||
|
|
||||||
|
unset mycabalver myarch inst_location
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#######################
|
#######################
|
||||||
@ -825,6 +898,23 @@ while [ $# -gt 0 ] ; do
|
|||||||
[ "${GHC_VER}" ] || rm_usage
|
[ "${GHC_VER}" ] || rm_usage
|
||||||
rm_ghc "${GHC_VER}"
|
rm_ghc "${GHC_VER}"
|
||||||
break;;
|
break;;
|
||||||
|
install-cabal)
|
||||||
|
shift 1
|
||||||
|
while [ $# -gt 0 ] ; do
|
||||||
|
case $1 in
|
||||||
|
-h|--help) install_cabal_usage;;
|
||||||
|
-f|--force) FORCE=true
|
||||||
|
shift 1;;
|
||||||
|
*) CABAL_VER=$1
|
||||||
|
break;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
if [ "${CABAL_VER}" ] ; then
|
||||||
|
install_cabal "${CABAL_VER}"
|
||||||
|
else
|
||||||
|
install_cabal "${KNOWN_GOOD_CABAL}"
|
||||||
|
fi
|
||||||
|
break;;
|
||||||
*) usage;;
|
*) usage;;
|
||||||
esac
|
esac
|
||||||
break;;
|
break;;
|
||||||
|
Loading…
Reference in New Issue
Block a user