# 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 ' \ 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 }