# Maintainer: Celeste <cielesti@protonmail.com>
maintainer="Celeste <cielesti@protonmail.com>"
pkgname=koka
pkgver=3.1.3_alpha14
pkgrel=0
_pkgver=${pkgver/_alpha/-alpha}
_pkgbase=${pkgver%%_alpha*}
pkgdesc="Strongly typed functional-style language with effect types and handlers"
url="https://koka-lang.github.io/"
arch="aarch64 x86_64" # ghc
license="Apache-2.0 AND MIT"
depends="cmd:cc musl-dev pcre2-dev pcre2-static"
makedepends="alex ghc xxhash-dev"
_async=2.2.5
_floatinghex=0.5
_hashable=1.5.0.0
_isocline=1.0.9
_mimalloc=6141843614220c4d85f55774c131a68ba778e413
source="https://github.com/koka-lang/koka/archive/refs/tags/v$_pkgver/koka-$_pkgver.tar.gz
	https://github.com/microsoft/mimalloc/archive/$_mimalloc/mimalloc-$_mimalloc.tar.gz
	https://hackage.haskell.org/package/async-$_async/async-$_async.tar.gz
	https://hackage.haskell.org/package/FloatingHex-$_floatinghex/FloatingHex-$_floatinghex.tar.gz
	https://hackage.haskell.org/package/hashable-$_hashable/hashable-$_hashable.tar.gz
	https://hackage.haskell.org/package/isocline-$_isocline/isocline-$_isocline.tar.gz
	"
builddir="$srcdir/$pkgname-$_pkgver"

case "$CARCH" in
	x86_64) _arch=x64	;;
	aarch64) _arch=arm64	;;
esac

prepare() {
	default_prepare

	ln -sv ../../../include/HsXXHash.h \
		"$srcdir"/hashable-$_hashable/src/Data/Hashable/

	rmdir -v kklib/mimalloc
	mv -v "$srcdir"/mimalloc-$_mimalloc kklib/mimalloc
}

build() {
	# based on util/minbuild.sh
	if [ ! -f src/Syntax/Lexer.hs ]; then
		alex src/Syntax/Lexer.x -g -o src/Syntax/Lexer.hs
	fi

	mkdir -p .koka/minbuild
	ghc \
		-i"src:src/Platform/cpp:$srcdir/async-$_async:$srcdir/FloatingHex-$_floatinghex:$srcdir/hashable-$_hashable/src:$srcdir/isocline-$_isocline/haskell" \
		-odir=.koka/minbuild \
		-hidir=.koka/minbuild \
		-o .koka/minbuild/koka \
		-DKOKA_MAIN=\"koka\" \
		-DKOKA_VARIANT=\"release\" \
		-DKOKA_VERSION=\"$_pkgbase\" \
		--make -j"$((JOBS / 3 + 1))" -O2 \
		src/Main/plain/Main.hs \
		src/Platform/cpp/Platform/cconsole.c \
		"$srcdir"/isocline-$_isocline/src/isocline.c

	CC=gcc .koka/minbuild/koka -e util/bundle.kk \
		-- --koka=.koka/minbuild/koka
}

check() {
	./bundle/v$_pkgbase/local-v$_pkgbase-linux-$_arch/bin/koka \
		-e samples/all.kk
}

package() {
	cd bundle/v$_pkgbase
	mkdir -p "$pkgdir/usr"
	local f; for f in koka-v$_pkgbase-linux-*.tar.gz; do
		tar -xf "$f" \
			-C "$pkgdir/usr" \
			--exclude=meta \
			--no-same-owner
	done
}

sha512sums="
de2bc2a6e9633b791ad3a953c37c73f8c08d4744df3eac06afde0431fa56a374df87d8c70288cbc9cc10e63896a0a11e7c012bb306be5dcc6b191dfcbd38d98e  koka-3.1.3-alpha14.tar.gz
4afb8b4374082e098267c95ade797da47e94a28764ce48e67a25514610c6a34a33749cba29fd27472e078ef6f18e53fc5e3dd44c50e1210e965a43a4849ee2ac  mimalloc-6141843614220c4d85f55774c131a68ba778e413.tar.gz
bf525cebe9d5f67140f7648683704d0f5ec5d63c78ac9e3b14870652f355d1b4afc3922bd1afce2182d06024ec04b30536407f29d526b05f2ae4a36cba3a518a  async-2.2.5.tar.gz
aabac5a89a3d90828396fa9f7704d49367e2257635731e53975519c049eb39edfcd3ba06b1cbcdeec21d17030b7a22210de17210215323fc8351fd9516e992b9  FloatingHex-0.5.tar.gz
ba8df8455cb86cd3d91b8024dfcfb2caa1f2d1b3bfb89fd187f998775a03f43155601e101a695ff9c022a2a2d521613d70358ada188dbcf3e8d8bbf59e75264d  hashable-1.5.0.0.tar.gz
0bc1a4b2ad217e1e3b270eeab51b18b4d0f5534fb8759daed4b699f2a56628f4a18d909862abed5c949f671ed746855a6de508ee23f3d93ffbff5a8525db1a47  isocline-1.0.9.tar.gz
"
