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

EAPI=8

inherit cmake desktop xdg

DESCRIPTION="Advanced cross-platform rhythm game focused on keyboard play"
HOMEPAGE="https://etternaonline.com"
SRC_URI="https://github.com/etternagame/etterna/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"

S="${WORKDIR}/etterna-${PV}"
LICENSE="MIT"
SLOT="0"
KEYWORDS="~amd64"
IUSE="alsa jack pulseaudio"

RDEPEND="
	!games-arcade/etterna-bin
	dev-lang/luajit
	dev-libs/openssl:=
	dev-util/glslang
	dev-util/spirv-tools
	media-libs/libglvnd
	media-libs/libogg
	media-libs/shaderc
	media-video/rtmpdump
	net-misc/curl
	x11-libs/libX11
	x11-libs/libXrandr
	alsa? ( media-libs/alsa-lib )
	jack? ( virtual/jack )
	pulseaudio? ( media-libs/libpulse )
"

DEPEND="${RDEPEND}"
BDEPEND="dev-lang/luajit virtual/pkgconfig"

src_prepare() {
	default

	# Remove non-existent glslang internal targets (bundled into libglslang.so)
	sed -i \
		-e '/MachineIndependent/d' \
		-e '/OSDependent/d' \
		-e '/GenericCodeGen/d' \
		CMakeLists.txt || die

	# Link bundled ffmpeg against system librtmp
	sed -i \
		-e '/target_link_libraries(ffmpeg INTERFACE ${LIBS})/a\target_link_libraries(ffmpeg INTERFACE -lrtmp)' \
		extern/ffmpeg/CMakeLists.txt || die

	sed -i \
		-e 's/\(set(OPENSSL_USE_STATIC_LIBS\) ON/\1 OFF/' \
		CMakeLists.txt || die

	sed -i \
		-e 's/if (ANDROID AND (\${CMAKE_SYSTEM_VERSION} LESS 21))/if (ANDROID)/' \
		extern/luajit/src/CMakeLists.txt || die

	sed -i \
		-e '1i #include <stdlib.h>' \
		extern/mad-0.15.1b/global.h || die

	# Use system luajit instead of bundled (bundled minilua fails on musl)
	sed -i \
		-e 's/^add_subdirectory(luajit)$/# &/' \
		extern/CMakeLists.txt || die

	sed -i \
		-e 's|list(APPEND LUA_TARGETS luajit libluajit minilua buildvm)|list(APPEND LUA_TARGETS libluajit)|' \
		extern/CMakeLists.txt || die

	# Remove set_property for lua targets (no longer valid with system luajit)
	sed -i \
		-e '/set_property(TARGET \${LUA_TARGETS}/d' \
		extern/CMakeLists.txt || die

	# Replace bundled libluajit with system luajit
	sed -i \
		-e 's/^target_link_libraries(Etterna PRIVATE libluajit)$/# &/' \
		CMakeLists.txt || die

	sed -i \
		-e '/# target_link_libraries(Etterna PRIVATE libluajit)/i\find_package(PkgConfig REQUIRED)\npkg_check_modules(LUAJIT REQUIRED IMPORTED_TARGET luajit)\ntarget_link_libraries(Etterna PRIVATE PkgConfig::LUAJIT)' \
		CMakeLists.txt || die

	cmake_src_prepare
}

src_configure() {
	local mycmakeargs=(
		-DWITH_CRASHPAD=OFF
		-DWITH_VULKAN_LINUX_EXTRAS=ON
	)
	cmake_src_configure
}

src_install() {
	local bin
	local dir
	bin=$(find "${S}" \
		-maxdepth 1 \
		-type f \
		-name 'Etterna*' \
		-perm -111 \
		-print -quit) || die
	[[ -n ${bin} ]] || die "Unable to locate Etterna executable"
	exeinto /opt/etterna
	newexe "${bin}" Etterna

	# Install bundled shared libraries
	insinto /opt/etterna/lib
	doins "${S}"/extern/ffmpeg/linux-lib/*.so*
	doins "${S}"/extern/discord/lib/release/*.so*

	insinto /opt/etterna
	for dir in \
		Announcers \
		Assets \
		BackgroundEffects \
		BackgroundTransitions \
		BGAnimations \
		Data \
		NoteSkins \
		Scripts \
		Songs \
		Themes
do
	cp -a "${S}/${dir}" "${T}/Default_${dir}" || die
	doins -r "${T}/Default_${dir}"
done
	dobin "${FILESDIR}/etterna"
	newicon \
		"${S}/Themes/_fallback/Graphics/Common window icon.png" \
		etterna.png
	make_desktop_entry \
		etterna \
		Etterna \
		etterna \
		"Game;ArcadeGame;"
}

pkg_postinst() {
	xdg_pkg_postinst
	elog "Etterna stores user data in ~/.etterna."
	elog "Default assets are copied from /opt/etterna"
	elog "to ~/.etterna the first time the launcher is started."
}

pkg_postrm() {
	xdg_pkg_postrm
}