Install this version:
emerge -a =games-arcade/etterna-0.75.0
If this version is masked, you can unmask it using the autounmask tool or standard emerge options:
autounmask =games-arcade/etterna-0.75.0
Or alternatively:
emerge --autounmask-write -a =games-arcade/etterna-0.75.0
| Version | EAPI | Keywords | Slot |
|---|---|---|---|
| 0.75.0 | 8 | ~amd64 | 0 |
# 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
local f
for f in "${S}"/extern/ffmpeg/linux-lib/*.so*; do
[[ -f ${f} ]] && doins "${f}"
done
for f in "${S}"/extern/discord/lib/release/*.so; do
[[ -f ${f} ]] && doins "${f}"
done
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
}
Manage flags for this package:
euse -i <flag> -p games-arcade/etterna |
euse -E <flag> -p games-arcade/etterna |
euse -D <flag> -p games-arcade/etterna
!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 )
!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 )
dev-lang/luajit virtual/pkgconfig
| Type | File | Size | Source URLs |
|---|---|---|---|
| DIST | etterna-0.75.0.tar.gz | 187678780 bytes | https://github.com/etternagame/etterna/archive/refs/tags/v0.75.0.tar.gz |