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

EAPI=8

CMAKE_BUILD_TYPE=Release
inherit cmake elisp-common flag-o-matic

DESCRIPTION="Graphics Layout Engine"
HOMEPAGE="https://glx.sourceforge.io/ https://github.com/vlabella/GLE/"
SRC_URI="https://github.com/vlabella/GLE/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz
	https://github.com/vlabella/gle-library/archive/refs/tags/v${PV}.tar.gz -> ${PN}-library-${PV}.tar.gz
	doc? ( https://github.com/vlabella/gle-manual/archive/refs/tags/v${PV}.tar.gz -> ${PN}-manual-${PV}.tar.gz )
	emacs? ( https://dev.gentoo.org/~grozin/gle-mode.el.gz )"
S="${WORKDIR}"/GLE-${PV}/src
LICENSE="BSD GPL-2+"
SLOT="0"
KEYWORDS="~amd64"
IUSE="doc emacs gui manip"

DEPEND="app-text/ghostscript-gpl
	app-text/poppler
	dev-libs/boost
	media-libs/libpng
	media-libs/tiff
	sys-libs/zlib
	media-libs/libjpeg-turbo
	x11-libs/cairo
	x11-libs/pixman
	gui? (
		media-libs/freeglut
		media-libs/glu
		dev-qt/qtcore:5
		dev-qt/qtdbus:5
		dev-qt/qtgui:5
		dev-qt/qtnetwork:5
		dev-qt/qtopengl:5
		dev-qt/qtwidgets:5
	)
	manip? ( sys-libs/ncurses:0 )
	emacs? ( app-editors/emacs:* )"
RDEPEND="${DEPEND}
	virtual/latex-base"
BDEPEND="kde-frameworks/extra-cmake-modules
	doc? ( virtual/latex-base )"

PATCHES=( "${FILESDIR}"/install-dirs.patch "${FILESDIR}"/zstd-shared.patch "${FILESDIR}"/cmake-cmp0177.patch )
SITEFILE="64${PN}-gentoo.el"

src_configure() {
	# -Werror=odr
	# https://bugs.gentoo.org/927779
	# https://github.com/vlabella/GLE/issues/35
	filter-lto

	local mycmakeargs=(
		-DGLEDOC=share/doc/${PF}
		-DGLE_EXAMPLES_LIBRARY_PATH="${WORKDIR}"/gle-library-${PV}
		-DBUILD_GUI=$(usex gui)
		-DBUILD_MANIP=$(usex manip)
	)
	cmake_src_configure
}

src_compile() {
	cmake_src_compile
	use emacs && elisp-compile "${WORKDIR}"/*.el

	# I don't really understand why is this hack needed
	sed -e 's/|+//' -i "${BUILD_DIR}"/gle/cmake_install.cmake
}

src_install() {
	cmake_src_install
	mv "${D}"/usr/bin/gle "${D}"/usr/bin/gle.bin
	newbin "${FILESDIR}"/gle.sh gle
	if use gui; then
		mv "${D}"/usr/bin/qgle "${D}"/usr/bin/qgle.bin
		newbin "${FILESDIR}"/qgle.sh qgle
	fi
	GLE_TOP="${D}"/usr/share/${PN} "${D}"/usr/bin/gle.bin -mkinittex
	if use doc; then
		pushd "$WORKDIR"/gle-manual-${PV} > /dev/null || die "pushd gle_manual failed"
		patch -p1 < "FILESDIR"/latexmk.patch
		export GLE_TOP="${D}"/usr/share/gle
		export PATH="${D}"/usr/bin:${PATH}
		make -f Makefile.gcc GLE="${D}"/usr/bin/gle.bin
		dodoc gle-manual.pdf
		popd > /dev/null
	fi
	if use emacs; then
		elisp-install ${PN} "${WORKDIR}"/*.el "${WORKDIR}"/*.elc
		elisp-site-file-install "${FILESDIR}/${SITEFILE}"
	fi
}

pkg_postinst() {
	use emacs && elisp-site-regen
}

pkg_postrm() {
	use emacs && elisp-site-regen
}