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

EAPI=7

PYTHON_COMPAT=( python3_{6..9} )
VERIFY_SIG_OPENPGP_KEY_PATH="${BROOT}"/usr/share/openpgp-keys/findutils.asc
inherit flag-o-matic python-any-r1 verify-sig

DESCRIPTION="GNU utilities for finding files"
HOMEPAGE="https://www.gnu.org/software/findutils/"
SRC_URI="mirror://gnu/${PN}/${P}.tar.xz"
SRC_URI+=" verify-sig? ( mirror://gnu/${PN}/${P}.tar.xz.sig )"

LICENSE="GPL-3+"
SLOT="0"
KEYWORDS="*"
IUSE="nls selinux static test"
RESTRICT="!test? ( test )"

RDEPEND="
	selinux? ( sys-libs/libselinux )
	nls? ( virtual/libintl )
"
DEPEND="${RDEPEND}"
BDEPEND="
	nls? ( sys-devel/gettext )
	test? (
		${PYTHON_DEPS}
		dev-util/dejagnu
	)
	verify-sig? ( sec-keys/openpgp-keys-findutils )
"

pkg_setup() {
	use test && python-any-r1_pkg_setup
}

src_prepare() {
	# Don't build or install locate because it conflicts with mlocate,
	# which is a secure version of locate.  See bug 18729
	sed \
		-e '/^SUBDIRS/s@locate@@' \
		-e '/^built_programs/s@ frcode locate updatedb@@' \
		-i Makefile.in || die

	default
}

src_configure() {
	if use static; then
		append-flags -pthread
		append-ldflags -static
	fi

	append-lfs-flags

	if [[ ${CHOST} == *-darwin* ]] ; then
		# https://lists.gnu.org/archive/html/bug-findutils/2021-01/msg00050.html
		# https://lists.gnu.org/archive/html/bug-findutils/2021-01/msg00051.html
		append-cppflags '-D__nonnull\(X\)='
	fi

	local myeconfargs=(
		--with-packager="Gentoo"
		--with-packager-version="${PVR}"
		--with-packager-bug-reports="https://bugs.gentoo.org/"
		$(use_enable nls)
		$(use_with selinux)
		--libexecdir='$(libdir)'/find
		# rename to gfind, gxargs for better BSD compatibility
		--program-prefix=g
	)
	econf "${myeconfargs[@]}"
}

src_test() {
	local -x SANDBOX_PREDICT=${SANDBOX_PREDICT}
	addpredict /
	default
}

src_compile() {
	# We don't build locate, but the docs want a file in there.
	emake -C locate dblocation.texi
	default
}

src_install() {
	default

	# symlink to the standard names
	dosym gfind /usr/bin/find
	dosym gxargs /usr/bin/xargs
	dosym gfind.1 /usr/share/man/man1/find.1
	dosym gxargs.1 /usr/share/man/man1/xargs.1
}
