# Copyright 2022 The Chromium OS Authors.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

EAPI=7

PYTHON_COMPAT=( python3_{6..9} )
DISTUTILS_USE_SETUPTOOLS=rdepend
inherit distutils-r1

DESCRIPTION="Hardware definition language for building complex digital hardware"
HOMEPAGE="https://github.com/amaranth-lang/amaranth"

GIT_REV="db49294cf722e9463666bd06f81a86f930b8707c"
SRC_URI="https://github.com/amaranth-lang/${PN}/archive/${GIT_REV}.tar.gz -> ${PN}-${GIT_REV}.tar.gz"

# Provide the version since `setuptools_scm` breaks emerging snapshot ebuilds.
# `python3 -m setuptools_scm` can be used inside a repository to print version
# corresponding to the checked-out commit.
export SETUPTOOLS_SCM_PRETEND_VERSION="0.4.dev21+gdb49294"

LICENSE="BSD-2"
SLOT="0"
KEYWORDS="*"

# Versioned setup.py deps: "pyvcd>=0.2.2,<0.4", "Jinja2~=3.0"
RDEPEND="
	$(python_gen_cond_dep '
		dev-python/importlib_metadata[${PYTHON_USEDEP}]
	' python3_{6..7})
	>=dev-python/pyvcd-0.2.2[${PYTHON_USEDEP}] <dev-python/pyvcd-0.4
	>=sci-electronics/yosys-0.10
	!sci-electronics/nmigen
"
BDEPEND="
	dev-python/setuptools_scm[${PYTHON_USEDEP}]
"

S="${WORKDIR}/${PN}-${GIT_REV}"

PATCHES=(
	"${FILESDIR}/${P}-fix-setup.patch"
)

src_test() {
	if ! has_version sci-electronics/symbiyosys; then
		ewarn "SymbiYosys not found; skipping tests that require it."
		eapply "${FILESDIR}/${P}-skip-tests-using-symbiyosys.patch"
	fi

	distutils-r1_src_test
}

# Apart from declaring `python_test`, `distutils_enable_tests` also manages test
# dependencies and flags. Let's keep it even though the function is overridden.
distutils_enable_tests unittest
python_test() {
	distutils_install_for_testing

	"${EPYTHON}" -m unittest discover -v || die "Tests fail with ${EPYTHON}"
}
