# Copyright 2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit unpacker ninja-utils toolchain-funcs

DESCRIPTION="The Dart SDK"
HOMEPAGE="https://dart.dev https://github.com/dart-lang/sdk"
# repack sdk by "abuild snapshot"
# https://github.com/alpinelinux/aports/blob/master/testing/dart/APKBUILD
SRC_URI="
	https://minio.dream-universe.org/posts/distfiles/dart-sdk-${PV}.tar.zst -> ${P}.snapshot.tar.zst
	https://storage.googleapis.com/dart-archive/channels/stable/release/${PV}/sdk/dartsdk-linux-x64-release.zip
		-> dartsdk-${PV}-amd64.zip
"

S="${WORKDIR}/dart-sdk-${PV}"
LICENSE="BSD"
SLOT="0"
KEYWORDS="~amd64"

BDEPEND="
	app-arch/unzip
	dev-build/gn
	dev-build/ninja
"

PATCHES=(
	"${FILESDIR}"/${PN}-3.9.2-fix-gcc-15.patch
	"${FILESDIR}"/${PN}-3.9.2-fix-toolchain-prefix.patch
)

src_prepare() {
	# https://github.com/dart-lang/sdk/issues/52295
	# needed by build.ninja.stamp
	mkdir -pv .git/logs
	echo '' > .git/logs/HEAD

	ln -sfv "${WORKDIR}"/dart-sdk tools/sdks/dart-sdk

	# needed by tools/build.py
	# ln -sfv /usr/bin/gn buildtools/gn
	# mkdir -p buildtools/ninja
	# ln -sfv /usr/bin/ninja buildtools/ninja/ninja

	python3 tools/generate_package_config.py
	python3 tools/generate_sdk_version_file.py

	default
}

src_configure() {
	local mygnargs=()
	mygnargs+=( 'target_cpu="x64"' )
	mygnargs+=( 'is_clang=false' )
	mygnargs+=( 'is_debug=false' )
	mygnargs+=( 'is_release=true' )
	mygnargs+=( 'dart_platform_sdk=false' )
	mygnargs+=( 'verify_sdk_hash=false' )
	gn gen --args="${mygnargs[*]}" out/Release
}

src_compile() {
	# fix can't find cc1plus
	export PATH=/usr/libexec/gcc/${CHOST}/$(gcc-major-version)/:$PATH
	local myninjaargs=""
	myninjaargs+=" runtime"
	myninjaargs+=" create_sdk"
	eninja ${myninjaargs} -C out/Release
}

src_install() {
	insinto /usr/lib/dart
	doins -r out/Release/dart-sdk/*

	fperms +x /usr/lib/dart/bin/dart
	fperms +x /usr/lib/dart/bin/dartaotruntime
	fperms +x /usr/lib/dart/bin/utils/gen_snapshot
	fperms +x /usr/lib/dart/bin/utils/wasm-opt

	dosym ../lib/dart/bin/dart /usr/bin/dart
	dosym ../lib/dart/bin/dartaotruntime /usr/bin/dartaotruntime
}