blob: f338cc6c7d1216653287a18c9bf014a4ef201a0d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
#!/bin/bash
# Bootstraps from an empty cabal to all the necessary haskell packages
# being installed, with the necessary patches to work on Android.
#
# You should install ghc-android first.
#
# 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/android
fi
setupcabal () {
# Some packages fail to install in a non unicode locale.
LANG=en_US.UTF-8
export LANG
}
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
if [ -e config.sub ]; then
cp /usr/share/misc/config.sub .
fi
if [ -e config.guess ]; then
cp /usr/share/misc/config.guess .
fi
cabal install # --force-reinstalls --reinstall
rm -f cabal.config
rm -rf $pkg*
cd ..
}
installgitannexdeps () {
pushd ../..
ln -sf standalone/android/cabal.config
cabal install --only-dependencies "$@" # --force-reinstalls --reinstall
rm -f cabal.config
popd
}
install_pkgs () {
rm -rf tmp
mkdir tmp
cd tmp
cat <<EOF
EOF
patched network
patched unix-time
patched lifted-base
patched zlib
patched MissingH
patched distributive
patched comonad
patched iproute
patched primitive
patched socks
patched vector
patched stm-chans
patched persistent
patched profunctors
patched skein
patched lens
patched certificate
patched x509-system
patched persistent-template
patched system-filepath
patched optparse-applicative
patched wai-app-static
patched yesod-routes
patched shakespeare
patched yesod-core
patched yesod-persistent
patched yesod-form
patched crypto-numbers
patched clock
patched yesod-auth
patched yesod
patched process-conduit
patched DAV
patched yesod-static
patched dns
patched gnutls
patched unbounded-delays
patched gnuidn
patched network-protocol-xmpp
patched uuid
cd ..
installgitannexdeps -fAndroid -f-Pairing
}
cabal update
setupcabal
# Install packages for host ghc.
installgitannexdeps
# Install packages for cross ghc, with patches as necessary.
PATH=$HOME/.ghc/$(cat abiversion)/bin:$HOME/.ghc/$(cat abiversion)/arm-linux-androideabi/bin:$PATH
cabal update
install_pkgs
|