2014-08-16 18:31:10 +00:00
|
|
|
#!/usr/bin/env zsh
|
|
|
|
|
2015-05-02 12:51:16 +00:00
|
|
|
normaluser=$SUDO_USER
|
|
|
|
|
|
|
|
if [[ $normaluser = "" ]]; then
|
|
|
|
print -- "Please set the SUDO_USER variable with"
|
|
|
|
print -- "export SUDO_USER=\$USER;"
|
2014-08-17 10:34:51 +00:00
|
|
|
exit 1
|
2015-05-02 12:51:16 +00:00
|
|
|
fi
|
2014-08-19 15:54:23 +00:00
|
|
|
|
2015-05-04 20:16:53 +00:00
|
|
|
# -- To use colors
|
|
|
|
autoload colors
|
|
|
|
colors
|
|
|
|
for COLOR in RED GREEN YELLOW BLUE MAGENTA CYAN BLACK WHITE; do
|
|
|
|
eval $COLOR='$fg_no_bold[${(L)COLOR}]'
|
|
|
|
eval BOLD_$COLOR='$fg_bold[${(L)COLOR}]'
|
|
|
|
done
|
|
|
|
eval RESET='$reset_color'
|
|
|
|
# --
|
|
|
|
|
2014-08-19 19:42:10 +00:00
|
|
|
userhome="$(sudo -u $normaluser echo $HOME)"
|
|
|
|
echo $userhome
|
|
|
|
|
2015-05-04 20:16:53 +00:00
|
|
|
function unpriviledged() {
|
|
|
|
print -- ${GREEN}$@${RESET}
|
|
|
|
eval sudo -u $normaluser $@
|
|
|
|
}
|
|
|
|
|
|
|
|
function priviledged() {
|
|
|
|
print -- ${BOLD_RED}$@${RESET}
|
|
|
|
eval $@
|
|
|
|
}
|
|
|
|
|
2014-08-19 19:42:10 +00:00
|
|
|
if [[ -e $userhome/.cabal ]]; then
|
|
|
|
print -- "Moving your ~/.cabal to ~/old.cabal"
|
2015-05-04 20:16:53 +00:00
|
|
|
unpriviledged mv $HOME/{,old}.cabal
|
2014-08-19 19:42:10 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ -e $userhome/.ghc ]]; then
|
|
|
|
print -- "Moving your ~/.ghc to ~/old.ghc"
|
2015-05-04 20:16:53 +00:00
|
|
|
unpriviledged mv $HOME/{,old}.ghc
|
2014-08-19 19:42:10 +00:00
|
|
|
fi
|
2014-08-19 15:54:23 +00:00
|
|
|
|
2015-05-04 20:16:53 +00:00
|
|
|
ghcversion="7.8.4"
|
|
|
|
cabalversion="1.22.0.0"
|
2014-08-16 18:31:10 +00:00
|
|
|
archi=$(uname -m)
|
|
|
|
if [[ $(uname -s) = "Darwin" ]]; then
|
|
|
|
os="apple-darwin"
|
2014-08-30 07:54:25 +00:00
|
|
|
cabalos="apple-darwin-mavericks"
|
2014-08-16 18:31:10 +00:00
|
|
|
else
|
2015-05-02 12:51:16 +00:00
|
|
|
if [[ ! -e /etc/debian_version ]]; then
|
|
|
|
print -- "You don't appear to be on a Debian based Linux"
|
|
|
|
print -- "This script might install files not necessarily at the right place for your distribution"
|
|
|
|
print -- "Do you want to continue?"
|
|
|
|
read answer
|
|
|
|
case $answer in
|
|
|
|
y|Y|yes|YES) print -- "OK" ;;
|
|
|
|
*) print -- "Bye!"; exit 1;;
|
|
|
|
esac
|
|
|
|
fi
|
2014-09-09 20:28:52 +00:00
|
|
|
if [[ $archi = "i686" ]]; then
|
|
|
|
archi=i386
|
|
|
|
fi
|
2015-02-07 13:39:04 +00:00
|
|
|
cabalversion="1.22.0.0"
|
2014-08-16 18:31:10 +00:00
|
|
|
os="unknown-linux-deb7"
|
|
|
|
cabalos="unknown-linux"
|
2014-08-21 07:31:14 +00:00
|
|
|
# -------------------------
|
|
|
|
# apt-get install libgmp-dev
|
2014-08-16 18:31:10 +00:00
|
|
|
fi
|
|
|
|
|
2014-08-16 21:12:13 +00:00
|
|
|
tmpdir=/tmp/install-haskell
|
2014-08-16 18:31:10 +00:00
|
|
|
mkdir -p $tmpdir
|
|
|
|
|
|
|
|
cd $tmpdir
|
2014-08-17 10:04:01 +00:00
|
|
|
ghctar=ghc-${ghcversion}-${archi}-${os}.tar.xz
|
2014-08-17 09:33:16 +00:00
|
|
|
if [[ ! -e $ghctar ]]; then
|
2014-08-16 18:31:10 +00:00
|
|
|
echo "Downloading GHC..."
|
2015-02-07 13:39:04 +00:00
|
|
|
echo "http://www.haskell.org/ghc/dist/${ghcversion}/$ghctar"
|
2015-05-04 20:16:53 +00:00
|
|
|
priviledged curl -LO "http://www.haskell.org/ghc/dist/${ghcversion}/$ghctar"
|
2014-08-16 18:31:10 +00:00
|
|
|
else
|
|
|
|
echo "Using already downloaded GHC ($tmpdir)..."
|
|
|
|
fi
|
|
|
|
echo "Installing GHC..."
|
2015-05-04 20:16:53 +00:00
|
|
|
priviledged tar xJf $ghctar
|
|
|
|
priviledged cd ghc-${ghcversion}
|
|
|
|
priviledged ./configure && make install
|
2014-08-16 18:31:10 +00:00
|
|
|
|
|
|
|
cd $tmpdir
|
|
|
|
echo "Downloading cabal..."
|
2014-08-17 10:10:54 +00:00
|
|
|
cabaltar=cabal-${cabalversion}-${archi}-${cabalos}.tar.gz
|
|
|
|
[[ $cabalos = "unknown-linux" ]] && cabaltar=cabal-${archi}-${cabalos}.tar.gz
|
2014-08-17 09:33:16 +00:00
|
|
|
if [[ ! -e $cabaltar ]]; then
|
2015-02-07 13:39:04 +00:00
|
|
|
echo "http://www.haskell.org/cabal/release/cabal-install-$cabalversion/$cabaltar"
|
2015-05-04 20:16:53 +00:00
|
|
|
priviledged curl -LO "http://www.haskell.org/cabal/release/cabal-install-$cabalversion/$cabaltar"
|
2014-08-16 18:31:10 +00:00
|
|
|
else
|
|
|
|
echo "Using already downloaded cabal ($tmpdir)..."
|
|
|
|
fi
|
2015-05-04 20:16:53 +00:00
|
|
|
priviledged tar xzf $cabaltar
|
2014-08-17 09:24:19 +00:00
|
|
|
echo "Installing cabal..."
|
2014-08-17 09:35:31 +00:00
|
|
|
if [[ -e ./cabal ]]; then
|
2015-05-04 20:16:53 +00:00
|
|
|
priviledged mv cabal /usr/local/bin
|
2014-08-17 09:35:31 +00:00
|
|
|
else
|
2015-05-04 20:16:53 +00:00
|
|
|
priviledged mv ./dist/build/cabal/cabal /usr/local/bin
|
2014-08-17 09:35:31 +00:00
|
|
|
fi
|
2014-08-16 18:31:10 +00:00
|
|
|
|
2014-08-17 10:40:51 +00:00
|
|
|
echo "Init cabal..."
|
2015-05-04 20:16:53 +00:00
|
|
|
unpriviledged cabal info >/dev/null 2>&1
|
2014-08-16 21:12:13 +00:00
|
|
|
|
2015-02-07 13:39:04 +00:00
|
|
|
echo "Using Haskell LTS for GHC 7.8"
|
2014-08-16 18:31:10 +00:00
|
|
|
|
2014-08-17 10:40:51 +00:00
|
|
|
# use exclusive snapshot by default.
|
2015-05-04 20:16:53 +00:00
|
|
|
unpriviledged curl 'https://www.stackage.org/lts/cabal.config?global=true' >> ~/.cabal/config
|
|
|
|
unpriviledged perl -pi -e 's#-- library-profiling: False#library-profiling: True#' $HOME/.cabal/config
|
|
|
|
unpriviledged perl -pi -e 's#-- executable-profiling: False#executable-profiling: True#' $HOME/.cabal/config
|
|
|
|
unpriviledged cabal update
|
2014-08-17 10:40:51 +00:00
|
|
|
echo "Install useful binaries"
|
2015-05-04 20:16:53 +00:00
|
|
|
unpriviledged cabal install -j alex happy
|
2014-08-17 10:34:51 +00:00
|
|
|
|
2015-05-02 12:51:16 +00:00
|
|
|
if grep 'export PATH=$HOME/.cabal/bin:$PATH' $HOME/.profile >/dev/null; then
|
|
|
|
echo "PATH variable already set in your .profile"
|
|
|
|
else
|
|
|
|
echo "Update your PATH in .profile for cabal binaries"
|
2015-05-04 20:16:53 +00:00
|
|
|
unpriviledged echo 'export PATH=$HOME/.cabal/bin:$PATH' >> $HOME/.profile
|
2015-05-02 12:51:16 +00:00
|
|
|
fi
|
2014-08-16 18:31:10 +00:00
|
|
|
|
2014-08-19 19:36:29 +00:00
|
|
|
echo "================"
|
2015-05-02 12:51:16 +00:00
|
|
|
echo "Congratulations!"
|
2014-08-19 19:36:29 +00:00
|
|
|
echo "================"
|
2014-08-16 18:31:10 +00:00
|
|
|
echo
|
|
|
|
echo "You should start using Haskell like a pro now"
|
|
|
|
echo "You shouldn't use cabal sandbox except if you know what you are doing."
|
|
|
|
echo "So if you follow a tutorial that use cabal sandbox, don't use it."
|
2015-05-02 12:51:16 +00:00
|
|
|
echo "Unless you don't mind killing some white bears and waiting a lot."
|
2014-08-19 19:36:29 +00:00
|
|
|
echo
|