# Copyright 2025 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 inherit cmake-multilib DESCRIPTION="Simple Direct Media Layer" HOMEPAGE="https://www.libsdl.org/" SRC_URI="https://www.libsdl.org/release/SDL3-${PV}.tar.gz" S=${WORKDIR}/SDL3-${PV} LICENSE="ZLIB" SLOT="0" KEYWORDS="~amd64" IUSE=" X alsa aqua dbus doc ibus io-uring jack kms opengl oss pipewire pulseaudio sndio static-libs test udev usb vulkan wayland cpu_flags_ppc_altivec cpu_flags_x86_avx cpu_flags_x86_avx2 cpu_flags_x86_avx512f cpu_flags_x86_mmx cpu_flags_x86_sse cpu_flags_x86_sse2 cpu_flags_x86_sse3 cpu_flags_x86_sse4_1 cpu_flags_x86_sse4_2 " REQUIRED_USE=" ibus? ( dbus ) kms? ( opengl ) wayland? ( opengl ) " RESTRICT="!test? ( test )" # dlopen/dbus-only: dbus, ibus, libudev, liburing, vulkan-loader RDEPEND=" virtual/libiconv[${MULTILIB_USEDEP}] X? ( x11-libs/libX11[${MULTILIB_USEDEP}] x11-libs/libXScrnSaver[${MULTILIB_USEDEP}] x11-libs/libXcursor[${MULTILIB_USEDEP}] x11-libs/libXext[${MULTILIB_USEDEP}] x11-libs/libXfixes[${MULTILIB_USEDEP}] x11-libs/libXi[${MULTILIB_USEDEP}] x11-libs/libXrandr[${MULTILIB_USEDEP}] ) alsa? ( media-libs/alsa-lib[${MULTILIB_USEDEP}] ) dbus? ( sys-apps/dbus[${MULTILIB_USEDEP}] ) ibus? ( app-i18n/ibus ) io-uring? ( sys-libs/liburing:=[${MULTILIB_USEDEP}] ) jack? ( virtual/jack[${MULTILIB_USEDEP}] ) kms? ( media-libs/mesa[gbm(+),${MULTILIB_USEDEP}] x11-libs/libdrm[${MULTILIB_USEDEP}] ) opengl? ( media-libs/libglvnd[X?,${MULTILIB_USEDEP}] ) pipewire? ( media-video/pipewire:=[${MULTILIB_USEDEP}] ) pulseaudio? ( media-libs/libpulse[${MULTILIB_USEDEP}] ) sndio? ( media-sound/sndio:=[${MULTILIB_USEDEP}] ) udev? ( virtual/libudev:=[${MULTILIB_USEDEP}] ) usb? ( virtual/libusb:1[${MULTILIB_USEDEP}] ) wayland? ( dev-libs/wayland[${MULTILIB_USEDEP}] gui-libs/libdecor[${MULTILIB_USEDEP}] x11-libs/libxkbcommon[${MULTILIB_USEDEP}] ) vulkan? ( media-libs/vulkan-loader[${MULTILIB_USEDEP}] ) " DEPEND=" ${RDEPEND} X? ( x11-base/xorg-proto ) test? ( dev-util/vulkan-headers media-libs/libglvnd ) vulkan? ( dev-util/vulkan-headers ) " BDEPEND=" doc? ( app-text/doxygen media-gfx/graphviz ) wayland? ( dev-util/wayland-scanner ) " src_prepare() { cmake_src_prepare # unbundle libglvnd and vulkan headers rm -r src/video/khronos || die ln -s -- "${ESYSROOT}"/usr/include src/video/khronos || die } src_configure() { local mycmakeargs=( -DSDL_ASSERTIONS=disabled -DSDL_DBUS=$(usex dbus) -DSDL_DEPS_SHARED=no # link rather than dlopen() where possible -DSDL_LIBURING=$(usex io-uring) -DSDL_RPATH=no -DSDL_STATIC=$(usex static-libs) -DSDL_TESTS=$(usex test) # audio -DSDL_ALSA=$(usex alsa) -DSDL_JACK=$(usex jack) -DSDL_OSS=$(usex oss) -DSDL_PIPEWIRE=$(usex pipewire) -DSDL_PULSEAUDIO=$(usex pulseaudio) -DSDL_SNDIO=$(usex sndio) # input -DSDL_HIDAPI_LIBUSB=$(usex usb) -DSDL_IBUS=$(use ibus) -DSDL_LIBUDEV=$(usex udev) # video -DSDL_COCOA=$(usex aqua) -DSDL_DIRECTX=no -DSDL_KMSDRM=$(usex kms) -DSDL_OPENGL=$(usex opengl) -DSDL_OPENGLES=$(usex opengl) -DSDL_OPENVR=$(usex opengl) # only dependency is libglvnd -DSDL_ROCKCHIP=no -DSDL_RPI=no -DSDL_VIVANTE=no -DSDL_VULKAN=$(usex vulkan) -DSDL_WAYLAND=$(usex wayland) -DSDL_X11=$(usex X) # SDL disallows this by default, allow it but warn in pkg_postinst $(use !X && use !wayland && echo -DSDL_UNIX_CONSOLE_BUILD=yes) # cpu instruction sets -DSDL_ALTIVEC=$(usex cpu_flags_ppc_altivec) -DSDL_AVX=$(usex cpu_flags_x86_avx) -DSDL_AVX2=$(usex cpu_flags_x86_avx2) -DSDL_AVX512F=$(usex cpu_flags_x86_avx512f) -DSDL_MMX=$(usex cpu_flags_x86_mmx) -DSDL_SSE=$(usex cpu_flags_x86_sse) -DSDL_SSE2=$(usex cpu_flags_x86_sse2) -DSDL_SSE3=$(usex cpu_flags_x86_sse3) -DSDL_SSE4_1=$(usex cpu_flags_x86_sse4_1) -DSDL_SSE4_2=$(usex cpu_flags_x86_sse4_2) ) cmake-multilib_src_configure } src_compile() { cmake-multilib_src_compile if use doc; then cd docs && doxygen || die fi } src_test() { unset "${!SDL_@}" # ignore users' preferences for tests cmake-multilib_src_test } src_install() { local DOCS=( {BUGS,WhatsNew}.txt {CREDITS,README}.md docs/*.md ) cmake-multilib_src_install rm -r -- "${ED}"/usr/share/licenses || die use doc && dodoc -r docs/output/html/ } pkg_postinst() { # skipping audio/video can make sense given many packages only use SDL # for input, but still warn given off-by-default and may be unexpected if use !X && use !aqua && use !kms && use !wayland; then ewarn ewarn "All typical display drivers (e.g. USE=wayland) are disabled," ewarn "applications using SDL for display may not function properly." fi if use !alsa && use !jack && use !oss && use !pipewire && use !pulseaudio && use !sndio; then ewarn ewarn "All typical audio drivers (e.g. USE=pipewire) are disabled," ewarn "applications using SDL for audio may not function properly." fi }