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

EAPI=7

# shellcheck disable=SC2034
QA_PKGCONFIG_VERSION="$(ver_cut 1-3)"

inherit autotools multilib-minimal libtool flag-o-matic

MY_P="${P/_rc/rc}"
DESCRIPTION="Tag Image File Format (TIFF) library"
HOMEPAGE="http://libtiff.maptools.org"
SRC_URI="https://download.osgeo.org/libtiff/${MY_P}.tar.xz"
S="${WORKDIR}/${PN}-$(ver_cut 1-3)"

LICENSE="libtiff"
SLOT="0"
if [[ ${PV} != *_rc* ]] ; then
	KEYWORDS="*"
fi
IUSE="cros_host +cxx jbig jpeg lzma static-libs test webp zlib zstd"
RESTRICT="!test? ( test )"

# bug #483132
REQUIRED_USE="test? ( jpeg )"

RDEPEND="jbig? ( >=media-libs/jbigkit-2.1:=[${MULTILIB_USEDEP}] )
	jpeg? ( media-libs/libjpeg-turbo:=[${MULTILIB_USEDEP}] )
	lzma? ( >=app-arch/xz-utils-5.0.5-r1[${MULTILIB_USEDEP}] )
	webp? ( media-libs/libwebp:=[${MULTILIB_USEDEP}] )
	zlib? ( >=sys-libs/zlib-1.2.8-r1[${MULTILIB_USEDEP}] )
	zstd? ( >=app-arch/zstd-1.3.7-r1:=[${MULTILIB_USEDEP}] )"
DEPEND="${RDEPEND}"

MULTILIB_WRAPPED_HEADERS=(
	/usr/include/tiffconf.h
)

PATCHES=(
	"${FILESDIR}"/${PN}-4.5.0_rc1-skip-tools-tests-multilib.patch
	"${FILESDIR}"/${PN}-4.5.0-ChromeOS-fix-paste-error.patch
)

src_prepare() {
	default
	# ChromeOS: generate configure script since we aren't using the pre-configured tar.gz
	eautoreconf
	elibtoolize
}

multilib_src_configure() {
	append-lfs-flags

	local myeconfargs=(
		--disable-sphinx
		--without-x
		--with-docdir="${EPREFIX}"/usr/share/doc/${PF}
		$(use_enable cxx)
		$(use_enable jbig)
		$(use_enable jpeg)
		$(use_enable lzma)
		$(use_enable static-libs static)
		$(use_enable webp)
		$(use_enable zlib)
		$(use_enable zstd)
		--disable-docs
	)

	# ChromeOS: install utilities to /usr/local unless installing to the SDK.
	if ! use cros_host ; then
		myeconfargs+=( --bindir="${EPREFIX}/usr/local/bin" )
	fi

	ECONF_SOURCE="${S}" econf "${myeconfargs[@]}"

	# Remove components (like tools) that are irrelevant for the multilib
	# build which we only want libraries for.
	# TODO: upstream options to disable these properly
	if ! multilib_is_native_abi ; then
		sed -i \
			-e 's/ tools//' \
			-e 's/ contrib//' \
			-e 's/ man//' \
			-e 's/ html//' \
			Makefile || die
	fi
}

multilib_src_test() {
	if ! multilib_is_native_abi ; then
		emake -C tools
	fi

	emake check
}

multilib_src_install_all() {
	find "${ED}" -type f -name '*.la' -delete || die
	# ChromeOS: COPYRIGHT doesn't exist in the top-of-tree version of libtiff.
	rm -f "${ED}"/usr/share/doc/${PF}/{README*,RELEASE-DATE,TODO,VERSION} || die
}
