ccef06da41
Was able to reuse many of the android patches, but several had to be re-done. On Android, ghc is a stage2 build, so can compile, but not run TH code. But debian's ghc on armel cannot even compile TH code, so it has to be patched out. Some haskell packages have been updated to new versions, including yesod and DAV, and their patches had to be redone. The Makefile now has 2 new targets. The first is run on a companion x86 system to do the build and get TH splices. Then the second target is run the same source tree on the arm system to build without needing TH. This commit was sponsored by Svenne Krap.
96 lines
2 KiB
Bash
Executable file
96 lines
2 KiB
Bash
Executable file
#!/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 ../../../no-th/haskell-patches/${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 wai-app-static
|
|
patched shakespeare
|
|
patched shakespeare-css
|
|
patched yesod-routes
|
|
patched hamlet
|
|
patched monad-logger
|
|
patched shakespeare-i18n
|
|
patched shakespeare-js
|
|
patched yesod-core
|
|
patched persistent
|
|
patched persistent-template
|
|
patched yesod
|
|
patched process-conduit
|
|
patched yesod-static
|
|
patched yesod-form
|
|
patched file-embed
|
|
patched yesod-auth
|
|
patched yesod
|
|
patched generic-deriving
|
|
patched profunctors
|
|
patched reflection
|
|
patched lens
|
|
patched xml-hamlet
|
|
patched shakespeare-text
|
|
patched DAV
|
|
|
|
cd ..
|
|
|
|
installgitannexdeps
|
|
}
|
|
|
|
cabal update
|
|
install_pkgs
|