diff options
Diffstat (limited to 'standalone/linux')
-rwxr-xr-x | standalone/linux/install-haskell-packages | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/standalone/linux/install-haskell-packages b/standalone/linux/install-haskell-packages new file mode 100755 index 000000000..62bdf701b --- /dev/null +++ b/standalone/linux/install-haskell-packages @@ -0,0 +1,72 @@ +#!/bin/bash +# Bootstraps from an empty cabal (plus apt-get build-dep git-annex) +# to all the necessary haskell packages being installed, with the +# necessary patches to work on architectures that lack template haskell. +# +# Note that the newest version of packages is installed. +# It attempts to reuse patches for older versions, but +# new versions of packages often break cross-compilation by adding TH, +# etc +# +# Future work: Convert to using the method used here: +# https://github.com/kaoskorobase/ghc-ios-cabal-scripts/ + +set -e + +if [ ! -d ../haskell-patches ]; then + cd standalone/linux +fi + +cabalopts="$@" + +cabalinstall () { + echo cabal install "$@" "$cabalopts" + eval cabal install "$@" "$cabalopts" +} + +patched () { + pkg=$1 + shift 1 + cabal unpack $pkg + cd $pkg* + git init + git config user.name dummy + git config user.email dummy@example.com + git add . + git commit -m "pre-patched state of $pkg" + for patch in ../../../haskell-patches/no-th/${pkg}_*; do + if [ -e "$patch" ]; then + echo trying $patch + if ! patch -p1 < $patch; then + echo "failed to apply $patch" + echo "please resolve this, replace the patch with a new version, and exit the subshell to continue" + $SHELL + fi + fi + done + cabalinstall "$@" + rm -rf $pkg* + cd .. +} + +installgitannexdeps () { + pushd ../.. + echo cabal install --only-dependencies "$@" + cabal install --only-dependencies "$@" + popd +} + +install_pkgs () { + rm -rf tmp + mkdir tmp + cd tmp + + patched DAV + + cd .. + + installgitannexdeps +} + +cabal update +install_pkgs |