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

EAPI=7
inherit autotools

LTRACE_V=${PV/_p*/}
DB_V=${PV/*_p/}

DESCRIPTION="trace library calls made at runtime"
HOMEPAGE="https://gitlab.com/cespedes/ltrace"
SRC_URI="
	mirror://debian/pool/main/l/${PN}/${PN}_${LTRACE_V}.orig.tar.bz2
	mirror://debian/pool/main/l/${PN}/${PN}_${LTRACE_V}-${DB_V}.debian.tar.gz
"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="*"
IUSE="debug selinux test unwind"

RDEPEND="virtual/libelf:=
	selinux? ( sys-libs/libselinux )
	unwind? ( sys-libs/libunwind:= )"
DEPEND="${RDEPEND}
	sys-libs/binutils-libs
	test? ( dev-util/dejagnu )"

# under musl tests need major work upstream, half of them does not work.
RESTRICT="
	!test? ( test )
	elibc_musl? ( test )
"

S=${WORKDIR}/${PN}-${LTRACE_V}

PATCHES=(
	"${FILESDIR}"/${PN}-0.7.3-test-protos.patch #bug 421649
	"${FILESDIR}"/${PN}-0.7.3-alpha-protos.patch
	"${FILESDIR}"/${PN}-0.7.3-ia64.patch
	"${FILESDIR}"/${PN}-0.7.3-print-test-pie.patch
	"${FILESDIR}"/${PN}-0.7.3-ia64-pid_t.patch
	"${FILESDIR}"/${PN}-0.7.3-musl-host.patch #713428
	"${FILESDIR}"/${PN}-0.7.3-no-error.h.patch #713428
	"${FILESDIR}"/${PN}-0.7.3-no-error.h-2.patch #713428
	"${FILESDIR}"/${PN}-0.7.3-no-REG_NOERROR.patch #713428
	"${FILESDIR}"/${PN}-0.7.3-pid_t.patch #713428
	"${FILESDIR}"/${PN}-0.7.3-tuple-tests.patch
	"${FILESDIR}"/${PN}-0.7.3-CXX-for-tests.patch
)

src_prepare() {
	eapply "${WORKDIR}"/debian/patches/[0-9]*

	default

	sed -i '/^dist_doc_DATA/d' Makefile.am || die
	eautoreconf
}

src_configure() {
	ac_cv_header_selinux_selinux_h=$(usex selinux) \
	ac_cv_lib_selinux_security_get_boolean_active=$(usex selinux) \
	econf \
		--disable-werror \
		$(use_enable debug) \
		$(use_with unwind libunwind)
}
