From 73f255a43c87f536429e24435be84b6a38ee5abe Mon Sep 17 00:00:00 2001 From: Grimmauld Date: Thu, 5 Jun 2025 23:09:32 +0200 Subject: [PATCH 1/5] sdl3: expose installed-tests in outputs The `installedTests` contains various test binaries, some of which only useful on a running system. Motivation for providing this output is to eventually test tray support in a VM test, which needs a running dbus session. --- pkgs/by-name/sd/sdl3/package.nix | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/pkgs/by-name/sd/sdl3/package.nix b/pkgs/by-name/sd/sdl3/package.nix index 96cf932d29a51..93d16187916d6 100644 --- a/pkgs/by-name/sd/sdl3/package.nix +++ b/pkgs/by-name/sd/sdl3/package.nix @@ -63,11 +63,15 @@ stdenv.mkDerivation (finalAttrs: { pname = "sdl3"; version = "3.2.12"; - outputs = [ - "lib" - "dev" - "out" - ]; + outputs = + [ + "lib" + "dev" + "out" + ] + ++ lib.optionals testSupport [ + "installedTests" + ]; src = fetchFromGitHub { owner = "libsdl-org"; @@ -78,9 +82,13 @@ stdenv.mkDerivation (finalAttrs: { postPatch = # Tests timeout on Darwin + # `testtray` loads assets from a relative path, which we are patching to be absolute lib.optionalString testSupport '' 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 \ @@ -165,6 +173,7 @@ stdenv.mkDerivation (finalAttrs: { (lib.cmakeBool "SDL_X11" x11Support) (lib.cmakeBool "SDL_TESTS" finalAttrs.finalPackage.doCheck) + (lib.cmakeBool "SDL_INSTALL_TESTS" testSupport) ]; doCheck = testSupport && stdenv.buildPlatform.canExecute stdenv.hostPlatform; @@ -180,6 +189,12 @@ stdenv.mkDerivation (finalAttrs: { ) "-rpath ${lib.makeLibraryPath (finalAttrs.dlopenBuildInputs)}"; }; + postInstall = lib.optionalString testSupport '' + moveToOutput "share/installed-tests" "$installedTests" + moveToOutput "libexec/installed-tests" "$installedTests" + install -Dm 444 -t $installedTests/share/assets test/*.bmp + ''; + passthru = { # Building this in its own derivation to make sure the rpath hack above propagate to users debug-text-example = stdenv.mkDerivation (finalAttrs': { From d83ebe17f28e51c06e1cb4d72323e17d289b6de3 Mon Sep 17 00:00:00 2001 From: Grimmauld Date: Thu, 5 Jun 2025 23:31:16 +0200 Subject: [PATCH 2/5] sdl3: make tray support optional --- pkgs/by-name/sd/sdl3/package.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/sd/sdl3/package.nix b/pkgs/by-name/sd/sdl3/package.nix index 93d16187916d6..7e2ac8507c835 100644 --- a/pkgs/by-name/sd/sdl3/package.nix +++ b/pkgs/by-name/sd/sdl3/package.nix @@ -51,6 +51,7 @@ libudevSupport ? stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAndroid, sndioSupport ? false, testSupport ? true, + traySupport ? true, waylandSupport ? stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAndroid, x11Support ? !stdenv.hostPlatform.isAndroid && !stdenv.hostPlatform.isWindows, }: @@ -121,7 +122,7 @@ stdenv.mkDerivation (finalAttrs: { libusb1 ] ++ lib.optional ( - stdenv.hostPlatform.isUnix && !stdenv.hostPlatform.isDarwin + stdenv.hostPlatform.isUnix && !stdenv.hostPlatform.isDarwin && traySupport ) libayatana-appindicator ++ lib.optional alsaSupport alsa-lib ++ lib.optional dbusSupport dbus @@ -168,6 +169,7 @@ stdenv.mkDerivation (finalAttrs: { (lib.cmakeBool "SDL_PULSEAUDIO" pulseaudioSupport) (lib.cmakeBool "SDL_SNDIO" sndioSupport) (lib.cmakeBool "SDL_TEST_LIBRARY" testSupport) + (lib.cmakeBool "SDL_TRAY_DUMMY" (!traySupport)) (lib.cmakeBool "SDL_WAYLAND" waylandSupport) (lib.cmakeBool "SDL_WAYLAND_LIBDECOR" libdecorSupport) (lib.cmakeBool "SDL_X11" x11Support) From 3f9410ebf99932d4ded15673960961ae6237b931 Mon Sep 17 00:00:00 2001 From: Grimmauld Date: Thu, 5 Jun 2025 23:31:49 +0200 Subject: [PATCH 3/5] sdl2-compat: don't request tray support from sdl3 --- pkgs/by-name/sd/sdl2-compat/package.nix | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/sd/sdl2-compat/package.nix b/pkgs/by-name/sd/sdl2-compat/package.nix index 03f76b78e462e..20783cab0638f 100644 --- a/pkgs/by-name/sd/sdl2-compat/package.nix +++ b/pkgs/by-name/sd/sdl2-compat/package.nix @@ -21,7 +21,11 @@ ffmpeg, qemu, }: - +let + # tray support on sdl3 pulls in gtk3, which is quite an expensive dependency. + # sdl2 does not support the tray, so we can just disable that requirement. + sdl3' = sdl3.override { traySupport = false; }; +in stdenv.mkDerivation (finalAttrs: { pname = "sdl2-compat"; version = "2.32.56"; @@ -39,7 +43,7 @@ stdenv.mkDerivation (finalAttrs: { ]; buildInputs = [ - sdl3 + sdl3' libX11 ]; @@ -57,7 +61,7 @@ stdenv.mkDerivation (finalAttrs: { cmakeFlags = [ (lib.cmakeBool "SDL2COMPAT_TESTS" finalAttrs.finalPackage.doCheck) - (lib.cmakeFeature "CMAKE_INSTALL_RPATH" (lib.makeLibraryPath [ sdl3 ])) + (lib.cmakeFeature "CMAKE_INSTALL_RPATH" (lib.makeLibraryPath [ sdl3' ])) ]; # skip timing-based tests as those are flaky From 9539fbd235440b724db22776ad1449fdd7e4ecf9 Mon Sep 17 00:00:00 2001 From: Grimmauld Date: Fri, 6 Jun 2025 10:58:25 +0200 Subject: [PATCH 4/5] sdl3: assert ibusSupport -> dbusSupport --- pkgs/by-name/sd/sdl3/package.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/by-name/sd/sdl3/package.nix b/pkgs/by-name/sd/sdl3/package.nix index 7e2ac8507c835..226490327b5aa 100644 --- a/pkgs/by-name/sd/sdl3/package.nix +++ b/pkgs/by-name/sd/sdl3/package.nix @@ -59,6 +59,7 @@ 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"; From 9149a3a6ed1422b9a5eeb590f23561510c09bf9a Mon Sep 17 00:00:00 2001 From: Grimmauld Date: Fri, 6 Jun 2025 11:07:53 +0200 Subject: [PATCH 5/5] sdl3: fix zenity support zenity is used not only for error reporting, but also for file dialogs if dbus is disabled/unavailable. This needs a patched path too. --- pkgs/by-name/sd/sdl3/package.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/by-name/sd/sdl3/package.nix b/pkgs/by-name/sd/sdl3/package.nix index 226490327b5aa..2537f564f701e 100644 --- a/pkgs/by-name/sd/sdl3/package.nix +++ b/pkgs/by-name/sd/sdl3/package.nix @@ -95,6 +95,8 @@ stdenv.mkDerivation (finalAttrs: { + 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;