Files
nixpkgs/pkgs/by-name/sd/sdl3/package.nix
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

254 lines
7.2 KiB
Nix

{
lib,
stdenv,
config,
alsa-lib,
apple-sdk_11,
cmake,
darwinMinVersionHook,
dbus,
fetchFromGitHub,
ibusMinimal,
installShellFiles,
libGL,
libayatana-appindicator,
libdecor,
libdrm,
libjack2,
libpulseaudio,
libusb1,
libxkbcommon,
libgbm,
ninja,
nix-update-script,
nixosTests,
pipewire,
sndio,
systemdLibs,
testers,
validatePkgConfig,
vulkan-headers,
vulkan-loader,
wayland,
wayland-scanner,
xorg,
zenity,
# for passthru.tests
SDL_compat,
sdl2-compat,
sdl3-image,
sdl3-ttf,
alsaSupport ? stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAndroid,
dbusSupport ? stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAndroid,
drmSupport ? stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAndroid,
ibusSupport ? stdenv.hostPlatform.isUnix && !stdenv.hostPlatform.isDarwin,
jackSupport ? stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAndroid,
libdecorSupport ? stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAndroid,
openglSupport ? lib.meta.availableOn stdenv.hostPlatform libGL,
pipewireSupport ? stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAndroid,
pulseaudioSupport ?
config.pulseaudio or stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAndroid,
libudevSupport ? stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAndroid,
sndioSupport ? false,
traySupport ? true,
waylandSupport ? stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAndroid,
x11Support ? !stdenv.hostPlatform.isAndroid && !stdenv.hostPlatform.isWindows,
}:
assert lib.assertMsg (
waylandSupport -> openglSupport
) "SDL3 requires OpenGL support to enable Wayland";
assert lib.assertMsg (ibusSupport -> dbusSupport) "SDL3 requires dbus support to enable ibus";
stdenv.mkDerivation (finalAttrs: {
pname = "sdl3";
version = "3.2.22";
outputs = [
"lib"
"dev"
"out"
"installedTests"
];
src = fetchFromGitHub {
owner = "libsdl-org";
repo = "SDL";
tag = "release-${finalAttrs.version}";
hash = "sha256-4jGfw2hNZTGuae2DMLz8xJBtfNu5abIN5GlNIKDOUpw=";
};
postPatch =
# Tests timeout on Darwin
# `testtray` loads assets from a relative path, which we are patching to be absolute
lib.optionalString (finalAttrs.finalPackage.doCheck) ''
substituteInPlace test/CMakeLists.txt \
--replace-fail 'set(noninteractive_timeout 10)' 'set(noninteractive_timeout 30)'
substituteInPlace test/testtray.c \
--replace-warn '../test/' '${placeholder "installedTests"}/share/assets/'
''
+ lib.optionalString waylandSupport ''
substituteInPlace src/video/wayland/SDL_waylandmessagebox.c \
--replace-fail '"zenity"' '"${lib.getExe zenity}"'
substituteInPlace src/dialog/unix/SDL_zenitydialog.c \
--replace-fail '"zenity"' '"${lib.getExe zenity}"'
'';
strictDeps = true;
nativeBuildInputs = [
cmake
ninja
validatePkgConfig
]
++ lib.optional waylandSupport wayland-scanner;
buildInputs =
lib.optionals stdenv.hostPlatform.isLinux [
libusb1
]
++ lib.optional (
stdenv.hostPlatform.isUnix && !stdenv.hostPlatform.isDarwin && traySupport
) libayatana-appindicator
++ lib.optional alsaSupport alsa-lib
++ lib.optional dbusSupport dbus
++ lib.optionals drmSupport [
libdrm
libgbm
]
++ lib.optional jackSupport libjack2
++ lib.optional libdecorSupport libdecor
++ lib.optional libudevSupport systemdLibs
++ lib.optional openglSupport libGL
++ lib.optional pipewireSupport pipewire
++ lib.optional pulseaudioSupport libpulseaudio
++ lib.optional sndioSupport sndio
++ lib.optionals waylandSupport [
libxkbcommon
wayland
]
++ lib.optionals x11Support [
xorg.libX11
xorg.libxcb
xorg.libXScrnSaver
xorg.libXcursor
xorg.libXext
xorg.libXfixes
xorg.libXi
xorg.libXrandr
]
++ [
vulkan-headers
vulkan-loader
]
++ lib.optional (openglSupport && !stdenv.hostPlatform.isDarwin) libGL
++ lib.optional x11Support xorg.libX11
++ lib.optionals stdenv.hostPlatform.isDarwin [
# error: 'MTLPixelFormatASTC_4x4_LDR' is unavailable: not available on macOS
(darwinMinVersionHook "11.0")
apple-sdk_11
]
++ lib.optionals ibusSupport [
# sdl3 only uses some constants of the ibus headers
# it never actually loads the library
# thus, it also does not have to care about gtk integration,
# so using ibusMinimal avoids an unnecessarily large closure here.
ibusMinimal
];
cmakeFlags = [
(lib.cmakeBool "SDL_ALSA" alsaSupport)
(lib.cmakeBool "SDL_DBUS" dbusSupport)
(lib.cmakeBool "SDL_IBUS" ibusSupport)
(lib.cmakeBool "SDL_JACK" jackSupport)
(lib.cmakeBool "SDL_KMSDRM" drmSupport)
(lib.cmakeBool "SDL_LIBUDEV" libudevSupport)
(lib.cmakeBool "SDL_OPENGL" openglSupport)
(lib.cmakeBool "SDL_PIPEWIRE" pipewireSupport)
(lib.cmakeBool "SDL_PULSEAUDIO" pulseaudioSupport)
(lib.cmakeBool "SDL_SNDIO" sndioSupport)
(lib.cmakeBool "SDL_TEST_LIBRARY" true)
(lib.cmakeBool "SDL_TRAY_DUMMY" (!traySupport))
(lib.cmakeBool "SDL_WAYLAND" waylandSupport)
(lib.cmakeBool "SDL_WAYLAND_LIBDECOR" libdecorSupport)
(lib.cmakeBool "SDL_X11" x11Support)
(lib.cmakeBool "SDL_TESTS" true)
(lib.cmakeBool "SDL_INSTALL_TESTS" true)
(lib.cmakeBool "SDL_DEPS_SHARED" false)
];
doCheck = true;
postInstall = ''
moveToOutput "share/installed-tests" "$installedTests"
moveToOutput "libexec/installed-tests" "$installedTests"
'';
passthru = {
# Building this in its own derivation to make sure the rpath hack above propagate to users
debug-text-example = stdenv.mkDerivation (finalAttrs': {
pname = "sdl3-debug-text-example";
inherit (finalAttrs) version src;
sourceRoot = "${finalAttrs'.src.name}/examples/renderer/18-debug-text";
nativeBuildInputs = [
installShellFiles
];
buildInputs = [ finalAttrs.finalPackage ];
postBuild = ''
$CC -lSDL3 -o debug-text{,.c}
'';
postInstall = ''
installBin debug-text
'';
meta = {
inherit (finalAttrs.meta) maintainers platforms;
mainProgram = "debug-text";
};
});
tests =
SDL_compat.tests
// sdl2-compat.tests
// {
inherit
SDL_compat
sdl2-compat
sdl3-image
sdl3-ttf
;
pkg-config = testers.hasPkgConfigModules { package = finalAttrs.finalPackage; };
inherit (finalAttrs.passthru) debug-text-example;
}
// lib.optionalAttrs stdenv.hostPlatform.isLinux {
nixosTest = nixosTests.sdl3;
};
updateScript = nix-update-script {
extraArgs = [
"--version-regex"
"release-(3\\..*)"
];
};
};
meta = {
description = "Cross-platform development library";
homepage = "https://libsdl.org";
changelog = "https://github.com/libsdl-org/SDL/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.zlib;
maintainers = with lib.maintainers; [ getchoo ];
teams = [ lib.teams.sdl ];
platforms = lib.platforms.unix ++ lib.platforms.windows;
pkgConfigModules = [ "sdl3" ];
};
})