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

EAPI=8

PYTHON_COMPAT=( python3_{10..13} )

inherit cmake gnome2-utils python-single-r1 udev

DESCRIPTION="Universal Software Radio Peripheral (USRP) Hardware Driver"
HOMEPAGE="https://kb.ettus.com/Knowledge_Base"

SRC_URI="https://github.com/EttusResearch/uhd/archive/v${PV}.tar.gz -> EttusResearch-UHD-${PV}.tar.gz \
	https://github.com/EttusResearch/uhd/releases/download/v${PV}/uhd-images_${PV}.tar.xz"
#https://github.com/EttusResearch/UHD-Mirror/tags
#http://files.ettus.com/binaries/images/

S="${WORKDIR}/${P}/host"
LICENSE="GPL-3"
SLOT="0/$(ver_cut 1-3)"
KEYWORDS="~amd64 ~arm ~riscv ~x86"
IUSE="+b100 +b200 doc cpu_flags_arm_neon cpu_flags_x86_ssse3 e300 examples +mpmd octoclock test +usb +usrp1 +usrp2 +utils +x300"
RESTRICT="!test? ( test )"
REQUIRED_USE="${PYTHON_REQUIRED_USE}
			b100? ( usb )
			b200? ( usb )
			usrp1? ( usb )
			usrp2? ( usb )
			|| ( b100 b200 e300 mpmd usrp1 usrp2 x300 )"

RDEPEND="${PYTHON_DEPS}
	e300? ( virtual/udev )
	usb? ( virtual/libusb:1 )
	dev-libs/boost:=
	sys-libs/ncurses:0=
	$(python_gen_cond_dep '
	dev-python/numpy[${PYTHON_USEDEP}]
	dev-python/requests[${PYTHON_USEDEP}]
	')
"
DEPEND="${RDEPEND}"
#zip and gzip are directly used by the build system
BDEPEND="
	doc? ( app-text/doxygen )
	$(python_gen_cond_dep '
	dev-python/mako[${PYTHON_USEDEP}]
	>=dev-python/pybind11-2.7.0[${PYTHON_USEDEP}]
	')
	app-arch/unzip
	app-arch/gzip
"

src_unpack() {
	default
	mv "uhd-images_${PV}" images || die
	unpack "${FILESDIR}"/uhd-4.7.0.0-boost-1.87.patch.xz
}

src_prepare() {
	eapply "${WORKDIR}"/uhd-4.7.0.0-boost-1.87.patch
	cmake_src_prepare

	gnome2_environment_reset #534582
}

src_configure() {
	#https://gitlab.kitware.com/cmake/cmake/-/issues/23236
	#https://github.com/EttusResearch/uhd/pull/560
	local mycmakeargs=(
		-DENABLE_LIBUHD=ON
		-DENABLE_C_API=ON
		-DENABLE_MAN_PAGES=ON
		-DENABLE_MAN_PAGE_COMPRESSION=OFF
		-DENABLE_EXAMPLES="$(usex examples)"
		-DENABLE_TESTS="$(usex test)"
		-DENABLE_USB="$(usex usb)"
		-DENABLE_UTILS="$(usex utils)"
		-DENABLE_MANUAL="$(usex doc)"
		-DENABLE_DOXYGEN="$(usex doc)"
		-DENABLE_B100="$(usex b100)"
		-DENABLE_B200="$(usex b200)"
		-DENABLE_E300="$(usex e300)"
		-DENABLE_USRP1="$(usex usrp1)"
		-DENABLE_USRP2="$(usex usrp2)"
		-DENABLE_X300="$(usex x300)"
		-DENABLE_MPMD="$(usex mpmd)"
		-DENABLE_OCTOCLOCK="$(usex octoclock)"
		-DENABLE_SSSE3="$(usex cpu_flags_x86_ssse3)"
		-DNEON_SIMD_ENABLE="$(usex cpu_flags_arm_neon)"
		-DPYTHON_EXECUTABLE="${PYTHON}"
		-DPKG_DOC_DIR="${EPREFIX}/usr/share/doc/${PF}"
		-DUHD_VERSION="${PV}"
	)
	cmake_src_configure
}

src_install() {
	cmake_src_install
	python_optimize
	if use utils; then
		python_fix_shebang "${ED}"/usr/$(get_libdir)/${PN}/utils/
		if [[ "${PV}" != "9999" ]]; then
			rm -r "${ED}/usr/bin/uhd_images_downloader" || die
		fi
	fi
	# do not install test files (bug #857492)
	if use test; then
		rm "${ED}/usr/lib64/${PN}/tests" -R || die
	fi

	udev_dorules "${S}/utils/uhd-usrp.rules"

	rm -r "${WORKDIR}/images/winusb_driver" || die
	if ! use b100; then
		rm "${WORKDIR}"/images/usrp_b100* || die
	fi
	if ! use b200; then
		rm "${WORKDIR}"/images/usrp_b2[01]* || die
	fi
	if ! use e300; then
		rm "${WORKDIR}"/images/usrp_e3* || die
	fi
	if ! use mpmd; then
		rm "${WORKDIR}"/images/usrp_n310* || die
	fi
	if ! use octoclock; then
		rm "${WORKDIR}"/images/octoclock* || die
	fi
	if ! use usrp1; then
		rm "${WORKDIR}"/images/usrp1* || die
	fi
	if ! use usrp2; then
		rm "${WORKDIR}"/images/usrp2* || die
		rm "${WORKDIR}"/images/usrp_n2[01]* || die
		rm -r "${WORKDIR}"/images/bit || die
	fi
	if ! use x300; then
		rm "${WORKDIR}/"images/usrp_x3* || die
	fi
	insinto /usr/share/${PN}
	doins -r "${WORKDIR}/images"
}

pkg_postinst() {
	udev_reload
}

pkg_postrm() {
	udev_reload
}