From ccfc0d599ddf41e353ce0a8c52a64c75eddfd49e Mon Sep 17 00:00:00 2001 From: Orivej Desh Date: Sun, 10 Jun 2018 22:29:24 +0000 Subject: [PATCH] SDL2: do not propagate private dependencies Fixes #41620 by adding libGL directory to libSDL2 runpath --- pkgs/development/libraries/SDL2/default.nix | 41 +++++++++++++-------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/pkgs/development/libraries/SDL2/default.nix b/pkgs/development/libraries/SDL2/default.nix index 990daf19685d..7d8f5b2caee6 100644 --- a/pkgs/development/libraries/SDL2/default.nix +++ b/pkgs/development/libraries/SDL2/default.nix @@ -1,14 +1,14 @@ -{ stdenv, lib, fetchurl, pkgconfig, audiofile +{ stdenv, lib, fetchurl, pkgconfig, pruneLibtoolFiles , openglSupport ? false, libGL , alsaSupport ? true, alsaLib -, x11Support ? true, libICE, libXi, libXScrnSaver, libXcursor, libXinerama, libXext, libXxf86vm, libXrandr +, x11Support ? true, libX11, xproto, libICE, libXi, libXScrnSaver, libXcursor, libXinerama, libXext, libXxf86vm, libXrandr , waylandSupport ? true, wayland, wayland-protocols, libxkbcommon , dbusSupport ? false, dbus , udevSupport ? false, udev , ibusSupport ? false, ibus , pulseaudioSupport ? true, libpulseaudio , AudioUnit, Cocoa, CoreAudio, CoreServices, ForceFeedback, OpenGL -, libiconv +, audiofile, libiconv }: # NOTE: When editing this expression see if the same change applies to @@ -33,18 +33,26 @@ stdenv.mkDerivation rec { patches = [ ./find-headers.patch ]; - nativeBuildInputs = [ pkgconfig ]; + nativeBuildInputs = [ pkgconfig pruneLibtoolFiles ]; - propagatedBuildInputs = [ libiconv ] - ++ optional dbusSupport dbus - ++ optional udevSupport udev - ++ optionals x11Support [ libICE libXi libXScrnSaver libXcursor libXinerama libXext libXrandr libXxf86vm ] - ++ optionals waylandSupport [ wayland wayland-protocols libxkbcommon ] + propagatedBuildInputs = dlopenPropagatedBuildInputs; + + dlopenPropagatedBuildInputs = [ ] + # Propagated for #include in SDL_opengles.h. + ++ optional openglSupport libGL + # Propagated for #include and in SDL_syswm.h. + ++ optionals x11Support [ libX11 xproto ]; + + dlopenBuildInputs = [ ] ++ optional alsaSupport alsaLib - ++ optional pulseaudioSupport libpulseaudio; + ++ 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 = [ audiofile ] - ++ optional openglSupport libGL + buildInputs = [ audiofile libiconv ] + ++ dlopenBuildInputs ++ optional ibusSupport ibus ++ optionals stdenv.isDarwin [ AudioUnit Cocoa CoreAudio CoreServices ForceFeedback OpenGL ]; @@ -76,12 +84,13 @@ stdenv.mkDerivation rec { # 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 = optionalString (stdenv.hostPlatform.extensions.sharedLibrary == ".so") '' + # 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):${lib.makeLibraryPath propagatedBuildInputs}" "$lib" + patchelf --set-rpath "$(patchelf --print-rpath $lib):${rpath}" "$lib" fi done '';