aboutsummaryrefslogtreecommitdiffstats
path: root/testing/idris/APKBUILD
diff options
context:
space:
mode:
Diffstat (limited to 'testing/idris/APKBUILD')
-rw-r--r--testing/idris/APKBUILD73
1 files changed, 59 insertions, 14 deletions
diff --git a/testing/idris/APKBUILD b/testing/idris/APKBUILD
index 1d122f7428..ca52a56cf3 100644
--- a/testing/idris/APKBUILD
+++ b/testing/idris/APKBUILD
@@ -6,7 +6,8 @@ pkgver=1.0
pkgrel=0
pkgdesc="A Language with Dependent Types"
url="http://www.idris-lang.org"
-arch="x86_64"
+# Note: same as ghc, if it gets ported elsewhere this should run too
+arch="armhf x86_64"
license="BSD3"
depends="gmp-dev gcc"
makedepends="ghc cabal libffi-dev ncurses-dev zlib-dev"
@@ -15,7 +16,10 @@ source="$pkgname-$pkgver.tar.gz::https://github.com/idris-lang/Idris-dev/archive
cabal.config"
builddir="$srcdir/Idris-dev-$pkgver"
-export CABAL_CONFIG="$srcdir/cabal/cabal.config"
+_cabal_home="$srcdir/cabal"
+
+# Prevent cabal setup from using unbounded memory
+_cabal_install_opts=" --max-backjumps=10000"
cabal_update() {
msg "Updating constraints"
@@ -23,11 +27,11 @@ cabal_update() {
cd "$builddir"
# Create cabal config and fetch index.
- HOME="${CABAL_CONFIG%/*}" cabal update
+ HOME="$_cabal_home" cabal update
# Resolve deps and generate fresh cabal.config with version constraints.
rm -f cabal.config
- cabal freeze
+ HOME="$_cabal_home" cabal freeze --shadow-installed-packages
# Add version tag at the first line.
sed -i "1i--$pkgver" cabal.config
@@ -38,6 +42,41 @@ cabal_update() {
abuild checksum
}
+
+# Used by the subsequent two functions.
+# This barf of a pipeline converts the cabal freeze config file lines from:
+# constraints: foo ==VERSION,
+# bar ==VERSION
+# etc...
+# To something we can more easily munge into what we need for other purposes
+# aka we end up with:
+# foo==VERSION bar==VERSION ...
+_cabal_constraints_prime() {
+ printf "$(grep '==' cabal.config | \
+ sed -e 's/constraints[:]//g' | \
+ tr -d '[:space:]' | \
+ sed -e 's/[,]/ /g')"
+}
+
+# Take the output from above and replace =='s to -'s so we can cabal fetch
+# the specific package-version's via cabal
+_cabal_pkgs() {
+ printf "$(_cabal_constraints_prime)" | sed -e 's/==/-/g'
+}
+
+# Similar to the above, but convert to --constraint args used for cabal install
+# so that our cabal install line can use the same constraints for idris in cabal.config.
+#
+# This works around us running against a newer hackage index where one of the packages
+# in the freeze file has a newer version that cabal install libffi could end up
+# selecting due to libffi having more relaxed constraints than idris.
+#
+# That is:
+# --constraint=foo==VERSION --constraint=bar==VERSION
+_cabal_constraints() {
+ printf " $(_cabal_constraints_prime)" | sed -e 's/ / --constraint=/g'
+}
+
prepare() {
default_prepare
@@ -48,28 +87,34 @@ prepare() {
cd "$builddir"
# Create cabal config and fetch index.
- HOME="${CABAL_CONFIG%/*}" cabal update
+ HOME="$_cabal_home" cabal update
# Cabal implicitly loads cabal.config from the project's directory.
ln -sf "$srcdir"/cabal.config .
# Create Cabal sandbox that will be used for all subsequent cabal
# invocations. This is something like Python virtual env.
- cabal sandbox init
+ HOME="$_cabal_home" cabal sandbox init
# Fetch all dependencies.
- cabal fetch libffi .
+ # Note: cabal-doctest is a transitive dependency for libffi-0.1 not idris
+ HOME="$_cabal_home" cabal fetch --no-dependencies $(_cabal_pkgs) \
+ cabal-doctest-1.0.2 libffi-0.1
}
build() {
cd "$builddir"
- # Build dependencies.
- cabal install --offline -v libffi
- cabal install --only-dependencies --offline -v
+ # Build dependencies
+ # Note: for libffi force constraints manually via the freeze file to prevent
+ # cabal from possibly using newer constraints for libffi that might intersect
+ # with those idris uses.
+ HOME="$_cabal_home" cabal install $_cabal_install_opts --offline --constraint=cabal-doctest==1.0.2 \
+ $(_cabal_constraints) -v libffi-0.1
+ HOME="$_cabal_home" cabal install $_cabal_install_opts --offline --only-dependencies -v
# Note: ordering of prefixes is important!
- cabal configure \
+ HOME="$_cabal_home" cabal configure \
--prefix='/usr' \
--docdir='$prefix/share/doc' \
--datadir='$prefix/share' \
@@ -80,7 +125,7 @@ build() {
--dynlibdir="$pkgname" \
--disable-shared \
--flags='GMP FFI standalone'
- cabal build
+ HOME="$_cabal_home" cabal build
}
# TODO: Run upstream tests and/or figure out how to set paths to be able
@@ -94,7 +139,7 @@ check() {
package() {
cd "$builddir"
- cabal copy --destdir="$pkgdir"
+ HOME="$_cabal_home" cabal copy --destdir="$pkgdir"
cd "$pkgdir"
@@ -108,4 +153,4 @@ package() {
}
sha512sums="a350004a8510f01d1cc8f965a9a4e2dab219f003980b98354ebb5ae42f73b32c90c98dce193943e9709d994cb92ad35814a46b79412a1afc85d42e1018c6ba10 idris-1.0.tar.gz
-e078892987816012034295be81118fbc710e3dbf08af18257e5390fc159bb5d64e1aae8a802835ca92b1e0d065524833d657bc9edffc9ebefc8cb5c02935694a cabal.config"
+adce625aed6ab6f36adf6d91e5671c85c91a1009e17419a88071e3cd500962c1c545406b2eb431cd3efa45d3dacadac913a9a27a5956e8233bd13b4630ff2ab4 cabal.config"