diff --git a/pkgs/development/libraries/mesa/default.nix b/pkgs/development/libraries/mesa/default.nix index 3475a5997eaf..5ff884fd3c1d 100644 --- a/pkgs/development/libraries/mesa/default.nix +++ b/pkgs/development/libraries/mesa/default.nix @@ -26,7 +26,7 @@ if ! lists.elem stdenv.system platforms.mesaPlatforms then else let - version = "13.0.0"; + version = "12.0.3"; branch = head (splitString "." version); driverLink = "/run/opengl-driver" + optionalString stdenv.isi686 "-32"; in @@ -40,7 +40,7 @@ stdenv.mkDerivation { "ftp://ftp.freedesktop.org/pub/mesa/older-versions/${branch}.x/${version}/mesa-${version}.tar.xz" "https://launchpad.net/mesa/trunk/${version}/+download/mesa-${version}.tar.xz" ]; - sha256 = "09yp4wh89srxqqzsnrqgw4gmx68mgxic5nbrprl6l1l2zzmv9vcl"; + sha256 = "1dc86dd9b51272eee1fad3df65e18cda2e556ef1bc0b6e07cd750b9757f493b1"; }; prePatch = "patchShebangs ."; @@ -51,7 +51,11 @@ stdenv.mkDerivation { patches = [ ./glx_ro_text_segm.patch # fix for grsecurity/PaX ./symlink-drivers.patch - ]; + ] ++ optional stdenv.isLinux + (substituteAll { + src = ./dlopen-absolute-paths.diff; + libudev = systemd.lib; + }); postPatch = '' substituteInPlace src/egl/main/egldriver.c \ diff --git a/pkgs/development/libraries/mesa/dlopen-absolute-paths.diff b/pkgs/development/libraries/mesa/dlopen-absolute-paths.diff new file mode 100644 index 000000000000..9a5226572239 --- /dev/null +++ b/pkgs/development/libraries/mesa/dlopen-absolute-paths.diff @@ -0,0 +1,22 @@ +diff --git a/loader.c b/loader.c +index 4fdf3c2..69ea22d 100644 +--- a/src/loader/loader.c ++++ b/src/loader/loader.c +@@ -112,7 +112,7 @@ static void *udev_handle = NULL; + static void * + udev_dlopen_handle(void) + { +- char name[80]; ++ char name[256]; + unsigned flags = RTLD_NOLOAD | RTLD_LOCAL | RTLD_LAZY; + int version; + +@@ -126,7 +126,7 @@ udev_dlopen_handle(void) + /* First try opening an already linked libudev, then try loading one */ + do { + for (version = 1; version >= 0; version--) { +- snprintf(name, sizeof(name), "libudev.so.%d", version); ++ snprintf(name, sizeof(name), "@libudev@/lib/libudev.so.%d", version); + udev_handle = dlopen(name, flags); + if (udev_handle) + return udev_handle;