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

EAPI=7

VERIFY_SIG_OPENPGP_KEY_PATH="${BROOT}"/usr/share/openpgp-keys/grep.asc
inherit flag-o-matic verify-sig

DESCRIPTION="GNU regular expression matcher"
HOMEPAGE="https://www.gnu.org/software/grep/"

if [[ ${PV} == *_p* ]] ; then
	# Subscribe to the 'platform-testers' ML to find these.
	# Useful to test on our especially more niche arches and report issues upstream.
	MY_COMMIT="35-c860"
	MY_P=${PN}-$(ver_cut 1-2).${MY_COMMIT}
	SRC_URI="https://meyering.net/${PN}/${MY_P}.tar.xz"
	SRC_URI+=" verify-sig? ( https://meyering.net/${PN}/${MY_P}.tar.xz.sig )"
	S="${WORKDIR}"/${MY_P}
else
	SRC_URI="mirror://gnu/${PN}/${P}.tar.xz"
	SRC_URI+=" verify-sig? ( mirror://gnu/${PN}/${P}.tar.xz.sig )"
	KEYWORDS="*"
fi

LICENSE="GPL-3+"
SLOT="0"
IUSE="+egrep-fgrep nls pcre static"

# We lack dev-libs/libsigsegv[static-libs] for now
REQUIRED_USE="static? ( !sparc )"

LIB_DEPEND="
	pcre? ( >=dev-libs/libpcre2-7.8-r1[static-libs(+)] )
	sparc? ( dev-libs/libsigsegv )
"
RDEPEND="
	!static? ( ${LIB_DEPEND//\[static-libs(+)]} )
	nls? ( virtual/libintl )
	virtual/libiconv
"
DEPEND="
	${RDEPEND}
	static? ( ${LIB_DEPEND} )
"
BDEPEND="
	virtual/pkgconfig
	nls? ( sys-devel/gettext )
	verify-sig? ( sec-keys/openpgp-keys-grep )
"

DOCS=( AUTHORS ChangeLog NEWS README THANKS TODO )

QA_CONFIG_IMPL_DECL_SKIP=(
	# Either gnulib FPs or fixed in newer autoconf, not worth autoreconf here for now?
	MIN
	alignof
	static_assert
)

src_prepare() {
	default

	# bug #523898
	sed -i \
		-e "s:@SHELL@:${EPREFIX}/bin/sh:g" \
		-e "s:@grep@:${EPREFIX}/bin/grep:" \
		src/egrep.sh || die
}

src_configure() {
	use static && append-ldflags -static

	# We used to turn this off unconditionally (bug #673524) but we now
	# allow it for cases where libsigsegv is better for userspace handling
	# of stack overflows.
	# In particular, it's necessary for sparc: bug #768135
	export ac_cv_libsigsegv=$(usex sparc)

	local myeconfargs=(
		--bindir="${EPREFIX}"/bin
		$(use_enable nls)
		$(use_enable pcre perl-regexp)
	)

	econf "${myeconfargs[@]}"
}

src_install() {
	default

	if use egrep-fgrep ; then
		# Delete the upstream wrapper variants which warn on egrep+fgrep use
		rm "${ED}"/bin/{egrep,fgrep} || die

		into /
		# Install egrep, fgrep which don't warn.
		#
		# We do this by default to avoid breakage in old scripts
		# and such which don't expect unexpected output on stderr,
		# we've had examples of builds failing because foo-config
		# starts returning a warning.
		#
		# https://lists.gnu.org/archive/html/bug-grep/2022-10/msg00000.html
		newbin - egrep <<-EOF
		#!/usr/bin/env sh
		exec "${EPREFIX}/bin/grep" -E "\$@"
		EOF

		newbin - fgrep <<-EOF
		#!/usr/bin/env sh
		exec "${EPREFIX}/bin/grep" -F "\$@"
		EOF
	fi
}
