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

EAPI=7

inherit multilib-minimal toolchain-funcs pam usr-ldscript

if [[ ${PV} == *9999 ]]; then
	inherit git-r3
	EGIT_REPO_URI="https://git.kernel.org/pub/scm/libs/libcap/libcap.git"
else
	SRC_URI="https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/${P}.tar.xz"

	KEYWORDS="*"
fi

DESCRIPTION="POSIX 1003.1e capabilities"
HOMEPAGE="https://sites.google.com/site/fullycapable/"

# it's available under either of the licenses
LICENSE="|| ( GPL-2 BSD )"
SLOT="0"
IUSE="pam static-libs tools"

# While the build system optionally uses gperf, we don't DEPEND on it because
# the build automatically falls back when it's unavailable.  #604802
PDEPEND="pam? ( sys-libs/pam[${MULTILIB_USEDEP}] )"
DEPEND="${PDEPEND}
	sys-kernel/linux-headers"
BDEPEND="
	sys-apps/diffutils
	tools? ( dev-lang/go )"

QA_FLAGS_IGNORED="sbin/captree" # go binaries don't use LDFLAGS

PATCHES=(
	"${FILESDIR}"/${PN}-2.62-ignore-RAISE_SETFCAP-install-failures.patch
)

src_prepare() {
	default
	multilib_copy_sources
}

run_emake() {
	local args=(
		AR="$(tc-getAR)"
		CC="$(tc-getCC)"
		OBJCOPY="$(tc-getOBJCOPY)"
		RANLIB="$(tc-getRANLIB)"
		exec_prefix="${EPREFIX}"
		lib_prefix="${EPREFIX}/usr"
		lib="$(get_libdir)"
		prefix="${EPREFIX}/usr"
		PAM_CAP="$(usex pam yes no)"
		DYNAMIC=yes
		GOLANG="$(multilib_native_usex tools yes no)"
	)
	emake "${args[@]}" "$@"
}

src_configure() {
	tc-export_build_env BUILD_CC
	multilib-minimal_src_configure
}

multilib_src_compile() {
	run_emake
}

multilib_src_test() {
	run_emake test
}

multilib_src_install() {
	# no configure, needs explicit install line #444724#c3
	run_emake DESTDIR="${D}" install

	gen_usr_ldscript -a cap
	gen_usr_ldscript -a psx
	if ! use static-libs ; then
		rm "${ED}"/usr/$(get_libdir)/lib{cap,psx}.a || die
	fi

	# install pam plugins ourselves
	rm -rf "${ED}"/usr/$(get_libdir)/security || die

	if use pam ; then
		dopammod pam_cap/pam_cap.so
		dopamsecurity '' pam_cap/capability.conf
	fi
}

multilib_src_install_all() {
	dodoc CHANGELOG README doc/capability.md
}
