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

EAPI=8

PYTHON_COMPAT=( python3_{12..14} )
BOINC_APP_OPTIONAL=1
inherit boinc-app flag-o-matic meson optfeature python-any-r1

DESCRIPTION="Program for docking ligands to proteins and nucleic acids"
HOMEPAGE="https://gitlab.com/Jukic/cmdock"
SRC_URI="https://gitlab.com/Jukic/${PN}/-/archive/v${PV}/${PN}-v${PV}.tar.bz2"
S="${WORKDIR}/${PN}-v${PV}"

LICENSE="LGPL-3 ZLIB"
SLOT="0"
KEYWORDS="~amd64"
IUSE="apidoc cpu_flags_x86_sse2 doc test"

# Flaky tests
RESTRICT="test"

RDEPEND="dev-libs/icu:="
DEPEND="
	${RDEPEND}
	dev-cpp/eigen:3
	>=dev-cpp/indicators-2.3-r1
	>=dev-cpp/pcg-cpp-0.98.1_p20210406-r1
	>=dev-libs/cxxopts-3.1[icu]
"
BDEPEND="
	apidoc? (
		app-text/doxygen
		dev-texlive/texlive-fontutils
	)
	doc? (
		$(python_gen_any_dep '
			dev-python/insipid-sphinx-theme[${PYTHON_USEDEP}]
			dev-python/sphinx[${PYTHON_USEDEP}]
		')
	)
	test? ( ${PYTHON_DEPS} )
"

PATCHES=(
	"${FILESDIR}"/${P}-include.patch
	"${FILESDIR}"/${P}-cxxopts.patch
)

DOCS=( README.md changelog.md )

BOINC_MASTER_URL="https://www.sidock.si/sidock/"
BOINC_APP_HELPTEXT=\
"The easiest way to do something useful with this application
is to attach it to SiDock@home BOINC project."

INSTALL_PREFIX="${EPREFIX}/opt/${P}"

boinc-app_add_deps --wrapper

python_check_deps() {
	use doc || return 0

	python_has_version "dev-python/sphinx[${PYTHON_USEDEP}]" &&
	python_has_version "dev-python/insipid-sphinx-theme[${PYTHON_USEDEP}]"
}

foreach_wrapper_job() {
	sed -e "s:@PREFIX@:${INSTALL_PREFIX}:g" -i "${1}" || die
}

src_prepare() {
	default
	python_fix_shebang "${S}"/bin
}

src_configure() {
	mkdir "${T}/pkg-config" || die
	export PKG_CONFIG_PATH="${T}/pkg-config${PKG_CONFIG_PATH+:${PKG_CONFIG_PATH}}"
	cat >> "${T}/pkg-config/pcg-cpp.pc" <<-EOF || die
		Name: pcg-cpp
		Version: 9999
		Description:
	EOF
	cat >> "${T}/pkg-config/icu-cu.pc" <<-EOF || die
		Name: icu-cu
		Version: 9999
		Description:
		Requires: icu-uc
	EOF

	# extremely weird directory layout
	local emesonargs=(
		--prefix="${INSTALL_PREFIX:?}"
		$(meson_use apidoc)
		$(meson_use doc)
		$(meson_use test tests)
		-Ddocdir="${EPREFIX}"/usr/share/doc/${PF}
		-Dcpp_std=c++17
	)
	meson_src_configure

	use cpu_flags_x86_sse2 || append-cppflags "-DBUNDLE_NO_SSE"
}

src_install() {
	meson_src_install
	python_optimize "${D}${INSTALL_PREFIX:?}"/bin

	if use boinc; then
		boinc_install_appinfo "${FILESDIR}"/app_info_0.2.0-r2.xml
		boinc_install_wrapper cmdock_wrapper \
			"${FILESDIR}"/sidock_job_0.2.0.xml sidock_job.xml

		# install the main executable
		exeinto "$(get_project_root)"
		exeopts --owner root --group boinc
		doexe "${D}${INSTALL_PREFIX:?}"/bin/cmdock

		# install an empty file
		insinto "$(get_project_root)"
		insopts -m 0644 --owner root --group boinc
		newins - docking_out
	fi
}

pkg_postinst() {
	optfeature "sdtether.py and sdrmsd.py scripts" "dev-python/numpy sci-chemistry/openbabel[python]"
	use boinc && boinc-app_pkg_postinst
}

pkg_postrm() {
	use boinc && boinc-app_pkg_postrm
}