209 lines
		
	
	
	
		
			5.5 KiB
			
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
	
		
			5.5 KiB
			
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/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
 | 
						|
 | 
						|
if [ "$1" ]; then
 | 
						|
	mode="$1"
 | 
						|
	shift 1
 | 
						|
fi
 | 
						|
cabalopts="$@"
 | 
						|
 | 
						|
cabalinstall () {
 | 
						|
	echo cabal install "$@" "$cabalopts"
 | 
						|
	eval cabal install "$@" "$cabalopts"
 | 
						|
}
 | 
						|
 | 
						|
patched () {
 | 
						|
	pkg=$1
 | 
						|
	version=$2
 | 
						|
	if [ "$native" ]; then
 | 
						|
		cabalinstall --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
 | 
						|
		cabalinstall "$@"
 | 
						|
		cd ..
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
unpatched () {
 | 
						|
	cabalinstall "$@"
 | 
						|
}
 | 
						|
 | 
						|
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.3.1 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
 | 
						|
	patched certificate 1.3.7
 | 
						|
	unpatched 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
 | 
						|
	onlynative network-protocol-xmpp
 | 
						|
	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
 | 
						|
	if [ ! "$native" ]; then cabal install bloomfilter-1.2.6.10 --constraint 'bytestring >= 0.10.3.0'; fi
 | 
						|
	onlynative 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
 | 
						|
	unpatched hinotify-0.3.5
 | 
						|
	patched iproute 1.2.11
 | 
						|
	unpatched dns 0.3.6
 | 
						|
	
 | 
						|
	cd ..
 | 
						|
	rm -rf tmp
 | 
						|
}
 | 
						|
 | 
						|
native_install () {
 | 
						|
	echo "Native install"
 | 
						|
	native=1
 | 
						|
	if [ ! -e $HOME/.cabal/packages/hackage.haskell.org ]; then
 | 
						|
		cabal update
 | 
						|
	fi
 | 
						|
	install_pkgs
 | 
						|
}
 | 
						|
 | 
						|
cross_path () {
 | 
						|
	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
 | 
						|
}
 | 
						|
 | 
						|
cross_install () {
 | 
						|
	echo "Cross install"
 | 
						|
	native=
 | 
						|
	cross_path
 | 
						|
	if [ ! -e $HOME/.ghc/android-14/arm-linux-androideabi-4.7/cabal/packages/hackage.haskell.org ]; then
 | 
						|
		cabal update
 | 
						|
	fi
 | 
						|
	install_pkgs
 | 
						|
}
 | 
						|
 | 
						|
case "$mode" in
 | 
						|
	native)
 | 
						|
		native_install
 | 
						|
	;;
 | 
						|
	cross)
 | 
						|
		cross_install
 | 
						|
	;;
 | 
						|
	cleancross)
 | 
						|
		# cross install, first removing all currently installed
 | 
						|
		# packages except those part of ghc
 | 
						|
		rm -f $(grep -l $HOME/.ghc/android-14/arm-linux-androideabi-4.7/.cabal/lib/ $HOME/.ghc/android-14/arm-linux-androideabi-4.7/lib/ghc-*/package.conf.d/*.conf)
 | 
						|
		cross_path
 | 
						|
		ghc-pkg recache
 | 
						|
		cross_install
 | 
						|
	;;
 | 
						|
	"")
 | 
						|
		cross_install
 | 
						|
		native_install
 | 
						|
	;;
 | 
						|
esac
 |