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

EAPI=8

inherit flag-o-matic multilib-minimal toolchain-funcs

DESCRIPTION="Extremely fast non-cryptographic hash algorithm"
HOMEPAGE="https://xxhash.com/"
SRC_URI="https://github.com/Cyan4973/xxHash/archive/v${PV}.tar.gz -> ${P}.tar.gz"
S=${WORKDIR}/xxHash-${PV}

LICENSE="BSD-2 GPL-2+"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos ~x64-solaris"

src_prepare() {
	default

	multilib_copy_sources
}

src_configure() {
	# Needed for -Og to be buildable, otherwise fails a/ always_inline (bug #961093)
	# https://github.com/Cyan4973/xxHash?tab=readme-ov-file#binary-size-control
	is-flagq '-Og' && append-cppflags -DXXH_NO_INLINE_HINTS
	multilib-minimal_src_configure
}

myemake() {
	# need LIBDIR set during compile too for Darwin, bug #966267
	emake \
		AR="$(tc-getAR)" \
		CC="$(tc-getCC)" \
		PREFIX="${EPREFIX}"/usr \
		LIBDIR="${EPREFIX}"/usr/$(get_libdir) \
		MANDIR='$(man1dir)' \
		"${@}"
}

multilib_src_compile() {
	myemake
}

multilib_src_test() {
	# Injecting CPPFLAGS into CFLAGS is needed for test_sanity
	myemake CFLAGS="${CPPFLAGS} ${CFLAGS}" check
}

multilib_src_install() {
	myemake DESTDIR="${D}" install
	einstalldocs

	rm "${ED}"/usr/$(get_libdir)/libxxhash.a || die
}