summary refs log tree commit diff
path: root/pkgs/development
diff options
context:
space:
mode:
authorMichael Raskin <7c6f434c@mail.ru>2018-03-06 19:56:36 +0000
committerGitHub <noreply@github.com>2018-03-06 19:56:36 +0000
commitb49ef26eca958c965bb327cc6bbbcce430c3b96d (patch)
treef4822950e6b072089d97af3f61926dba6900e122 /pkgs/development
parentc8664a2640dea279ee2b623ea46aa3c4178770df (diff)
parent19130ebc5d05cc7720335c92d68a4fd1faf28dc0 (diff)
downloadnixlib-b49ef26eca958c965bb327cc6bbbcce430c3b96d.tar
nixlib-b49ef26eca958c965bb327cc6bbbcce430c3b96d.tar.gz
nixlib-b49ef26eca958c965bb327cc6bbbcce430c3b96d.tar.bz2
nixlib-b49ef26eca958c965bb327cc6bbbcce430c3b96d.tar.lz
nixlib-b49ef26eca958c965bb327cc6bbbcce430c3b96d.tar.xz
nixlib-b49ef26eca958c965bb327cc6bbbcce430c3b96d.tar.zst
nixlib-b49ef26eca958c965bb327cc6bbbcce430c3b96d.zip
Merge pull request #36377 from oxij/pkgs/fix-pulseaudio-references
tree-wide: fix pulseaudio references; fix SDL expressions
Diffstat (limited to 'pkgs/development')
-rw-r--r--pkgs/development/libraries/SDL/default.nix96
-rw-r--r--pkgs/development/libraries/SDL2/default.nix72
2 files changed, 107 insertions, 61 deletions
diff --git a/pkgs/development/libraries/SDL/default.nix b/pkgs/development/libraries/SDL/default.nix
index a752fbcbcdd5..0b853aad8ef8 100644
--- a/pkgs/development/libraries/SDL/default.nix
+++ b/pkgs/development/libraries/SDL/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, fetchpatch, pkgconfig, audiofile, libcap, libiconv
+{ stdenv, lib, fetchurl, fetchpatch, pkgconfig, audiofile, libcap, libiconv
 , openglSupport ? false, libGL, libGLU
 , alsaSupport ? true, alsaLib
 , x11Support ? hostPlatform == buildPlatform, libXext, libICE, libXrandr
@@ -7,13 +7,32 @@
 , hostPlatform, buildPlatform
 }:
 
-# OSS is no longer supported, for it's much crappier than ALSA and
-# PulseAudio.
-assert hostPlatform.isLinux -> alsaSupport || pulseaudioSupport;
+# NOTE: When editing this expression see if the same change applies to
+# SDL2 expression too
+
+with lib;
+
+assert !stdenv.isDarwin -> alsaSupport || pulseaudioSupport;
+assert openglSupport -> (stdenv.isDarwin || x11Support && libGL != null && libGLU != null);
 
 let
-  inherit (stdenv.lib) optional optionals;
+
+  configureFlagsFun = attrs: [
+    "--disable-oss"
+    "--disable-video-x11-xme"
+    "--enable-rpath"
+  # Building without this fails on Darwin with
+  #
+  #   ./src/video/x11/SDL_x11sym.h:168:17: error: conflicting types for '_XData32'
+  #   SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return)
+  #
+  # Please try revert the change that introduced this comment when updating SDL.
+  ] ++ optional stdenv.isDarwin "--disable-x11-shared"
+    ++ optional (!x11Support) "--without-x"
+    ++ optional alsaSupport "--with-alsa-prefix=${attrs.alsaLib.out}/lib";
+
 in
+
 stdenv.mkDerivation rec {
   name    = "SDL-${version}";
   version = "1.2.15";
@@ -28,36 +47,28 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ pkgconfig ];
 
-  # Since `libpulse*.la' contain `-lgdbm', PulseAudio must be propagated.
-  propagatedBuildInputs =
-    optionals x11Support [ libXext libICE libXrandr ] ++
-    optional alsaSupport alsaLib ++
-    optional stdenv.isLinux libcap ++
-    optionals openglSupport [ libGL libGLU ] ++
-    optional pulseaudioSupport libpulseaudio ++
-    optional stdenv.isDarwin Cocoa;
-
-  buildInputs = let
-    notMingw = !hostPlatform.isMinGW;
-  in optional notMingw audiofile
-  ++ optionals stdenv.isDarwin [ OpenGL CoreAudio CoreServices AudioUnit Kernel ]
-  ++ [ libiconv ];
-
-  # XXX: By default, SDL wants to dlopen() PulseAudio, in which case
-  # we must arrange to add it to its RPATH; however, `patchelf' seems
-  # to fail at doing this, hence `--disable-pulseaudio-shared'.
-  configureFlags = [
-    "--disable-oss"
-    "--disable-video-x11-xme"
-    "--disable-x11-shared"
-    "--disable-alsa-shared"
-    "--enable-rpath"
-    "--disable-pulseaudio-shared"
-    "--disable-osmesa-shared"
-  ] ++ optional (!x11Support) "--without-x"
-    ++ optional (alsaSupport && hostPlatform != buildPlatform) "--with-alsa-prefix=${alsaLib.out}/lib";
+  propagatedBuildInputs = [ ]
+    ++ optionals (x11Support && !stdenv.isDarwin) [ libXext libICE libXrandr ]
+    ++ optional stdenv.isLinux libcap
+    ++ optionals openglSupport [ libGL libGLU ]
+    ++ optional alsaSupport alsaLib
+    ++ optional pulseaudioSupport libpulseaudio
+    ++ optional stdenv.isDarwin Cocoa;
+
+  buildInputs = [ libiconv ]
+    ++ optionals (x11Support && stdenv.isDarwin) [ libXext libICE libXrandr ]
+    ++ optional (!hostPlatform.isMinGW) audiofile
+    ++ optionals stdenv.isDarwin [ AudioUnit CoreAudio CoreServices Kernel OpenGL ];
+
+  configureFlags = configureFlagsFun { inherit alsaLib; };
+
+  crossAttrs = {
+    configureFlags = configureFlagsFun { alsaLib = alsaLib.crossDrv; };
+  };
 
   patches = [
+    ./find-headers.patch
+
     # Fix window resizing issues, e.g. for xmonad
     # Ticket: http://bugzilla.libsdl.org/show_bug.cgi?id=1430
     (fetchpatch {
@@ -75,6 +86,11 @@ stdenv.mkDerivation rec {
       url = "http://hg.libsdl.org/SDL/raw-rev/95abff7adcc2";
       sha256 = "0i8x0kx0pw12ld5bfxhyzs466y3c0n9dscw1ijhq1b96r72xyhqq";
     })
+    # https://bugzilla.libsdl.org/show_bug.cgi?id=1769
+    (fetchpatch {
+      url = "http://hg.libsdl.org/SDL/raw-rev/91ad7b43317a";
+      sha256 = "15g537vbl2my4mfrjxfkcx9ri6bk2gjvaqj650rjdxwk2nkdkn4b";
+    })
     # Workaround X11 bug to allow changing gamma
     # Ticket: https://bugs.freedesktop.org/show_bug.cgi?id=27222
     (fetchpatch {
@@ -92,10 +108,20 @@ stdenv.mkDerivation rec {
       url = "http://hg.libsdl.org/SDL/raw-rev/bbfb41c13a87";
       sha256 = "1336g7waaf1c8yhkz11xbs500h8bmvabh4h437ax8l1xdwcppfxv";
     })
-    ./find-headers.patch
   ];
 
-  postFixup = ''moveToOutput share/aclocal "$dev" '';
+  postInstall = ''
+    moveToOutput share/aclocal "$dev"
+  '';
+
+  # See the same place in the expression for SDL2
+  postFixup = ''
+    for lib in $out/lib/*.so* ; do
+      if [[ -L "$lib" ]]; then
+        patchelf --set-rpath "$(patchelf --print-rpath $lib):${lib.makeLibraryPath propagatedBuildInputs}" "$lib"
+      fi
+    done
+  '';
 
   setupHook = ./setup-hook.sh;
 
diff --git a/pkgs/development/libraries/SDL2/default.nix b/pkgs/development/libraries/SDL2/default.nix
index a037cd7dcfac..fe19ecadd0ef 100644
--- a/pkgs/development/libraries/SDL2/default.nix
+++ b/pkgs/development/libraries/SDL2/default.nix
@@ -11,19 +11,23 @@
 , libiconv
 }:
 
-# OSS is no longer supported, for it's much crappier than ALSA and
-# PulseAudio.
-assert !stdenv.isDarwin -> alsaSupport || pulseaudioSupport;
+# NOTE: When editing this expression see if the same change applies to
+# SDL expression too
+
+with lib;
 
-assert openglSupport -> (stdenv.isDarwin || libGL != null && x11Support);
+assert !stdenv.isDarwin -> alsaSupport || pulseaudioSupport;
+assert openglSupport -> (stdenv.isDarwin || x11Support && libGL != null);
 
 let
+
   configureFlagsFun = attrs: [
-      "--disable-oss" "--disable-x11-shared" "--disable-wayland-shared"
-      "--disable-pulseaudio-shared" "--disable-alsa-shared"
-    ] ++ lib.optional alsaSupport "--with-alsa-prefix=${attrs.alsaLib.out}/lib"
-      ++ lib.optional (!x11Support) "--without-x";
+    "--disable-oss"
+  ] ++ optional (!x11Support) "--without-x"
+    ++ optional alsaSupport "--with-alsa-prefix=${attrs.alsaLib.out}/lib";
+
 in
+
 stdenv.mkDerivation rec {
   name = "SDL2-${version}";
   version = "2.0.8";
@@ -34,35 +38,29 @@ stdenv.mkDerivation rec {
   };
 
   outputs = [ "out" "dev" ];
+  outputBin = "dev"; # sdl-config
 
   patches = [ ./find-headers.patch ];
 
   nativeBuildInputs = [ pkgconfig ];
 
-  # Since `libpulse*.la' contain `-lgdbm', PulseAudio must be propagated.
-  propagatedBuildInputs = lib.optionals x11Support [ libICE libXi libXScrnSaver libXcursor libXinerama libXext libXrandr libXxf86vm ] ++
-    lib.optionals waylandSupport [ wayland wayland-protocols libxkbcommon ] ++
-    lib.optional pulseaudioSupport libpulseaudio
-    ++ [ libiconv ];
-
-  buildInputs = [ audiofile ] ++
-    lib.optional openglSupport libGL ++
-    lib.optional alsaSupport alsaLib ++
-    lib.optional dbusSupport dbus ++
-    lib.optional udevSupport udev ++
-    lib.optional ibusSupport ibus ++
-    lib.optionals stdenv.isDarwin [ AudioUnit Cocoa CoreAudio CoreServices ForceFeedback OpenGL ];
+  propagatedBuildInputs = [ libiconv ]
+    ++ optional  dbusSupport dbus
+    ++ optional  udevSupport udev
+    ++ optionals x11Support [ libICE libXi libXScrnSaver libXcursor libXinerama libXext libXrandr libXxf86vm ]
+    ++ optionals waylandSupport [ wayland wayland-protocols libxkbcommon ]
+    ++ optional  alsaSupport alsaLib
+    ++ optional  pulseaudioSupport libpulseaudio;
 
-  # https://bugzilla.libsdl.org/show_bug.cgi?id=1431
-  dontDisableStatic = true;
+  buildInputs = [ audiofile ]
+    ++ optional  openglSupport libGL
+    ++ optional  ibusSupport ibus
+    ++ optionals stdenv.isDarwin [ AudioUnit Cocoa CoreAudio CoreServices ForceFeedback OpenGL ];
 
   # /build/SDL2-2.0.7/src/video/wayland/SDL_waylandevents.c:41:10: fatal error:
   #   pointer-constraints-unstable-v1-client-protocol.h: No such file or directory
   enableParallelBuilding = false;
 
-  # XXX: By default, SDL wants to dlopen() PulseAudio, in which case
-  # we must arrange to add it to its RPATH; however, `patchelf' seems
-  # to fail at doing this, hence `--disable-pulseaudio-shared'.
   configureFlags = configureFlagsFun { inherit alsaLib; };
 
   crossAttrs = {
@@ -75,6 +73,28 @@ stdenv.mkDerivation rec {
     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
+  # confirm that they actually use most of the `propagatedBuildInputs`
+  # from above in this way. This is pretty weird.
+  postFixup = ''
+    for lib in $out/lib/*.so* ; do
+      if [[ -L "$lib" ]]; then
+        patchelf --set-rpath "$(patchelf --print-rpath $lib):${lib.makeLibraryPath propagatedBuildInputs}" "$lib"
+      fi
+    done
+  '';
+
   setupHook = ./setup-hook.sh;
 
   passthru = { inherit openglSupport; };