git-annex/standalone/linux/install-haskell-packages
Joey Hess 33d6057ca3 cabal unpack --pristine
Without --pristine, cabal will update the package's cabal file if a newer
one is available in hackage. But that can break applying patches.
Especially since the new version from hackage can apparently have dos line
endings, while the version from the tarball doesn't.
2014-12-04 01:02:36 -04:00

110 lines
2.5 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.
#
# The cabal.config is used to pin the haskell packages to the last
# versions that have been gotten working. To update, delete the
# cabal.config, run this script with an empty cabal and fix up the broken
# patches, and then use cabal freeze to generate a new cabal.config.
set -e
if [ ! -d haskell-patches ]; then
cd standalone/linux
fi
cabalopts="$@"
cabalinstall () {
echo cabal install -j1 "$@" "$cabalopts"
eval cabal install -j1 "$@" "$cabalopts"
}
patched () {
pkg=$1
ver=$2
if [ -z "$ver" ]; then
ver="$(grep " $pkg " ../cabal.config | cut -d= -f 3 | sed 's/,$//')"
fi
if [ -z "$ver" ]; then
cabal unpack --pristine $pkg
else
cabal unpack --pristine $pkg-$ver
fi
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"
ln -sf ../../cabal.config
for patch in ../../haskell-patches/${pkg}_* ../../../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 -f cabal.config
cd ..
rm -rf $pkg*
}
installgitannexdeps () {
pushd ../..
ln -sf standalone/linux/cabal.config
echo "cabal install QuickCheck -f-templateHaskell"
cabal install -j1 QuickCheck -f-templateHaskell
echo cabal install --only-dependencies "$@"
cabal install -j1 --only-dependencies "$@"
rm -f cabal.config
popd
}
install_pkgs () {
rm -rf tmp
mkdir tmp
cd tmp
patched network
patched wai-app-static
patched vector
patched aeson
patched shakespeare
patched yesod-routes
patched monad-logger
patched skein
patched yesod-core
patched persistent
patched persistent-template
patched file-embed
patched process-conduit
patched yesod-static
patched yesod-persistent
patched yesod-form
patched yesod-auth
patched yesod
patched generic-deriving
patched profunctors
patched reflection
patched lens
patched xml-hamlet
patched DAV
cd ..
installgitannexdeps
}
cabal update
# Some packages fail to install in a non unicode locale.
LANG=C.UTF-8
export LANG
install_pkgs