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

EAPI=7

MY_DOC="userg_revQ"
inherit autotools desktop flag-o-matic

# HINTS:
# -> non-free modules are x86 and amd64 only
# -> iscan frontend needs non-free modules
# -> sane-epkowa should be usable on every arch
# -> ${P}-${SRC_REV}.tar.gz    (for gcc 3.2/3.3)
# -> ${P}-${SRC_REV}.c2.tar.gz (for gcc 3.4 or later)

# FIXME:
# iscan doesn't compile w/o libusb, this should be fixed somehow.

# TODO:
# (re)add closed-source binary modules which are needed for some scanners.

DESCRIPTION="EPSON Image Scan! for Linux (including sane-epkowa backend)"
HOMEPAGE="http://download.ebz.epson.net/dsc/search/01/search/?OSC=LX"
SRC_URI="http://support.epson.net/linux/src/scanner/iscan/${PN}_$(ver_rs 3 -).tar.gz
	doc? (
		https://dev.gentoo.org/~flameeyes/avasys/${MY_DOC}_e.pdf
		l10n_ja? ( https://dev.gentoo.org/~flameeyes/avasys/${MY_DOC}_j.pdf )
	)"

LICENSE="GPL-2 AVASYS"
SLOT="0"
KEYWORDS="amd64 x86"
IUSE="doc gimp l10n_ja nls X"

REQUIRED_USE="gimp? ( X )"

DEPEND="
	dev-libs/libxml2:2
	media-gfx/sane-backends
	virtual/libusb:1
	virtual/udev
	gimp? ( media-gfx/gimp:0/2 )
	X? (
		dev-libs/glib:2
		media-libs/libjpeg-turbo:=
		media-libs/libpng:=
		media-libs/tiff:=
		x11-libs/gtk+:2
	)
"
RDEPEND="${DEPEND}
	media-gfx/iscan-data
"
BDEPEND="
	virtual/pkgconfig
	nls? ( sys-devel/gettext )
"
# Upstream ships broken sanity test
RESTRICT="test"

S="${WORKDIR}/${PN}-$(ver_cut 1-3)"

DOCS=( AUTHORS NEWS README )

PATCHES=(
	"${FILESDIR}"/iscan-2.29.1-drop-ltdl.patch
	"${FILESDIR}"/iscan-2.28.1.3+libpng-1.5.patch
	"${FILESDIR}"/iscan-2.29.1-png-libs.patch
	"${FILESDIR}"/iscan-2.30.1-fix-g++-test.patch
	"${FILESDIR}"/iscan-2.30.1.1-gcc6.patch
	"${FILESDIR}"/iscan-2.30.3.1-fix-x86-unknown-types.patch
	"${FILESDIR}"/iscan-2.30.4.2-sscanf.patch
	"${FILESDIR}"/iscan-2.30.4.2-c99.patch
)

QA_PRESTRIPPED="usr/lib.*/libesmod.so.*"
QA_TEXTRELS="${QA_PRESTRIPPED}"
QA_FLAGS_IGNORED="${QA_PRESTRIPPED}"

src_prepare() {
	default

	if ! use X; then
		sed -i -e "s:PKG_CHECK_MODULES(GTK,.*):AC_DEFINE([HAVE_GTK_2], 0):g" \
			-e "s:\(PKG_CHECK_MODULES(GDK_IMLIB,.*)\):#\1:g" configure.ac || die
	fi

	eautoreconf
}

src_configure() {
	append-cppflags -D_GNU_SOURCE	# needed for 'strndup'
	replace-flags "-O[0-9s]" "-O1"	# fix selector box bug 388073

	local myeconfargs=(
		--enable-dependency-reduction
		--disable-static
		$(use_enable nls)
		$(use_enable gimp)
		$(use_enable X frontend)
		$(use_enable X jpeg)
		$(use_enable X png)
		$(use_enable X tiff)
	)
	econf "${myeconfargs[@]}"
}

src_install() {
	use l10n_ja && DOCS+=( {NEWS,README}.ja )
	use doc && DOCS+=( "${DISTDIR}/${MY_DOC}_$(usex l10n_ja j e).pdf" )
	default

	# install sane config
	insinto /etc/sane.d
	doins backend/epkowa.conf

	# link iscan so it is seen as a plugin in gimp
	local gimpplugindir
	local gimptool
	if use gimp; then
		for gimptool in gimptool gimptool-2.0; do
			if [[ -x /usr/bin/${gimptool} ]]; then
				einfo "Setting plugin link for GIMP version     $(/usr/bin/${gimptool} --version)"
				gimpplugindir=$(/usr/bin/${gimptool} --gimpplugindir)/plug-ins
				break
			fi
		done
		if [[ "/plug-ins" != "${gimpplugindir}" ]]; then
			dodir ${gimpplugindir}
			dosym ../../../../bin/iscan "${gimpplugindir}"/iscan
		else
			ewarn "No idea where to find the gimp plugin directory"
		fi
	fi

	use X && make_desktop_entry iscan "Image Scan! for Linux ${PV}" scanner
}

pkg_postinst() {
	local DLL_CONF="${EPREFIX}/etc/sane.d/dll.conf"
	local EPKOWA_CONF="${EPREFIX}/etc/sane.d/epkowa.conf"

	if grep -q "^[ \t]*\<epkowa\>" ${DLL_CONF}; then
		elog "Please edit ${EPKOWA_CONF} to suit your needs."
	elif grep -q "\<epkowa\>" ${DLL_CONF}; then
		elog "Hint: to enable the backend, add 'epkowa' to ${DLL_CONF}"
		elog "Then edit ${EPKOWA_CONF} to suit your needs."
	else
		echo "epkowa" >> ${DLL_CONF} || die
		elog "A new entry 'epkowa' was added to ${DLL_CONF}"
		elog "Please edit ${EPKOWA_CONF} to suit your needs."
	fi
}