-
-
Notifications
You must be signed in to change notification settings - Fork 14.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
259 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
import ./make-test-python.nix ( | ||
{ pkgs, ... }: | ||
{ | ||
name = "sdl3"; | ||
meta.maintainers = pkgs.sdl3.meta.maintainers; | ||
|
||
nodes.machine = | ||
{ pkgs, ... }: | ||
{ | ||
imports = [ ./common/x11.nix ]; | ||
|
||
environment.systemPackages = [ pkgs.sdl3.passthru.debug-text-example ]; | ||
}; | ||
|
||
enableOCR = true; | ||
|
||
testScript = '' | ||
machine.wait_for_x() | ||
machine.execute("debug-text >&2 &") | ||
machine.wait_for_window("examples/renderer/debug-text") | ||
machine.wait_for_text("Hello world") | ||
machine.screenshot("screen") | ||
''; | ||
} | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,230 @@ | ||
{ | ||
lib, | ||
stdenv, | ||
config, | ||
alsa-lib, | ||
apple-sdk_11, | ||
cmake, | ||
darwinMinVersionHook, | ||
dbus, | ||
fcitx5, | ||
fetchFromGitHub, | ||
ibus, | ||
installShellFiles, | ||
libGL, | ||
libayatana-appindicator, | ||
libdecor, | ||
libdrm, | ||
libjack2, | ||
libpulseaudio, | ||
libusb1, | ||
libxkbcommon, | ||
mesa, | ||
ninja, | ||
nix-update-script, | ||
nixosTests, | ||
pipewire, | ||
sndio, | ||
systemdLibs, | ||
testers, | ||
validatePkgConfig, | ||
wayland, | ||
wayland-scanner, | ||
xorg, | ||
zenity, | ||
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 mesa, | ||
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, | ||
testSupport ? true, | ||
waylandSupport ? stdenv.isLinux && !stdenv.hostPlatform.isAndroid, | ||
x11Support ? !stdenv.hostPlatform.isAndroid && !stdenv.hostPlatform.isWindows, | ||
}: | ||
|
||
stdenv.mkDerivation (finalAttrs: { | ||
pname = "sdl3"; | ||
version = "3.1.8"; | ||
|
||
outputs = [ | ||
"lib" | ||
"dev" | ||
"out" | ||
]; | ||
|
||
src = fetchFromGitHub { | ||
owner = "libsdl-org"; | ||
repo = "SDL"; | ||
tag = "preview-${finalAttrs.version}"; | ||
hash = "sha256-yfnW5y99EegifRavvZWmXPH2NFPKWoe90RmGDGk6PI4="; | ||
}; | ||
|
||
postPatch = | ||
# Tests timeout on Darwin | ||
lib.optionalString testSupport '' | ||
substituteInPlace test/CMakeLists.txt \ | ||
--replace-fail 'set(noninteractive_timeout 10)' 'set(noninteractive_timeout 30)' | ||
'' | ||
+ lib.optionalString waylandSupport '' | ||
substituteInPlace src/video/wayland/SDL_waylandmessagebox.c \ | ||
--replace-fail '"zenity"' '"${lib.getExe zenity}"' | ||
''; | ||
|
||
strictDeps = true; | ||
|
||
nativeBuildInputs = [ | ||
cmake | ||
ninja | ||
validatePkgConfig | ||
] ++ lib.optional waylandSupport wayland-scanner; | ||
|
||
buildInputs = | ||
finalAttrs.dlopenBuildInputs | ||
++ lib.optionals stdenv.hostPlatform.isDarwin [ | ||
# error: 'MTLPixelFormatASTC_4x4_LDR' is unavailable: not available on macOS | ||
(darwinMinVersionHook "11.0") | ||
|
||
apple-sdk_11 | ||
] | ||
++ lib.optionals ibusSupport [ | ||
fcitx5 | ||
ibus | ||
] | ||
++ lib.optional waylandSupport zenity; | ||
|
||
dlopenBuildInputs = | ||
lib.optionals stdenv.hostPlatform.isLinux [ | ||
libusb1 | ||
] | ||
++ lib.optional ( | ||
stdenv.hostPlatform.isUnix && !stdenv.hostPlatform.isDarwin | ||
) libayatana-appindicator | ||
++ lib.optional alsaSupport alsa-lib | ||
++ lib.optional dbusSupport dbus | ||
++ lib.optionals drmSupport [ | ||
libdrm | ||
mesa # 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.libXScrnSaver | ||
xorg.libXcursor | ||
xorg.libXext | ||
xorg.libXfixes | ||
xorg.libXi | ||
xorg.libXrandr | ||
]; | ||
|
||
propagatedBuildInputs = finalAttrs.dlopenPropagatedBuildInputs; | ||
|
||
dlopenPropagatedBuildInputs = | ||
lib.optional (openglSupport && !stdenv.hostPlatform.isDarwin) libGL | ||
++ lib.optional x11Support xorg.libX11; | ||
|
||
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" testSupport) | ||
(lib.cmakeBool "SDL_WAYLAND" waylandSupport) | ||
(lib.cmakeBool "SDL_WAYLAND_LIBDECOR" libdecorSupport) | ||
(lib.cmakeBool "SDL_X11" x11Support) | ||
|
||
(lib.cmakeBool "SDL_TESTS" finalAttrs.finalPackage.doCheck) | ||
]; | ||
|
||
doCheck = testSupport && stdenv.buildPlatform.canExecute stdenv.hostPlatform; | ||
|
||
# See comment below. We actually *do* need these RPATH entries | ||
dontPatchELF = true; | ||
|
||
env = { | ||
# Many dependencies are not directly linked to, but dlopen()'d at runtime. Adding them to the RPATH | ||
# helps them be found | ||
NIX_LDFLAGS = | ||
lib.optionalString (stdenv.hostPlatform.extensions.sharedLibrary == ".so") | ||
"-rpath ${ | ||
lib.makeLibraryPath (finalAttrs.dlopenBuildInputs ++ finalAttrs.dlopenPropagatedBuildInputs) | ||
}"; | ||
}; | ||
|
||
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 = | ||
{ | ||
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" | ||
"'preview-(.*)'" | ||
]; | ||
}; | ||
}; | ||
|
||
meta = { | ||
description = "Cross-platform development library (Preview version)"; | ||
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 ]; | ||
platforms = lib.platforms.unix; | ||
pkgConfigModules = [ "sdl3" ]; | ||
}; | ||
}) |