# Contributor: Mitch Tishmack <mitch.tishmack@gmail.com>
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Maintainer: Mitch Tishmack <mitch.tishmack@gmail.com>
#
# Note: This abuilds downloads Haskell dependencies in the prepare phase
#       without any verification!
setvar pkgname = 'idris'
setvar pkgver = '1.0'
setvar pkgrel = '0'
setvar pkgdesc = ""A Language with Dependent Types""
setvar url = ""http://www.idris-lang.org""
setvar arch = ""x86_64""
setvar license = ""BSD3""
setvar depends = ""gmp-dev gcc""
setvar makedepends = ""ghc cabal libffi-dev ncurses-dev zlib-dev""
setvar subpackages = ""$pkgname-doc""
setvar source = ""$pkgname-$pkgver.tar.gz::https://github.com/idris-lang/Idris-dev/archive/v$pkgver.tar.gz
	cabal.config""
setvar builddir = ""$srcdir/Idris-dev-$pkgver""

export CABAL_CONFIG="$srcdir/cabal/cabal.config"

proc cabal_update {
	msg "Updating constraints"

	cd $builddir"

	# Create cabal config and fetch index.
	HOME=${CABAL_CONFIG%/*}" cabal update

	# Resolve deps and generate fresh cabal.config with version constraints.
	rm -f cabal.config
	cabal freeze

	# Add version tag at the first line.
	sed -i "1i--$pkgver" cabal.config

	mv cabal.config "$startdir"/

	cd $startdir
	abuild checksum
}

proc prepare {
	default_prepare

	if test $(head -n 1 "$srcdir"/cabal.config) != "--$pkgver" {
		die "Requirements file is outdated, run 'abuild cabal_update'"
	}

	cd $builddir"

	# Create cabal config and fetch index.
	HOME=${CABAL_CONFIG%/*}" 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

	# Fetch all dependencies.
	# XXX: This should always fetch the same versions as defined in
	# our cabal.config, but Cabal does not verify packages integrity!
	cabal fetch libffi .
}

proc build {
	cd $builddir

	# Build dependencies.
	cabal install --offline -v libffi
	cabal install --only-dependencies --offline -v

	# Note: ordering of prefixes is important!
	cabal configure \
		--prefix='/usr' \
		--docdir='$prefix/share/doc' \
		--datadir='$prefix/share' \
		--htmldir='$docdir/html' \
		--libdir='$prefix/lib' \
		--libsubdir="$pkgname" \
		--datasubdir="$pkgname" \
		--dynlibdir="$pkgname" \
		--disable-shared \
		--flags='GMP FFI standalone'
	cabal build
}

# TODO: Run upstream tests and/or figure out how to set paths to be able
# to compile hello_world for check.
proc check {
	cd $builddir

	./dist/build/idris/idris --version
}

proc package {
	cd $builddir

	cabal copy --destdir="$pkgdir"

	cd $pkgdir

	# We don't need the haskell shared libraries or interface files.
	rm -r usr/lib/idris

	mkdir -p usr/share/doc/idris/ \
		usr/share/licenses/$pkgname/
	mv usr/share/idris/docs usr/share/doc/idris
	mv usr/share/doc/LICENSE usr/share/licenses/$pkgname/
}

setvar sha512sums = ""a350004a8510f01d1cc8f965a9a4e2dab219f003980b98354ebb5ae42f73b32c90c98dce193943e9709d994cb92ad35814a46b79412a1afc85d42e1018c6ba10  idris-1.0.tar.gz
e078892987816012034295be81118fbc710e3dbf08af18257e5390fc159bb5d64e1aae8a802835ca92b1e0d065524833d657bc9edffc9ebefc8cb5c02935694a  cabal.config""