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

EAPI=8

DISTUTILS_USE_PEP517=setuptools
DISTUTILS_EXT=1
DISTUTILS_OPTIONAL=1
DISTUTILS_SINGLE_IMPL=1
PYTHON_COMPAT=(python3_{11..13})

inherit distutils-r1 cmake multilib

DESCRIPTION="The Fast Cross-Platform Package Manager"
HOMEPAGE="https://github.com/mamba-org/mamba"
SRC_URI="https://github.com/mamba-org/mamba/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz"
LICENSE="BSD"
SLOT="0/3"
KEYWORDS="~amd64"
IUSE="python mamba"
# Test requires network access
RESTRICT="test"
REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"

DEPEND="app-arch/libarchive:=
	app-arch/zstd:=
	dev-cpp/cli11
	dev-cpp/nlohmann_json
	dev-cpp/reproc:=
	dev-cpp/tl-expected
	dev-cpp/yaml-cpp
	dev-libs/simdjson
	sys-libs/libsolv:=[conda]
	mamba? (
		app-crypt/mit-krb5
		app-arch/bzip2
		app-arch/libarchive
		app-arch/lz4
		app-arch/xz-utils
		dev-libs/libunistring
		net-dns/libidn2
		net-libs/libssh2
		net-libs/libpsl
		net-libs/nghttp2
		net-libs/nghttp3
		net-dns/c-ares
		net-misc/curl
		sys-apps/acl
		sys-fs/e2fsprogs
		sys-libs/zlib
		)
	<=dev-libs/libfmt-11.1
	dev-libs/spdlog
	net-misc/curl
	python? ( ${PYTHON_DEPS} )
"
# conflict to micromamba from benzene-overlay
RDEPEND="${DEPEND}
	!dev-util/micromamba
"
BDEPEND="
	python? (
		${PYTHON_DEPS}
		${DISTUTILS_DEPS}
		$(python_gen_cond_dep 'dev-python/pybind11[${PYTHON_USEDEP}]')
		$(python_gen_cond_dep 'dev-python/scikit-build[${PYTHON_USEDEP}]')
	)
"

PATCHES=(
	"${FILESDIR}/mamba-sh.patch"
)

src_prepare() {
	cmake_src_prepare
	use python && {
		sed -i \
			"s|\${CMAKE_CURRENT_BINARY_DIR}|${D}/\${CMAKE_INSTALL_PREFIX}\/$(python_get_sitedir | sed -e 's|/usr/||')|" \
			libmambapy/CMakeLists.txt || die
		pushd libmambapy || die
		distutils-r1_src_prepare
	}
}

src_configure() {
	cat >"${T}"/zstdConfig.cmake <<-EOF || die
		add_library(zstd::libzstd_shared SHARED IMPORTED)
		set_target_properties(zstd::libzstd_shared PROPERTIES
			IMPORTED_LOCATION "${EPREFIX}/usr/$(get_libdir)/libzstd$(get_libname)")
	EOF
	local mycmakeargs=(
		-DCMAKE_BUILD_TYPE=Release
		-DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr"
		-DCMAKE_POSITION_INDEPENDENT_CODE=ON
		-DBUILD_MAMBA=$(usex mamba)
		-DBUILD_LIBMAMBA=ON
		-DBUILD_LIBMAMBAPY=$(usex python)
		-DBUILD_LIBMAMBA_TESTS=NO
		-DBUILD_MAMBA_PACKAGE=OFF
		-DBUILD_MICROMAMBA=OFF
		-DBUILD_SHARED=ON
		-DBUILD_STATIC=OFF
		-Dzstd_DIR="${T}"
	)
	cmake_src_configure
}

src_compile() {
	cmake_src_compile
	if use python; then
		cmake --install "${BUILD_DIR}" --prefix "${T}"
		cd libmambapy || die
		export SKBUILD_CONFIGURE_OPTIONS="\
		-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
		-DBUILD_LIBMAMBA=ON \
		-DBUILD_LIBMAMBAPY=ON \
		-DBUILD_MICROMAMBA=OFF \
		-DBUILD_MAMBA_PACKAGE=OFF \
		-Dlibmamba_ROOT=${T}"
		distutils-r1_src_compile
	fi
}

src_install() {
	cmake_src_install
	if use python; then
		cd libmambapy || die
		distutils-r1_src_install
	fi
	if use mamba; then
		insinto /usr/etc/profile.d
		doins "${BUILD_DIR}/micromamba/etc/profile.d/mamba.sh"
	fi
}