diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/SDL2')
4 files changed, 237 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/SDL2/Fix-build-against-wayland-1.20.patch b/nixpkgs/pkgs/development/libraries/SDL2/Fix-build-against-wayland-1.20.patch new file mode 100644 index 000000000000..1be600bedb35 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/SDL2/Fix-build-against-wayland-1.20.patch @@ -0,0 +1,43 @@ +From a31d1f1683ef2e9c063c3fa1db79d111cca99414 Mon Sep 17 00:00:00 2001 +From: David Redondo <kde@david-redondo.de> +Date: Fri, 10 Dec 2021 16:22:34 +0100 +Subject: [PATCH] Fix build against wayland 1.20 + +Fixes #5088 + +(cherry picked from commit e2ade2bfc46d915cd306c63c830b81d800b2575f) +--- + src/video/wayland/SDL_waylanddyn.h | 2 ++ + src/video/wayland/SDL_waylandsym.h | 4 ++++ + 2 files changed, 6 insertions(+) + +diff --git a/src/video/wayland/SDL_waylanddyn.h b/src/video/wayland/SDL_waylanddyn.h +index 485a9c19f..37070e946 100644 +--- a/src/video/wayland/SDL_waylanddyn.h ++++ b/src/video/wayland/SDL_waylanddyn.h +@@ -81,6 +81,8 @@ void SDL_WAYLAND_UnloadSymbols(void); + #define wl_proxy_add_listener (*WAYLAND_wl_proxy_add_listener) + #define wl_proxy_marshal_constructor (*WAYLAND_wl_proxy_marshal_constructor) + #define wl_proxy_marshal_constructor_versioned (*WAYLAND_wl_proxy_marshal_constructor_versioned) ++#define wl_proxy_marshal_flags (*WAYLAND_wl_proxy_marshal_flags) ++#define wl_proxy_marshal_array_flags (*WAYLAND_wl_proxy_marshal_array_flags) + + #define wl_seat_interface (*WAYLAND_wl_seat_interface) + #define wl_surface_interface (*WAYLAND_wl_surface_interface) +diff --git a/src/video/wayland/SDL_waylandsym.h b/src/video/wayland/SDL_waylandsym.h +index c4c189d3c..789f49e27 100644 +--- a/src/video/wayland/SDL_waylandsym.h ++++ b/src/video/wayland/SDL_waylandsym.h +@@ -71,6 +71,10 @@ SDL_WAYLAND_SYM(struct wl_proxy *, wl_proxy_marshal_constructor, (struct wl_prox + SDL_WAYLAND_MODULE(WAYLAND_CLIENT_1_10) + SDL_WAYLAND_SYM(struct wl_proxy *, wl_proxy_marshal_constructor_versioned, (struct wl_proxy *proxy, uint32_t opcode, const struct wl_interface *interface, uint32_t version, ...)) + ++SDL_WAYLAND_MODULE(WAYLAND_CLIENT_1_20) ++SDL_WAYLAND_SYM(struct wl_proxy*, wl_proxy_marshal_flags, (struct wl_proxy *proxy, uint32_t opcode, const struct wl_interface *interfac, uint32_t version, uint32_t flags, ...)) ++SDL_WAYLAND_SYM(struct wl_proxy*, wl_proxy_marshal_array_flags, (struct wl_proxy *proxy, uint32_t opcode, const struct wl_interface *interface, uint32_t version, uint32_t flags, union wl_argument *args)) ++ + SDL_WAYLAND_INTERFACE(wl_seat_interface) + SDL_WAYLAND_INTERFACE(wl_surface_interface) + SDL_WAYLAND_INTERFACE(wl_shm_pool_interface) +-- +2.33.1 diff --git a/nixpkgs/pkgs/development/libraries/SDL2/default.nix b/nixpkgs/pkgs/development/libraries/SDL2/default.nix new file mode 100644 index 000000000000..95022211d2f7 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/SDL2/default.nix @@ -0,0 +1,141 @@ +{ lib, stdenv, config, fetchurl, pkg-config +, libGLSupported ? lib.elem stdenv.hostPlatform.system lib.platforms.mesaPlatforms +, openglSupport ? libGLSupported, libGL +, alsaSupport ? stdenv.isLinux && !stdenv.hostPlatform.isAndroid, alsa-lib +, x11Support ? !stdenv.targetPlatform.isWindows && !stdenv.hostPlatform.isAndroid +, libX11, xorgproto, libICE, libXi, libXScrnSaver, libXcursor +, libXinerama, libXext, libXxf86vm, libXrandr +, waylandSupport ? stdenv.isLinux && !stdenv.hostPlatform.isAndroid +, wayland, wayland-protocols, libxkbcommon +, dbusSupport ? stdenv.isLinux && !stdenv.hostPlatform.isAndroid, dbus +, udevSupport ? false, udev +, ibusSupport ? false, ibus +, fcitxSupport ? false, fcitx +, pulseaudioSupport ? config.pulseaudio or stdenv.isLinux && !stdenv.hostPlatform.isAndroid +, libpulseaudio +, AudioUnit, Cocoa, CoreAudio, CoreServices, ForceFeedback, OpenGL +, audiofile, libiconv +, withStatic ? false +}: + +# NOTE: When editing this expression see if the same change applies to +# SDL expression too + +with lib; + +stdenv.mkDerivation rec { + pname = "SDL2"; + version = "2.0.14"; + + src = fetchurl { + url = "https://www.libsdl.org/release/${pname}-${version}.tar.gz"; + sha256 = "1g1jahknv5r4yhh1xq5sf0md20ybdw1zh1i15lry26sq39bmn8fq"; + }; + dontDisableStatic = withStatic; + outputs = [ "out" "dev" ]; + outputBin = "dev"; # sdl-config + + patches = [ + ./find-headers.patch + # To fix the build with wayland 1.20.0: + ./Fix-build-against-wayland-1.20.patch + ]; + + # Fix with mesa 19.2: https://bugzilla.libsdl.org/show_bug.cgi?id=4797 + postPatch = '' + substituteInPlace include/SDL_opengl_glext.h \ + --replace "typedef ptrdiff_t GLsizeiptr;" "typedef signed long int khronos_ssize_t; typedef khronos_ssize_t GLsizeiptr;" \ + --replace "typedef ptrdiff_t GLintptr;" "typedef signed long int khronos_intptr_t; typedef khronos_intptr_t GLintptr;" + + substituteInPlace configure \ + --replace 'WAYLAND_SCANNER=`$PKG_CONFIG --variable=wayland_scanner wayland-scanner`' 'WAYLAND_SCANNER=`pkg-config --variable=wayland_scanner wayland-scanner`' + ''; + + depsBuildBuild = [ pkg-config ]; + + nativeBuildInputs = [ pkg-config ] ++ optionals waylandSupport [ wayland ]; + + propagatedBuildInputs = dlopenPropagatedBuildInputs; + + dlopenPropagatedBuildInputs = [ ] + # Propagated for #include <GLES/gl.h> in SDL_opengles.h. + ++ optional openglSupport libGL + # Propagated for #include <X11/Xlib.h> and <X11/Xatom.h> in SDL_syswm.h. + ++ optionals x11Support [ libX11 xorgproto ]; + + dlopenBuildInputs = [ ] + ++ optionals alsaSupport [ alsa-lib audiofile ] + ++ optional dbusSupport dbus + ++ optional pulseaudioSupport libpulseaudio + ++ optional udevSupport udev + ++ optionals waylandSupport [ wayland wayland-protocols libxkbcommon ] + ++ optionals x11Support [ libICE libXi libXScrnSaver libXcursor libXinerama libXext libXrandr libXxf86vm ]; + + buildInputs = [ libiconv ] + ++ dlopenBuildInputs + ++ optional ibusSupport ibus + ++ optional fcitxSupport fcitx + ++ optionals stdenv.isDarwin [ AudioUnit Cocoa CoreAudio CoreServices ForceFeedback OpenGL ]; + + enableParallelBuilding = true; + + configureFlags = [ + "--disable-oss" + ] ++ optional (!x11Support) "--without-x" + ++ optional alsaSupport "--with-alsa-prefix=${alsa-lib.out}/lib" + ++ optional stdenv.targetPlatform.isWindows "--disable-video-opengles" + ++ optional stdenv.isDarwin "--disable-sdltest"; + + # We remove libtool .la files when static libs are requested, + # because they make the builds of downstream libs like `SDL_tff` + # fail with `cannot find -lXext, `-lXcursor` etc. linker errors + # because the `.la` files are not pruned if static libs exist + # (see https://github.com/NixOS/nixpkgs/commit/fd97db43bcb05e37f6bb77f363f1e1e239d9de53) + # and they also don't carry the necessary `-L` paths of their + # X11 dependencies. + # For static linking, it is better to rely on `pkg-config` `.pc` + # files. + postInstall = '' + if [ "$dontDisableStatic" -eq "1" ]; then + rm $out/lib/*.la + else + rm $out/lib/*.a + fi + moveToOutput bin/sdl2-config "$dev" + ''; + + # SDL is weird in that instead of just dynamically linking with + # libraries when you `--enable-*` (or when `configure` finds) them + # it `dlopen`s them at runtime. In principle, this means it can + # ignore any missing optional dependencies like alsa, pulseaudio, + # some x11 libs, wayland, etc if they are missing on the system + # and/or work with wide array of versions of said libraries. In + # nixpkgs, however, we don't need any of that. Moreover, since we + # don't have a global ld-cache we have to stuff all the propagated + # libraries into rpath by hand or else some applications that use + # SDL API that requires said libraries will fail to start. + # + # You can grep SDL sources with `grep -rE 'SDL_(NAME|.*_SYM)'` to + # list the symbols used in this way. + postFixup = let + rpath = makeLibraryPath (dlopenPropagatedBuildInputs ++ dlopenBuildInputs); + in optionalString (stdenv.hostPlatform.extensions.sharedLibrary == ".so") '' + for lib in $out/lib/*.so* ; do + if ! [[ -L "$lib" ]]; then + patchelf --set-rpath "$(patchelf --print-rpath $lib):${rpath}" "$lib" + fi + done + ''; + + setupHook = ./setup-hook.sh; + + passthru = { inherit openglSupport; }; + + meta = with lib; { + description = "A cross-platform multimedia library"; + homepage = "http://www.libsdl.org/"; + license = licenses.zlib; + platforms = platforms.all; + maintainers = with maintainers; [ cpages ]; + }; +} diff --git a/nixpkgs/pkgs/development/libraries/SDL2/find-headers.patch b/nixpkgs/pkgs/development/libraries/SDL2/find-headers.patch new file mode 100644 index 000000000000..a2e0c4837031 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/SDL2/find-headers.patch @@ -0,0 +1,46 @@ +diff -ru3 SDL2-2.0.14/sdl2-config.cmake.in SDL2-2.0.14-new/sdl2-config.cmake.in +--- SDL2-2.0.14/sdl2-config.cmake.in 2020-12-21 18:44:36.000000000 +0100 ++++ SDL2-2.0.14-new/sdl2-config.cmake.in 2021-01-16 23:53:40.721121792 +0100 +@@ -6,7 +6,8 @@ + set(SDL2_PREFIX "@prefix@") + set(SDL2_EXEC_PREFIX "@prefix@") + set(SDL2_LIBDIR "@libdir@") +-set(SDL2_INCLUDE_DIRS "@includedir@/SDL2") ++set(SDL2_INCLUDE_DIRS "@includedir@/SDL2" $ENV{SDL2_PATH}) ++separate_arguments(SDL2_INCLUDE_DIRS) + set(SDL2_LIBRARIES "-L${SDL2_LIBDIR} @SDL_RLD_FLAGS@ @SDL_LIBS@") + string(STRIP "${SDL2_LIBRARIES}" SDL2_LIBRARIES) + +@@ -20,14 +21,14 @@ + + add_library(SDL2::SDL2 SHARED IMPORTED) + set_target_properties(SDL2::SDL2 PROPERTIES +- INTERFACE_INCLUDE_DIRECTORIES "@includedir@/SDL2" ++ INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIRS}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "@libdir@/${CMAKE_SHARED_LIBRARY_PREFIX}SDL2${CMAKE_SHARED_LIBRARY_SUFFIX}" + INTERFACE_LINK_LIBRARIES "${SDL2_EXTRA_LINK_FLAGS}") + + add_library(SDL2::SDL2-static STATIC IMPORTED) + set_target_properties(SDL2::SDL2-static PROPERTIES +- INTERFACE_INCLUDE_DIRECTORIES "@includedir@/SDL2" ++ INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIRS}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "@libdir@/${CMAKE_STATIC_LIBRARY_PREFIX}SDL2${CMAKE_STATIC_LIBRARY_SUFFIX}" + INTERFACE_LINK_LIBRARIES "${SDL2_EXTRA_LINK_FLAGS_STATIC}") +diff -ru3 SDL2-2.0.14/sdl2-config.in SDL2-2.0.14-new/sdl2-config.in +--- SDL2-2.0.14/sdl2-config.in 2020-12-21 18:44:36.000000000 +0100 ++++ SDL2-2.0.14-new/sdl2-config.in 2021-01-16 23:57:11.940353171 +0100 +@@ -42,7 +42,11 @@ + echo @SDL_VERSION@ + ;; + --cflags) +- echo -I@includedir@/SDL2 @SDL_CFLAGS@ ++ SDL_CFLAGS="" ++ for i in @includedir@/SDL2 $SDL2_PATH; do ++ SDL_CFLAGS="$SDL_CFLAGS -I$i" ++ done ++ echo $SDL_CFLAGS @SDL_CFLAGS@ + ;; + @ENABLE_SHARED_TRUE@ --libs) + @ENABLE_SHARED_TRUE@ echo -L@libdir@ @SDL_RLD_FLAGS@ @SDL_LIBS@ diff --git a/nixpkgs/pkgs/development/libraries/SDL2/setup-hook.sh b/nixpkgs/pkgs/development/libraries/SDL2/setup-hook.sh new file mode 100644 index 000000000000..0119926491af --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/SDL2/setup-hook.sh @@ -0,0 +1,7 @@ +addSDL2Path () { + if [ -e "$1/include/SDL2" ]; then + export SDL2_PATH="${SDL2_PATH-}${SDL2_PATH:+ }$1/include/SDL2" + fi +} + +addEnvHooks "$hostOffset" addSDL2Path |