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

EAPI=7
inherit autotools flag-o-matic toolchain-funcs

DESCRIPTION="NX compression technology core libraries"
HOMEPAGE="https://github.com/ArcticaProject/nx-libs"
SRC_URI="https://github.com/ArcticaProject/nx-libs/archive/${PV}.tar.gz -> nx-libs-${PV}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="amd64 ~arm64 ~ppc ~riscv x86"
IUSE="selinux"

RDEPEND="dev-libs/libxml2
	media-libs/libjpeg-turbo:*
	>=media-libs/libpng-1.2.8:0=
	>=sys-libs/zlib-1.2.3
	x11-libs/libX11
	x11-libs/libXcomposite
	x11-libs/libXdamage
	x11-libs/libXdmcp
	x11-libs/libXext
	x11-libs/libXfixes
	x11-libs/libXfont2
	x11-libs/libXinerama
	x11-libs/libXpm
	x11-libs/libXrandr
	x11-libs/libXrender
	x11-libs/libXtst
	x11-libs/pixman"

DEPEND="${RDEPEND}
	x11-base/xorg-proto
	x11-libs/libfontenc"

BDEPEND="virtual/pkgconfig
	x11-misc/gccmakedep
	x11-misc/imake"

RDEPEND+=" selinux? ( sec-policy/selinux-nx )"

S="${WORKDIR}/nx-libs-${PV}"

PATCHES=(
	# https://github.com/ArcticaProject/nx-libs/pull/1012
	"${FILESDIR}/${PN}-3.5.99.26-binutils-2.36.patch"
	# https://github.com/ArcticaProject/nx-libs/pull/1023
	"${FILESDIR}/${PN}-3.5.99.26-riscv64-support.patch"
	"${FILESDIR}/${PN}-3.5.99.26-musl.patch"
	"${FILESDIR}/${PN}-3.5.99.26-which.patch"
)

src_prepare() {
	default

	# We want predictable behavior. So let's assume we never
	# have quilt installed.
	sed 's@which quilt@false@' -i mesa-quilt || die

	# Do not compress man pages by default
	sed '/^[[:space:]]*gzip.*man/d' -i Makefile || die

	# run autoreconf in all needed folders
	local subdir
	for subdir in nxcomp nxdialog nx-X11/lib nxcompshad nxproxy ; do
		pushd ${subdir} || die
		eautoreconf
		popd || die
	done
}

src_configure() {
	# -Werror=strict-aliasing
	# https://bugs.gentoo.org/861680
	#
	# inherited from libX11 vendored code. libX11 passes this flag already.
	append-flags -fno-strict-aliasing
	filter-lto

	# From xorg-x11-6.9.0-r3.ebuild
	pushd nx-X11 || die
	HOSTCONF="config/cf/host.def"
	echo "#define CcCmd $(tc-getCC)" >> ${HOSTCONF}
	echo "#define OptimizedCDebugFlags ${CFLAGS} GccAliasingArgs" >> ${HOSTCONF}
	echo "#define OptimizedCplusplusDebugFlags ${CXXFLAGS} GccAliasingArgs" >> ${HOSTCONF}
	# Respect LDFLAGS
	echo "#define ExtraLoadFlags ${LDFLAGS}" >> ${HOSTCONF}
	echo "#define SharedLibraryLoadFlags -shared ${LDFLAGS}" >> ${HOSTCONF}
	# Disable SunRPC, #370767
	echo "#define HasSecureRPC NO" >> ${HOSTCONF}
	popd || die

	local subdir
	for subdir in nxcomp nxdialog nxcompshad nxproxy ; do
		pushd ${subdir} || die
		econf
		popd || die
	done

	pushd "nx-X11/lib" || die
	econf --disable-poll
	popd || die
}

src_compile() {
	# First set up the build environment
	emake build-env

	# We replicate the "build-full" make target here because
	# we cannot call "make build-full" as it
	#  - calls autoreconf several times
	#  - invokes make directly but we prefer our emake

	emake -C nxcomp
	emake -C nx-X11/lib

	mkdir -p nx-X11/exports/lib/ || die
	local nxlib
	for nxlib in libNX_X11.so{,.6{,.3.0}} ; do
		ln -s ../../lib/src/.libs/${nxlib} nx-X11/exports/lib/${nxlib} || die
	done

	emake -C nxcompshad

	./mesa-quilt push -a || die

	emake -C nx-X11 BuildDependsOnly
	# Parallel make issue resurfaced, upstream working on autotools switch
	emake -j1 -C nx-X11 World \
		USRLIBDIR="${EPREFIX}/usr/$(get_libdir)/${PN}/X11" \
		SHLIBDIR="${EPREFIX}/usr/$(get_libdir)" \
		ETCDIR_NX="${EPREFIX}/etc/nxagent"

	emake -C nxproxy
}

src_install() {
	emake \
		DESTDIR="${D}" \
		PREFIX="${EPREFIX}/usr" \
		NXLIBDIR="${EPREFIX}/usr/$(get_libdir)/${PN}" \
		SHLIBDIR="${EPREFIX}/usr/$(get_libdir)" \
		USRLIBDIR="${EPREFIX}/usr/$(get_libdir)/${PN}/X11" \
		ETCDIR_NX="${EPREFIX}/etc/nxagent" \
		install

	# Already provided by mesa & related packages
	rm -r "${ED}"/usr/include/GL || die

	# Get rid of libtool files and static libs.
	find "${ED}" \( -name "*.a" -o -name "*.la" \) -delete || die
}