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

EAPI=8
NEED_EMACS="27.1"

MY_PN="${PN}.el"
inherit elisp git-r3

DESCRIPTION="GNU Emacs telegram client (unofficial)"
HOMEPAGE="https://zevlg.github.io/telega.el"
EGIT_REPO_URI="https://github.com/zevlg/${MY_PN}.git"
EGIT_CLONE_TYPE="single+tags"

LICENSE="GPL-3"
SLOT="0"
KEYWORDS="~amd64 ~arm ~arm64 ~x86 ~amd64-linux ~x86-linux"
IUSE="contrib dbus doc geo org standalone stickers tray test texinfo"
REQUIRED_USE="texinfo? ( doc )"
# emerging with geo not tested
SITEFILE="50${PN}-gentoo.el"

DOCS="README.md"

BDEPEND="
	|| ( >=app-editors/emacs-29 app-emacs/transient )
	|| ( app-emacs/org app-emacs/org-mode app-editors/emacs[-minimal] )
	>=app-emacs/rainbow-identifiers-0.2.2
	>=app-emacs/visual-fill-column-1.9
	>=net-libs/tdlib-1.8.25
	dev-build/make
	virtual/pkgconfig
	doc? ( app-emacs/ellit-org
		   >=app-emacs/htmlize-1.34
		   app-emacs/alert
		   app-emacs/all-the-icons
		   >=app-emacs/compat-28.1.2.2
		   >=app-emacs/dashboard-1.8.1_pre20231201
		   app-emacs/esxml
		   texinfo? ( sys-apps/texinfo ) )
	test? ( >=dev-lang/python-3 )
	tray? ( >=dev-libs/libappindicator-3 )
"

# fixme: tray support will be built if libappindicator is installed,
# regardless of USE
RDEPEND="
	|| ( >=app-editors/emacs-29 app-emacs/transient )
	|| ( app-emacs/org app-emacs/org-mode app-editors/emacs[-minimal] )
	>=app-emacs/rainbow-identifiers-0.2.2
	>=app-emacs/visual-fill-column-1.9
	>=net-libs/tdlib-1.8.25
	contrib? ( app-emacs/alert
			   app-emacs/all-the-icons
			   app-emacs/dashboard
			   app-emacs/esxml
			   app-emacs/language-detection )
	dbus? ( app-editors/emacs[dbus] )
	geo? ( app-emacs/geo )
	standalone? ( app-emacs/company app-emacs/helm app-emacs/which-key )
	stickers? ( media-libs/tgs2png )
	tray? ( >=dev-libs/libappindicator-3 )
"

src_prepare() {

	if use doc; then
		eapply "${FILESDIR}/${PN}"-9999-fix-make-doc.patch
		eapply "${FILESDIR}/${PN}"-9999-make-doc-debug.patch
		eapply "${FILESDIR}/${PN}"-9999-fix-make-doc-org-persist.patch
		cp "${FILESDIR}"/theme-readtheorg.setup docs
		rm docs/index-0.7.2.html
		rm docs/index-release.html
		rm docs/index.html
		rm docs/telega-manual.org
		if use texinfo ; then
			cp "${FILESDIR}"/telega-make-texinfo.el docs
			eapply "${FILESDIR}/${PN}"-9999-doc.patch
		fi
	fi

	if use test; then
		eapply "${FILESDIR}/${PN}"-0.8.0-no-installs-during-test.patch
		eapply "${FILESDIR}/${PN}"-0.8.0-fix-tests-bin-path.patch
		eapply "${FILESDIR}/${PN}"-0.8.254-run-tests-Q.patch
	fi

	default
}

src_compile () {
	elisp_src_compile

	emake telega-server

	use doc && emake -j1 -C docs all && HTML_DOCS=( docs/*.html )
	use doc && use texinfo && \
		elisp-compile docs/telega-make-texinfo.el && \
		${EMACS} -batch -Q -L . -L /usr/share/emacs/site-lisp/org \
				 -l docs/telega-make-texinfo.elc \
				 --eval '(let ((debug-on-error t))
						   (telega--make-texinfo
							"docs/telega-manual.org"))' && \
		ELISP_TEXINFO=( docs/*.texi ) && makeinfo ${ELISP_TEXINFO}

	use geo || rm contrib/telega-live-location.el
	use geo && elisp-compile contrib/telega-live-location.el
	use org && elisp-compile contrib/ol-telega.el

	use contrib && elisp-compile contrib/telega-*.el
}

src_install () {
	elisp_src_install

	# todo: maybe /usr/bin better be determined indirectly by some eclass?
	emake INSTALL_PREFIX="${D}/usr/bin" -C server install

	elisp-install "${PN}" -r etc

	use geo && elisp-install "${PN}" contrib/telega-live-location.{el,elc}
	use geo && rm contrib/telega-live-location*
	use org && elisp-install org contrib/ol-telega.{el,elc}
	rm contrib/ol-telega*
	use contrib && elisp-install "${PN}" contrib/*.{el,elc}

	if use standalone ; then
		elisp-install "${PN}" "${FILESDIR}"/telega-standalone.el
		dobin "${FILESDIR}"/telega-standalone.sh
	fi
}