# Contributor: TBK <alpine@jjtc.eu>
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
maintainer="Matthias Ahouansou <matthias@ahouansou.cz>"
pkgname=tree-sitter
pkgver=0.25.8
pkgrel=0
pkgdesc="Incremental parsing system for programming tools"
url="https://tree-sitter.github.io/"
license="MIT"
arch="all"
depends_dev="jq" # needed for abuild-tree-sitter
makedepends="
	bash
	cargo
	cargo-auditable
	"
checkdepends="
	nodejs
	openssl-dev
	"
subpackages="
	$pkgname-cli
	$pkgname-static
	$pkgname-dev
	$pkgname-grammars::noarch
"
source="
	tree-sitter-$pkgver.tar.gz::https://github.com/tree-sitter/tree-sitter/archive/refs/tags/v$pkgver.tar.gz
	abuild-tree-sitter
	update_cc_dep.patch
"
# tests require git cloning remote fixtures
# also for cli/wasm only
# added net for rootbld and 'cargo fetch'
options="net"

prepare() {
	default_prepare

	cargo fetch --locked
	cargo xtask fetch-fixtures
}

build() {
	# static & shared lib
	make

	# build the cli
	cargo auditable build -p tree-sitter-cli --frozen --release

	# TODO - build wasm bindings
	# wasm bindings (needs wasmtime-dev, still in testing; possibly more)
}

check() {
	cargo test -p tree-sitter-cli --frozen --release -- --test-threads=1
}

package() {
	make DESTDIR="$pkgdir" PREFIX=/usr install

	# Prepare directory for grammars provided by other aports.
	mkdir -p "$pkgdir"/usr/lib/tree-sitter
}

cli() {
	pkgdesc="$pkgdesc (CLI)"
	depends="nodejs" # needed for 'tree-sitter generate'

	install -Dm755 "$builddir"/target/release/tree-sitter -t "$subpkgdir"/usr/bin/
}

dev() {
	default_dev

	install -Dm755 "$srcdir"/abuild-tree-sitter -t "$subpkgdir"/usr/bin/
}

grammars() {
	pkgdesc="Meta package for pulling in all tree-sitter grammars"
	depends=""

	mkdir -p "$subpkgdir"
}

sha512sums="
0d26d0699f61fa27b5adbc298ff53f8e0f5b9f2f1b216744200f6f50cff777c9c5a5a5b92304a4d1889fccd9d8a6dd6b7d4947bac907a91850322281f754ea53  tree-sitter-0.25.8.tar.gz
38e4dd95d68197bb8009f8c71d043881cb9bca2c1e2a8d2b7c12e13981b530285e8823bc63530c6c55e81551571255b63a6c6df2210e315f7138c5e3f68a0d1b  abuild-tree-sitter
273d7fe29907de8164c5324cc408675fa6cb8a58ba4b94ac5f9fbd53fd46c5e09d26bd85fec3b2d0aa48044d751a707edbb55c5b9785a54267ba550e05fa32a0  update_cc_dep.patch
"
