# Contributor: Leo <thinkabit.ukim@gmail.com>
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Maintainer:
pkgname=lua-luv
_rockname=luv
pkgver=1.51.0.1
_pkgver=${pkgver%.*}-${pkgver##*.}
pkgrel=0
pkgdesc="Bare libuv bindings for Lua"
url="https://github.com/luvit/luv"
arch="all"
license="Apache-2.0"
makedepends="
	cmake
	libuv-dev
	lua-compat53-dev
	ninja
	"
subpackages="
	$pkgname-static
	$pkgname-dev
	libluv
	"
source="https://github.com/luvit/luv/archive/$_pkgver/lua-luv-$_pkgver.tar.gz
	skip-tty-test.patch
	"
builddir="$srcdir/luv-$_pkgver"

case "$CARCH" in
riscv64)
	_luajit=""
	;;
*)
	_luajit="jit"
	makedepends="$makedepends luajit-dev"
	;;
esac

_luaversions="5.1 5.4"
for _v in $_luaversions; do
	makedepends="$makedepends lua$_v-dev"
	subpackages="$subpackages lua$_v-${pkgname#lua-}:_subpackage"
done

build() {
	# shared module loop
	local lver; for lver in $_luaversions $_luajit; do
		cmake -B "build-$lver" -G Ninja \
			-DCMAKE_INSTALL_PREFIX=/usr \
			-DWITH_LUA_ENGINE=Lua \
			-DWITH_SHARED_LIBUV=ON \
			-DLUA_BUILD_TYPE=System \
			-DLUA_INCLUDE_DIR="$(pkg-config --variable=includedir "lua$lver")" \
			-DLUA_COMPAT53_DIR="/usr/include/lua${lver/jit/5.1}" \
			-DBUILD_MODULE=ON \
			-DBUILD_SHARED_LIBS=ON \
			-DBUILD_STATIC_LIBS=OFF
		cmake --build "build-$lver"
	done
	# separate static because cmake tracks all installed and makes it impossible to split
	cmake -B build-static -G Ninja \
		-DCMAKE_INSTALL_PREFIX=/usr \
		-DWITH_LUA_ENGINE=Lua \
		-DWITH_SHARED_LIBUV=ON \
		-DLUA_BUILD_TYPE=System \
		-DLUA_INCLUDE_DIR="$(pkg-config --variable=includedir "lua5.1")" \
		-DLUA_COMPAT53_DIR="/usr/include/lua5.1" \
		-DBUILD_MODULE=ON \
		-DBUILD_SHARED_LIBS=OFF \
		-DBUILD_STATIC_LIBS=ON
	cmake --build build-static
}

check() {
	local lver; for lver in $_luaversions $_luajit; do
		msg "Running tests with lua$lver"
		LUA_CPATH="build-${lver/jit/5.1}/lib?.so;;" lua$lver tests/run.lua
	done
}

package() {
	DESTDIR="$pkgdir" cmake --install build-static
	DESTDIR="$pkgdir" cmake --install build-${_luajit:-"5.1"}

	rm -rf "$pkgdir"/usr/lib/lua
}

dev() {
	default_dev

	local lver; for lver in $_luaversions; do
		mkdir -p "$subpkgdir/usr/include/lua$lver"
		ln -s ../luv "$subpkgdir"/usr/include/lua$lver/
	done
}

# This is needed for neovim.
libluv() {
	pkgdesc="$pkgdesc (shared library)"

	amove usr
}

_subpackage() {
	local lver="${subpkgname:3:3}"
	pkgdesc="$pkgdesc $lver"
	depends="lua$lver"
	install_if="$pkgname=$pkgver-r$pkgrel lua$lver"
	local rockdir="$subpkgdir/usr/lib/luarocks/rocks-$lver/$_rockname/$_pkgver"

	install -D -m755 "$builddir"/build-$lver/luv.so -t "$subpkgdir"/usr/lib/lua/$lver/

	mkdir -p "$rockdir"
	echo 'rock_manifest = {}' > "$rockdir"/rock_manifest
}

sha512sums="
b8c7dd1b371969220854a5eaeb4f570b888df95e88c59de29375abe2dc1fc1c9c4acdd8999ad633989ac0be5033f0e7adfa3a67f324170b1a053296b88465512  lua-luv-1.51.0-1.tar.gz
3f64c2c3aa6a688042081f3ff31c569fc184b02aec03fb848a6bb890b8c572707ad8c79c520a6e520f4b390192abfd689e1bdbf61bc61412784a5f749acaf92f  skip-tty-test.patch
"
