# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2

EAPI=7

inherit meson cros-fuzzer cros-sanitizers

DESCRIPTION="eSCL and WSD SANE backend"
HOMEPAGE="https://github.com/alexpevzner/sane-airscan"
LICENSE="GPL-2"
SLOT="0/${PVR}"
KEYWORDS="*"
IUSE="asan fuzzer"

COMMON_DEPEND="
	dev-libs/libxml2:=
	media-gfx/sane-backends:=
	media-libs/libjpeg-turbo:=
	media-libs/libpng:=
	net-dns/avahi:=
	net-libs/libsoup:=
"
DEPEND="${COMMON_DEPEND}"
RDEPEND="${COMMON_DEPEND}"

# SHA-1 or tag will both work.
GIT_REF="${PV}"
SRC_URI="https://github.com/alexpevzner/sane-airscan/archive/${GIT_REF}.tar.gz -> ${PN}-${GIT_REF}.tar.gz"
S="${WORKDIR}/${PN}-${GIT_REF}"

FUZZERS=(
	"fuzzer-query"
	"fuzzer-uri"
	"fuzzer-xml"
)

PATCHES=(
	"${FILESDIR}/${PN}-0.9.20-noasan.patch"
)

src_configure() {
	sanitizers-setup-env || die
	fuzzer-setup-binary || die
	meson_src_configure
}

src_compile() {
	if use fuzzer; then
		meson_src_compile "${FUZZERS[@]}"
	else
		meson_src_compile
	fi
}

src_install() {
	if ! use fuzzer; then
		dobin "${BUILD_DIR}/airscan-discover"

		exeinto "/usr/$(get_libdir)/sane"
		doexe "${BUILD_DIR}/libsane-airscan.so.1"

		insinto "/etc/sane.d"
		newins "${FILESDIR}/airscan.conf" "airscan.conf"

		insinto "/etc/sane.d/dll.d"
		newins "${S}/dll.conf" "airscan.conf"
	fi

	# Safe to call even if the fuzzer isn't built because this won't do
	# anything unless we have USE=fuzzer.
	for fuzzer in "${FUZZERS[@]}"; do
		# Rename fuzzers before install because the upstream target
		# names ended up being different from our naming scheme.
		local compat_name="airscan_${fuzzer#fuzzer-}_fuzzer"
		mv "${BUILD_DIR}/${fuzzer}" "${BUILD_DIR}/${compat_name}"
		fuzzer_install "${FILESDIR}/fuzzers.owners" \
			"${BUILD_DIR}/${compat_name}"
	done
}
