summaryrefslogtreecommitdiff
path: root/standalone/android/install-haskell-packages
blob: db762f732cab0874559a4ebd76a36a2762ae3c0c (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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#!/bin/sh
# Bootstraps from an empty cabal to all the necessary haskell packages
# being installed, with the necessary patches to work on Android.
#
# Packages are installed at specific versions we have patches for. Newer
# versions often break cross-compilation by adding TH, etc.
# 
# Needs some extra C libraries to be installed inside the cross-compiler
# lib directory: libgnutls libxml2
#
# When run with "native" as a parameter, the same versions are installed
# in the host system. This is needed in order to use the EvilSplicer to
# expand Template Haskell.

# lib dir
set -e

doit () {
	echo "$@"
	eval "$@"
}

patched () {
	pkg=$1
	version=$2
	if [ "$native" ]; then
		doit cabal install --force-reinstalls $pkg-$version
	else
		shift 2
		cabal unpack $pkg-$version
		cd $pkg-$version
		for patch in ../../haskell-patches/${pkg}_*; do
			echo applying $patch
			patch -p1 < $patch
		done
		doit cabal install "$@"
		cd ..
	fi
}

unpatched () {
	if [ "$native" ]; then
		doit cabal install "$@"
	else
		doit cabal install "$@"
	fi
}

onlycross () {
	if [ ! "$native" ]; then
		eval $@
	fi
}

onlynative () {
	if [ "$native" ]; then
		eval $@
	fi
}

install_pkgs () {
	rm -rf tmp
	mkdir tmp
	cd tmp

	onlycross unpatched bytestring-0.10.3.0 text-0.11.2.3 parsec-3.1.3
	patched network 2.4.1.0
	unpatched cereal-0.3.5.2
	patched socks 0.4.2
	unpatched hslogger-1.2.1
	patched MissingH 1.2.0.0
	patched unix-time 0.1.4
	patched async 2.0.1.4
	patched zlib 0.5.4.0
	patched primitive 0.5.0.1
	patched vector 0.10.0.1
	patched distributive 0.3
	unpatched hashable-1.1.2.5
	patched case-insensitive 0.4.0.1
	unpatched nats-0.1 semigroups-0.9 tagged-0.4.4 comonad-3.0.1.1 comonad-transformers-3.0.1
	patched profunctors 3.3
	patched split 0.2.1.2
	unpatched monads-tf-0.1.0.1
	onlycross patched gnutls 0.1.4
	unpatched attoparsec-0.10.4.0 blaze-builder-0.3.1.1 
	patched syb 0.3.7
	patched aeson 0.6.1.0
	patched lifted-base 0.2.0.2
	patched resourcet 0.4.4
	patched monad-control 0.3.1.4
	unpatched conduit-0.5.6
	patched monad-logger 0.2.3.2
	unpatched reflection-1.1.7 bifunctors-3.2 semigroupoids-3.0.2
	unpatched bifunctors-3.2 comonads-fd-3.0.1 groupoids-3.0.1.1
	unpatched profunctor-extras-3.3
	patched lens 3.8.5
	unpatched xml-types-0.3.3
	patched libxml-sax 0.7.3
	patched network-conduit 0.6.2.2
	unpatched asn1-data-0.7.1 asn1-types-0.1.3 attoparsec-conduit-0.5.0.3
	unpatched blaze-builder-conduit-0.5.0.3 blaze-markup-0.5.1.5 blaze-html-0.5.1.3
	patched cipher-aes 0.1.7
	unpatched crypto-api-0.10.2
	unpatched cprng-aes-0.3.4
	unpatched http-types-0.8.0 mime-types-0.1.0.3
	unpatched certificate-1.3.7 system-fileio-0.3.11 tls-1.1.2
	unpatched utf8-string-0.3.7
	unpatched publicsuffixlist-0.1
	unpatched xml-conduit-1.0.3.3
	unpatched zlib-bindings-0.1.1.3 zlib-conduit-0.5.0.3
	patched shakespeare 1.0.3
	patched hamlet 1.1.6.1
	patched xml-hamlet 0.4.0.3
	unpatched certificate-1.3.7
	unpatched dataenc-0.12 hxt-charproperties-9.1.1 \
		hxt-regex-xmlschema-9.1.0 hxt-unicode-9.0.2 hxt-9.3.1.1 
	unpatched -f-templateHaskell QuickCheck-2.5.1.1
	unpatched Crypto-4.2.5.1
	patched HTTP 4000.2.8
	patched hS3 0.5.7
	patched file-embed 0.0.4.7
	patched gsasl 0.3.5 \
		--ghc-options=-I$HOME/.ghc/android-14/arm-linux-androideabi-4.7/arm-linux-androideabi/sysroot/usr/include/ \
		--ld-options="-L $HOME/.ghc/android-14/arm-linux-androideabi-4.7/arm-linux-androideabi/sysroot/usr/lib/"
	onlycross patched network-protocol-xmpp 0.4.4
	patched shakespeare-css 1.0.2
	patched shakespeare-i18n 1.0.0.2
	patched shakespeare-js 1.1.2
	patched persistent 1.1.5.1
	onlycross unpatched largeword-1.0.4 crypto-api-0.10.2 http-date-0.0.4 \
		cryptohash-0.8.3 vault-0.2.0.4 unix-compat-0.4.1.1 \
		crypto-conduit-0.4.3 wai-1.3.0.3
	patched wai-app-static 1.3.1
	onlycross patched wai-extra 1.3.2.1
	patched yesod-routes 1.1.2
	onlycross unpatched http-conduit-1.8.7.1
	onlycross patched DAV 0.3
	onlynative unpatched DAV
	patched yesod-core 1.1.8
	patched yesod-persistent 1.1.0.1
	patched yesod-form 1.2.1.1
	onlycross unpatched warp-1.3.7.2 yaml-0.8.2
	patched yesod-default 1.1.3.2
	patched yesod 1.1.8
	patched yesod-static 1.1.2
	unpatched ifelse-0.85
	unpatched SafeSemaphore-0.9.0
	unpatched bloomfilter-1.2.6.10
	unpatched edit-distance-0.2.1.2
	unpatched uuid-1.2.12
	unpatched json-0.7
	unpatched SHA-1.6.1
	onlycross unpatched data-endian-0.0.1
	
	cd ..
	rm -rf tmp
}

if [ "$1" = native ]; then
	native=1
	if [ ! -e $HOME/.cabal/packages/hackage.haskell.org ]; then
		cabal update
	fi
	install_pkgs
else
	native=0
	PATH=$HOME/.ghc/android-14/arm-linux-androideabi-4.7/bin:$HOME/.ghc/android-14/arm-linux-androideabi-4.7/arm-linux-androideabi/bin:$PATH
	if [ ! -e $HOME/.ghc/android-14/arm-linux-androideabi-4.7/cabal/packages/hackage.haskell.org ]; then
		cabal update
	fi
	install_pkgs
fi