# Copyright 2024 NymphOS Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit flag-o-matic

DESCRIPTION="Reference frontend for libretro-based emulators"
HOMEPAGE="https://www.retroarch.com/"
if [[ "${PV}" = 9999 ]]; then
	inherit git-r3
	EGIT_REPO_URI="https://github.com/libretro/RetroArch"
else
	SRC_URI="https://github.com/libretro/RetroArch/archive/v${PV}.tar.gz -> ${P}.tar.gz"
	KEYWORDS="amd64"
	S="${WORKDIR}/RetroArch-${PV}"
fi

LICENSE="GPL-3+"
SLOT="0"
IUSE="alsa +cdrom cg cpu_flags_x86_sse2 dbus drm egl ffmpeg flac gles2 gles3 gles3_1 gles3_2 jack kms libass libcaca libusb +network openal +opengl +opengl_core osmesa parport pulseaudio qt5 sdl sdl2 sixel ssl systemd tinyalsa +truetype +udev v4l2 vulkan wayland X xrandr xinerama xv +zlib"

REQUIRED_USE="
	|| ( alsa jack pulseaudio )
	|| ( opengl vulkan sdl sdl2 libcaca sixel )
	|| ( X wayland drm kms )
	?? ( gles2 cg )
	?? ( sdl sdl2 )
	cg? ( opengl )
	egl? ( opengl )
	gles2? ( egl )
	gles3? ( gles2 )
	gles3_1? ( gles3 )
	gles3_2? ( gles3_1 )
	kms? ( drm egl )
	libass? ( ffmpeg )
	opengl_core? ( opengl )
	osmesa? ( opengl )
	ssl? ( network )
	xinerama? ( X )
	xrandr? ( X )
	xv? ( X )"

RDEPEND="
	alsa? ( media-libs/alsa-lib )
	cg? ( media-gfx/nvidia-cg-toolkit )
	drm? ( x11-libs/libdrm )
	ffmpeg? ( media-video/ffmpeg:= )
	flac? ( media-libs/flac )
	jack? ( virtual/jack )
	libass? ( media-libs/libass:= )
	libcaca? ( media-libs/libcaca )
	libusb? ( virtual/libusb:= )
	openal? ( media-libs/openal )
	opengl? ( media-libs/mesa[gles2?] )
	osmesa? ( media-libs/mesa[osmesa] )
	pulseaudio? ( media-sound/pulseaudio )
	qt5? (
		dev-qt/qtconcurrent:5
		dev-qt/qtcore:5
		dev-qt/qtgui:5
		dev-qt/qtnetwork:5
		dev-qt/qtwidgets:5
	)
	sdl? ( media-libs/libsdl )
	sdl2? ( media-libs/libsdl2 )
	sixel? ( media-libs/libsixel )
	ssl? ( net-libs/mbedtls )
	systemd? ( sys-apps/systemd )
	truetype? ( media-libs/freetype:2= )
	udev? ( virtual/udev )
	v4l2? ( media-libs/libv4l:= )
	vulkan? ( media-libs/vulkan-loader[X?,wayland?] )
	wayland? ( dev-libs/wayland )
	X? (
		x11-libs/libX11
		x11-libs/libXext
		x11-libs/libXxf86vm
		x11-libs/libxcb
	)
	xrandr? ( x11-libs/libXrandr )
	xinerama? ( x11-libs/libXinerama )
	xv? ( x11-libs/libXv )
	zlib? ( sys-libs/zlib:= )"
DEPEND="${RDEPEND}
	virtual/pkgconfig
	vulkan? ( dev-util/vulkan-headers )"

PATCHES=( "${FILESDIR}/${PN}-configure-params.patch" )

src_configure() {
	if use cg; then
		append-ldflags -L/opt/nvidia-cg-toolkit/"$(get_libdir)"
		append-cppflags -I/opt/nvidia-cg-toolkit/include
	fi

	econf \
		--enable-mmap \
		--enable-threads \
		--disable-audioio \
		--disable-builtinflac \
		--disable-builtinmbedtls \
		--disable-builtinzlib \
		--disable-coreaudio \
		--disable-mpv \
		--disable-oss \
		--disable-roar \
		--disable-rsound \
		--disable-vg \
		--disable-videocore \
		"$(use_enable alsa)" \
		"$(use_enable cdrom)" \
		"$(use_enable cg)" \
		"$(use_enable cpu_flags_x86_sse2 sse)" \
		"$(use_enable dbus)" \
		"$(use_enable drm plain_drm)" \
		"$(use_enable egl)" \
		"$(use_enable ffmpeg)" \
		"$(use_enable flac)" \
		"$(use_enable gles2 opengles)" \
		"$(use_enable gles3 opengles3)" \
		"$(use_enable gles3_1 opengles3_1)" \
		"$(use_enable gles3_2 opengles3_2)" \
		"$(use_enable jack)" \
		"$(use_enable kms)" \
		"$(use_enable libass ssa)" \
		"$(use_enable libcaca caca)" \
		"$(use_enable libusb)" \
		"$(use_enable network networking)" \
		"$(use_enable openal al)" \
		"$(use_enable opengl)" \
		"$(use_enable opengl_core)" \
		"$(use_enable osmesa)" \
		"$(use_enable parport)" \
		"$(use_enable pulseaudio pulse)" \
		"$(use_enable qt5 qt)" \
		"$(use_enable sdl)" \
		"$(use_enable sdl2)" \
		"$(use_enable sixel)" \
		"$(use_enable ssl)" \
		"$(use_enable systemd)" \
		"$(use_enable tinyalsa)" \
		"$(use_enable truetype freetype)" \
		"$(use_enable udev)" \
		"$(use_enable v4l2)" \
		"$(use_enable vulkan)" \
		"$(use_enable wayland)" \
		"$(use_enable xinerama)" \
		"$(use_enable xrandr)" \
		"$(use_enable xv xvideo)" \
		"$(use_enable X x11)" \
		"$(use_enable zlib)"
}