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

EAPI=8

inherit autotools desktop flag-o-matic toolchain-funcs

CANON_REL="08"
DL_ID="8/0100007658/25"
MY_PV="${PV//\./}"

DESCRIPTION="Canon UFR II / LIPSLX Printer Driver for Linux"
HOMEPAGE="https://www.canon-europe.com/support/products/imagerunner/"
SRC_URI="https://pdisp01.c-wss.com/gdl/WWUFORedirectTarget.do?id=MDEwMDAwNzY1ODM5&cmp=ABX&lang=EN -> linux-UFRII-drv-v${MY_PV}-m17n-${CANON_REL}.tar.gz"

LICENSE="Canon-UFR-II GPL-2 MIT"
SLOT="0"
KEYWORDS="-* amd64 x86"
IUSE=""

DEPEND="dev-libs/atk
	dev-libs/glib:2
	dev-libs/libxml2:2
	gnome-base/libglade:2.0
	media-libs/jbigkit
	media-libs/libjpeg-turbo
	net-print/cups
	x11-libs/cairo
	x11-libs/gdk-pixbuf:2
	x11-libs/gtk+:2
	x11-libs/gtk+:3
	x11-libs/pango"
RDEPEND="${DEPEND}
	!net-print/cndrvcups-common-lb
	!net-print/cndrvcups-lb"

HTML_DOCS=(
	"${WORKDIR}"/linux-UFRII-drv-v${MY_PV}-m17n/Documents/uk_eng/README-ufr2-${PV//0}xUK.html
	"${WORKDIR}"/linux-UFRII-drv-v${MY_PV}-m17n/Documents/uk_eng/UsersGuide-ufr2-UK.html
)

S="${WORKDIR}/linux-UFRII-drv-v${MY_PV}-m17n/Sources"

common_op() {
	local i
	for i in backend buftool cngplp cnjbig rasterfilter; do
		cd "${S}/cnrdrvcups-common-${PV}/${i}" ||
			die "failed to switch dir to ${i}"
		"${@}"
		cd "${S}" || die "failed to switch dir back from ${i} to ${S}"
	done
}

driver_op() {
	local i
	for i in cngplp cngplp/files cpca pdftocpca; do
		cd "${S}/cnrdrvcups-lb-${PV}/${i}" ||
			die "failed to switch dir to ${i}"
		"${@}"
		cd "${S}" || die "failed to switch dir back from ${i} to ${S}"
	done
}

pkg_setup() {
	QA_PREBUILT="/usr/bin/cnsetuputil2
		/usr/bin/cnrsdrvufr2
		/usr/bin/cnpkmoduleufr2r
		/usr/bin/cnpkbidir
		/usr/bin/cnpdfdrv
		/usr/$(get_libdir)/libufr2filterr.so.1.0.0
		/usr/$(get_libdir)/libColorGearCufr2.so.2.0.0
		/usr/$(get_libdir)/libcnlbcmr.so.1.0
		/usr/$(get_libdir)/libcanon_slimufr2.so.1.0.0
		/usr/$(get_libdir)/libcanonufr2r.so.1.0.0
		/usr/$(get_libdir)/libcaiowrapufr2.so.1.0.0
		/usr/$(get_libdir)/libcaiocnpkbidir.so.1.0.0
		/usr/$(get_libdir)/libcaepcmufr2.so.1.0"

	QA_SONAME="/usr/$(get_libdir)/libcaiocnpkbidir.so.1.0.0"
}

src_unpack() {
	unpack ${A}
	cd "${WORKDIR}/linux-UFRII-drv-v${MY_PV}-m17n/Sources/" || die
	unpack ./${P}-1.05.tar.xz
}

src_prepare() {
	default

	common_op mv configure.in configure.ac || die "failed to move configure.in"
	driver_op mv configure.in configure.ac || die "failed to move configure.in"

	common_op sed -i -e 's/configure.in/configure.ac/' configure.ac || die
	driver_op sed -i -e 's/configure.in/configure.ac/' configure.ac || die

	# This should work with autoreconf
	export "LIBS=-lgtk-x11-2.0 -lgobject-2.0 -lglib-2.0 -lgmodule-2.0"

	# Other components already depend on compiled product
	append-ldflags -L"${S}/cnrdrvcups-common-${PV}/buftool"

	common_op eautoreconf
	driver_op eautoreconf

	# Fix a QA issue with .desktop file,
	sed -i 's/Application;Utility/Utility/g' "${S}"/cnrdrvcups-utility-${PV}/data/cnsetuputil2.desktop ||
		die "Failed to modify cnsetuputil2.desktop file."

	append-cflags -fcommon

	# For some reason, @AR@ is defined everywhere else correctly, but not here.
	sed -i -e "s/AR = ar/AR = $(tc-getAR)/g" ./cnrdrvcups-common-${PV}/buftool/Makefile.in || die
}

src_configure() {
	common_op econf
	driver_op econf
}

src_compile() {
	common_op emake
	driver_op emake
}

src_install() {
	common_op emake DESTDIR="${D}" install COMMON_SUFFIX=2
	driver_op emake DESTDIR="${D}" install COMMON_SUFFIX=2

	insinto /usr/share/cups
	doins "${S}"/cnrdrvcups-common-${PV}/Rule/canon-laser-printer.usb-quirks

	if use amd64; then
		cd "${S}"/lib/libs64/intel/ || die "failed to switch into libs64"
	elif use x86; then
		cd "${S}"/lib/libs32/intel/ || die "failed to switch into libs32"
	else
		die "I don't know what directory to switch into!"
	fi

	dolib.so libcaepcmufr2.so.1.0 libcaiocnpkbidir.so.1.0.0 \
		libcaiowrapufr2.so.1.0.0 libcanonufr2r.so.1.0.0 \
		libcanon_slimufr2.so.1.0.0 libcnlbcmr.so.1.0 \
		libColorGearCufr2.so.2.0.0 libufr2filterr.so.1.0.0

	dosym libcaepcmufr2.so.1.0 /usr/$(get_libdir)/libcaepcmufr2.so
	dosym libcaepcmufr2.so.1.0 /usr/$(get_libdir)/libcaepcmufr2.so.1

	dosym libcaiocnpkbidir.so.1.0.0 /usr/$(get_libdir)/libcaiocnpkbidir.so
	dosym libcaiocnpkbidir.so.1.0.0 /usr/$(get_libdir)/libcaiocnpkbidir.so.1

	dosym libcaiowrapufr2.so.1.0.0 /usr/$(get_libdir)/libcaiowrapufr2.so
	dosym libcaiowrapufr2.so.1.0.0 /usr/$(get_libdir)/libcaiowrapufr2.so.1

	dosym libcanonufr2r.so.1.0.0 /usr/$(get_libdir)/libcanonufr2r.so
	dosym libcanonufr2r.so.1.0.0 /usr/$(get_libdir)/libcanonufr2r.so.1

	dosym libcanon_slimufr2.so.1.0.0 /usr/$(get_libdir)/libcanon_slimufr2.so
	dosym libcanon_slimufr2.so.1.0.0 /usr/$(get_libdir)/libcanon_slimufr2.so.1

	dosym libcnlbcmr.so.1.0 /usr/$(get_libdir)/libcnlbcmr.so
	dosym libcnlbcmr.so.1.0 /usr/$(get_libdir)/libcnlbcmr.so.1

	dosym libColorGearCufr2.so.2.0.0 /usr/$(get_libdir)/libColorGearCufr2.so
	dosym libColorGearCufr2.so.2.0.0 /usr/$(get_libdir)/libColorGearCufr2.so.2

	dosym libufr2filterr.so.1.0.0 /usr/$(get_libdir)/libufr2filterr.so
	dosym libufr2filterr.so.1.0.0 /usr/$(get_libdir)/libufr2filterr.so.1

	dobin cnpdfdrv cnpkbidir cnpkmoduleufr2r cnrsdrvufr2 cnsetuputil2

	insinto /usr/share/cnpkbidir
	doins ./cnpkbidir_info*

	insinto /usr/share/ufr2filterr
	doins ./ThLB*

	cd "${S}" || die "Failed to switch back into ${S} during installation."

	dosym ../../../$(get_libdir)/cups/backend/cnusb /usr/libexec/cups/backend/cnusb
	dosym ../../../$(get_libdir)/cups/filter/pdftocpca /usr/libexec/cups/filter/pdftocpca
	dosym ../../../$(get_libdir)/cups/filter/rastertoufr2 /usr/libexec/cups/filter/rastertoufr2

	insinto /usr/share/caepcm/ufr2
	doins -r "${S}"/lib/data/ufr2/

	insinto /usr/share/cups/model
	doins ${P}/ppd/*.ppd

	domenu ./cnrdrvcups-utility-${PV}/data/cnsetuputil2.desktop
	doicon ./cnrdrvcups-utility-${PV}/data/cnsetuputil.png

	einstalldocs
	newdoc "${S}"/cnrdrvcups-common-${PV}/README README.common
	newdoc "${S}"/cnrdrvcups-common-${PV}/cngplp/README README.cngplp.common
	newdoc "${S}"/cnrdrvcups-lb-${PV}/README README.lb
	newdoc "${S}"/cnrdrvcups-lb-${PV}/cngplp/README README.cngplp.driver

	find "${D}" -name '*.la' -type f -delete || die
}