summaryrefslogtreecommitdiff
path: root/standalone/linux/install-haskell-packages
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-12-16 23:05:00 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-12-16 23:05:00 -0400
commitbaec0fdf7e574290188ffc2d64a912bf9dd5fda2 (patch)
tree7536cf7266c5fff4f0590f83632b6e6b6969526a /standalone/linux/install-haskell-packages
parentc3ea7e50f0102008242ffeda974ed9eb9868c8d7 (diff)
begin work on installing TH-using dependencies of webapp, for standalone armel build
Will move common patches out of android/haskell-patches.
Diffstat (limited to 'standalone/linux/install-haskell-packages')
-rwxr-xr-xstandalone/linux/install-haskell-packages72
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