# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

LLVM_COMPAT=( {17..23} )

inherit cmake edo git-r3 flag-o-matic llvm-r2

LICRYPTO_PV="0.1.1"
LUA_PV="5.5.1"
LUATO_COMMIT="df0c6f2d1cce2051b4711d36067619eda7933683"
RSTD_PV="0.1.5"
ZSTD_COMMIT="f8745da6ff1ad1e7bab384bd1f9d742439278e99"

DESCRIPTION="Module-first C++ build tool with manifest"
HOMEPAGE="https://github.com/litocpp/lito"
EGIT_REPO_URI="https://github.com/litocpp/${PN}.git"
SRC_URI="https://github.com/litocpp/licrypto/archive/v${LICRYPTO_PV}.tar.gz -> licrypto-${LICRYPTO_PV}.tar.gz
	https://github.com/litocpp/luato/archive/${LUATO_COMMIT}.tar.gz -> luato-${LUATO_COMMIT}.tar.gz
	https://github.com/litocpp/rstd/archive/v${RSTD_PV}.tar.gz -> rstd-${RSTD_PV}.tar.gz
	https://github.com/facebook/zstd/archive/${ZSTD_COMMIT}.tar.gz -> zstd-${ZSTD_COMMIT}.tar.gz
	https://www.lua.org/ftp/lua-${LUA_PV}.tar.gz"

LICENSE="Apache-2.0 MIT"
SLOT="0"
IUSE="experimental"

# needs dev-lang/lua:5.5, wrt #968456
DEPEND="app-arch/zstd:0="
RDEPEND="${DEPEND}
	$(llvm_gen_dep 'llvm-core/clang:${LLVM_SLOT}
		llvm-core/lld:${LLVM_SLOT}
		llvm-core/llvm:${LLVM_SLOT}
		llvm-runtimes/libcxx')"
BDEPEND="virtual/pkgconfig"

PATCHES=( "${FILESDIR}/${PN}"-0.8.4-scan-execution-statistics.patch
	"${FILESDIR}/${PN}"-0.8.4-source-local.patch
	"${FILESDIR}/${PN}"-0.8.4-system-zstd-pkgconfig.patch
	"${FILESDIR}/${PN}"-0.8.4-tests-git-lock-checksum.patch
	"${FILESDIR}/${PN}"-0.8.4-tests-pmacro-provider.patch )

pkg_setup() {
	llvm-r2_pkg_setup

	export CC=clang CXX=clang++
}

src_unpack() {
	default
	git-r3_src_unpack
}

src_prepare() {
	# use Gentoo's selected LLVM toolchain in tests
	sed -i "s|/nix/opt/llvm/22|$(get_llvm_prefix)|g" \
		tests/src/support/build.cppm \
		tests/src/command/build.cpp || die

	cmake_src_prepare

	if use experimental ; then
		eapply "${FILESDIR}/${PN}"-0.8.4-bundle-export-locked.patch \
			"${FILESDIR}/${PN}"-0.8.4-cargo-source-bundle-vendor-path.patch \
			"${FILESDIR}/${PN}"-0.8.4-portable-git-source-bundle.patch
	fi

	eapply --directory="${WORKDIR}/luato-${LUATO_COMMIT}" \
		"${FILESDIR}/${PN}"-0.8.4-source-luato-local-lua.patch

	# provide Portage-fetched sources for offline tests
	ln -s "${WORKDIR}/licrypto-${LICRYPTO_PV}" .licrypto || die
	ln -s "${WORKDIR}/luato-${LUATO_COMMIT}" .luato || die
	ln -s "${WORKDIR}/rstd-${RSTD_PV}" .rstd || die
	ln -s "${WORKDIR}/zstd-${ZSTD_COMMIT}" .zstd || die
}

src_configure() {
	append-cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0

	local mycmakeargs=(
		-DLITO_USE_SYSTEM_ZSTD=ON
		-DFETCHCONTENT_SOURCE_DIR_LICRYPTO="${WORKDIR}/licrypto-${LICRYPTO_PV}"
		-DFETCHCONTENT_SOURCE_DIR_LUA="${WORKDIR}/lua-${LUA_PV}"
		-DFETCHCONTENT_SOURCE_DIR_LUATO="${WORKDIR}/luato-${LUATO_COMMIT}"
		-DFETCHCONTENT_SOURCE_DIR_RSTD="${WORKDIR}/rstd-${RSTD_PV}"
	)

	cmake_src_configure
}

src_test() {
	edo "${BUILD_DIR}"/cli/lito test --offline
}

src_install() {
	cmake_src_install

	edo rm -rf "${ED}"/usr/share/licenses/li{to,crypto}
}