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

EAPI=8

inherit rpm udev

MY_PV="${PV/_p/-}"

DESCRIPTION="SANE driver for Brother scanners (brscan5)"
HOMEPAGE="https://support.brother.com"
SRC_URI="https://download.brother.com/welcome/dlf104036/${PN}-${MY_PV}.x86_64.rpm"

LICENSE="Brother-EULA"
SLOT="0"
KEYWORDS="~amd64"
IUSE=""

RESTRICT="strip mirror"
QA_PREBUILT="*"

RDEPEND="
	media-gfx/sane-backends
	net-dns/avahi[dbus]
	virtual/libusb:1
"
DEPEND="${RDEPEND}"

S="${WORKDIR}"

src_unpack() {
	rpm_unpack ${A}
}

src_install() {
	local lib
	local libs=(
		libLxBsScanCoreApi.so.3.2.6
		libLxBsNetDevAccs.so.1.0.0
		libLxBsDeviceAccs.so.1.0.0
		libLxBsUsbDevAccs.so.1.0.0
	)
	local bins=(
		brsaneconfig5
		brscan_cnetconfig
		brscan_gnetconfig
		setupSaneScan5
	)

	# 1. Install core shared libraries and create SONAME symlinks in /usr/lib64
	for lib in "${libs[@]}"; do
		dolib.so "opt/brother/scanner/brscan5/${lib}"

		# Extract base name (libX.so) and major version (e.g., 3 or 1)
		local base="${lib%%.so.*}.so"
		local ver="${lib#*.so.}"
		local major="${ver%%.*}"

		# Creates symlinks: libLxBsScanCoreApi.so.3.2.6 -> libLxBsScanCoreApi.so.3 -> libLxBsScanCoreApi.so
		dosym "${lib}" "/usr/lib64/${base}.${major}"
		dosym "${base}.${major}" "/usr/lib64/${base}"
	done

	# 2. Install SANE backend library and its version symlinks
	exeinto /usr/lib64/sane
	doexe opt/brother/scanner/brscan5/libsane-brother5.so.1.0.7
	dosym libsane-brother5.so.1.0.7 /usr/lib64/sane/libsane-brother5.so.1
	dosym libsane-brother5.so.1 /usr/lib64/sane/libsane-brother5.so

	# 3. Enable backend in SANE configuration directory
	insinto /etc/sane.d/dll.d
	newins - brother5.conf <<< "brother5"

	# 4. Install configuration files and models (required due to hardcoded paths in binaries)
	insinto /etc/opt/brother/scanner/brscan5
	doins opt/brother/scanner/brscan5/brscan5.ini
	doins opt/brother/scanner/brscan5/brsanenetdevice.cfg

	insinto /opt/brother/scanner/brscan5/models
	doins opt/brother/scanner/brscan5/models/*

	# 5. Install binaries to /usr/bin and maintain symlinks under /opt/brother/...
	into /usr
	for bin in "${bins[@]}"; do
		dobin "opt/brother/scanner/brscan5/${bin}"
		dosym "/usr/bin/${bin}" "/opt/brother/scanner/brscan5/${bin}"
	done

	# 6. Install udev rules
	if [[ -d "opt/brother/scanner/brscan5/udev-rules" ]]; then
		local rule_file
		rule_file=$(ls opt/brother/scanner/brscan5/udev-rules/*.rules 2>/dev/null | head -n1)
		if [[ -n "${rule_file}" ]]; then
			sed -i -e '/SYSFS/d' -e 's/SYSFS/ATTR/g' "${rule_file}" || die
			udev_newrules "${rule_file}" 40-${PN}.rules
		fi
	fi
}