diff --git a/pkgs/development/libraries/mesa/default.nix b/pkgs/development/libraries/mesa/default.nix index 2c9a22f709ab87..345bbaf251dc31 100644 --- a/pkgs/development/libraries/mesa/default.nix +++ b/pkgs/development/libraries/mesa/default.nix @@ -1,8 +1,8 @@ -{ stdenv, fetchurl, lib -, pkgconfig, intltool, autoreconfHook -, file, expat, libdrm, xorg, wayland, wayland-protocols, openssl +{ stdenv, lib, fetchurl, fetchpatch +, pkgconfig, intltool, ninja, meson +, file, flex, bison, expat, libdrm, xorg, wayland, wayland-protocols, openssl , llvmPackages, libffi, libomxil-bellagio, libva-minimal -, libelf, libvdpau, python2, python2Packages +, libelf, libvdpau, python3Packages , libglvnd , enableRadv ? true , galliumDrivers ? null @@ -32,17 +32,17 @@ let defaultGalliumDrivers = optionals (elem "drm" eglPlatforms) ([ "virgl" ] ++ lib.optionals pciePlatform [ "r300" "r600" "radeonsi" ] ++ lib.optionals (pciePlatform || stdenv.hostPlatform.isAarch32 || stdenv.hostPlatform.isAarch64) [ "nouveau" ] - ++ lib.optionals stdenv.hostPlatform.isx86 [ "i915" "svga" ] + ++ lib.optionals stdenv.hostPlatform.isx86 [ "svga" ] ++ lib.optionals (stdenv.hostPlatform.isAarch32 || stdenv.hostPlatform.isAarch64) [ "vc4" ] ++ lib.optionals stdenv.hostPlatform.isAarch64 [ "freedreno" "etnaviv" "imx" ] ); defaultDriDrivers = optionals (elem "drm" eglPlatforms) ([ ] - ++ lib.optionals pciePlatform [ "radeon" "r200" ] + ++ lib.optionals pciePlatform [ "r200" ] ++ lib.optionals (pciePlatform || stdenv.hostPlatform.isAarch32 || stdenv.hostPlatform.isAarch64) [ "nouveau" ] ++ lib.optionals stdenv.hostPlatform.isx86 [ "i915" "i965" ]); defaultVulkanDrivers = optionals stdenv.hostPlatform.isLinux ([ ] ++ lib.optional stdenv.hostPlatform.isx86 "intel" - ++ lib.optional enableRadv "radeon"); + ++ lib.optional enableRadv "amd"); in let gallium_ = galliumDrivers; dri_ = driDrivers; vulkan_ = vulkanDrivers; in @@ -56,7 +56,7 @@ let driDrivers = (if dri_ == null then optionals (elem "drm" eglPlatforms) defaultDriDrivers - else dri_) ++ lib.optional stdenv.isLinux "swrast"; + else dri_); vulkanDrivers = if vulkan_ == null then defaultVulkanDrivers @@ -64,7 +64,7 @@ let in let - version = "18.3.4"; + version = "19.1.1"; branch = head (splitString "." version); in @@ -79,7 +79,7 @@ stdenv.mkDerivation rec { "ftp://ftp.freedesktop.org/pub/mesa/older-versions/${branch}.x/${version}/mesa-${version}.tar.xz" "https://mesa.freedesktop.org/archive/mesa-${version}.tar.xz" ]; - sha256 = "01xv03ah4l5lcfx015n3fg1620dh4nbbv6gmhh6zhdsx6sj4sc9j"; + sha256 = "10amy5sdmpjbskr3xazgk0jyli8xpgi0y1nsmjr76hx8nhb4n4bj"; }; prePatch = "patchShebangs ."; @@ -88,59 +88,75 @@ stdenv.mkDerivation rec { # revive ./dricore-gallium.patch when it gets ported (from Ubuntu), as it saved # ~35 MB in $drivers; watch https://launchpad.net/ubuntu/+source/mesa/+changelog patches = [ - ./symlink-drivers.patch ./missing-includes.patch # dev_t needs sys/stat.h, time_t needs time.h, etc.-- fixes build w/musl + ./opencl-install-dir.patch ./disk_cache-include-dri-driver-path-in-cache-key.patch - ]; + ] # do not prefix user provided dri-drivers-path + ++ lib.optional (lib.versionOlder version "19.0.0") (fetchpatch { + url = "https://gitlab.freedesktop.org/mesa/mesa/commit/f6556ec7d126b31da37c08d7cb657250505e01a0.patch"; + sha256 = "0z6phi8hbrbb32kkp1js7ggzviq7faz1ria36wi4jbc4in2392d9"; + }) + ++ lib.optionals (lib.versionOlder version "19.1.0") [ + # do not prefix user provided d3d-drivers-path + (fetchpatch { + url = "https://gitlab.freedesktop.org/mesa/mesa/commit/dcc48664197c7e44684ccfb970a4ae083974d145.patch"; + sha256 = "1nhs0xpx3hiy8zfb5gx1zd7j7xha6h0hr7yingm93130a5902lkb"; + }) + + # don't build libGLES*.so with GLVND + (fetchpatch { + url = "https://gitlab.freedesktop.org/mesa/mesa/commit/b01524fff05eef66e8cd24f1c5aacefed4209f03.patch"; + sha256 = "1pszr6acx2xw469zq89n156p3bf3xf84qpbjw5fr1sj642lbyh7c"; + }) + ]; outputs = [ "out" "dev" "drivers" ] ++ lib.optional (elem "swrast" galliumDrivers) "osmesa"; # TODO: Figure out how to enable opencl without having a runtime dependency on clang - configureFlags = [ - "--sysconfdir=${libglvnd.driverLink}/etc" - "--localstatedir=/var" - "--with-dri-driverdir=$(drivers)/lib/dri" - "--with-dri-searchpath=${libglvnd.driverLink}/lib/dri" - "--with-platforms=${concatStringsSep "," eglPlatforms}" - "--with-gallium-drivers=${concatStringsSep "," galliumDrivers}" - "--with-dri-drivers=${concatStringsSep "," driDrivers}" - "--with-vulkan-drivers=${concatStringsSep "," vulkanDrivers}" - "--enable-texture-float" - (enableFeature stdenv.isLinux "dri3") - (enableFeature stdenv.isLinux "nine") # Direct3D in Wine - (enableFeature stdenv.isLinux "libglvnd") - "--enable-dri" - "--enable-driglx-direct" - "--enable-gles1" - "--enable-gles2" - "--enable-glx" - # https://bugs.freedesktop.org/show_bug.cgi?id=35268 - (enableFeature (!stdenv.hostPlatform.isMusl) "glx-tls") - # used by wine - (enableFeature (elem "swrast" galliumDrivers) "gallium-osmesa") - "--enable-llvm" - (enableFeature stdenv.isLinux "egl") - (enableFeature stdenv.isLinux "xa") # used in vmware driver - (enableFeature stdenv.isLinux "gbm") - "--enable-xvmc" - "--enable-vdpau" - "--enable-shared-glapi" - "--enable-llvm-shared-libs" - (enableFeature stdenv.isLinux "omx-bellagio") - (enableFeature stdenv.isLinux "va") - "--disable-opencl" - ]; - - nativeBuildInputs = [ - autoreconfHook intltool pkgconfig file - python2 python2Packages.Mako - ]; - - propagatedBuildInputs = with xorg; [ - libXdamage libXxf86vm - ] ++ optional stdenv.isLinux libdrm - ++ optionals stdenv.isDarwin [ OpenGL Xplugin ]; + mesonFlags = [ + "--sysconfdir=/etc" + + # Don't build in debug mode + # https://gitlab.freedesktop.org/mesa/mesa/blob/master/docs/meson.html#L327 + "-Db_ndebug=true" + + "-Ddisk-cache-key=${placeholder "drivers"}" + "-Ddri-search-path=${libglvnd.driverLink}/lib/dri" + + "-Dplatforms=${concatStringsSep "," eglPlatforms}" + "-Ddri-drivers=${concatStringsSep "," driDrivers}" + "-Dgallium-drivers=${concatStringsSep "," galliumDrivers}" + "-Dvulkan-drivers=${concatStringsSep "," vulkanDrivers}" + + "-Ddri-drivers-path=${placeholder "drivers"}/lib/dri" + "-Dvdpau-libs-path=${placeholder "drivers"}/lib/vdpau" + "-Dxvmc-libs-path=${placeholder "drivers"}/lib" + "-Domx-libs-path=${placeholder "drivers"}/lib/bellagio" + "-Dva-libs-path=${placeholder "drivers"}/lib/dri" + "-Dd3d-drivers-path=${placeholder "drivers"}/lib/d3d" + + "-Dgallium-vdpau=true" + "-Dgallium-xvmc=true" + "-Dgallium-opencl=disabled" + "-Dshared-glapi=true" + "-Dgles1=true" + "-Dgles2=true" + "-Dglx=dri" + "-Dglvnd=true" + "-Dllvm=true" + "-Dshared-llvm=true" + "-Dglx-direct=true" + ] ++ optional (elem "swrast" galliumDrivers) "-Dosmesa=gallium" # used by wine + ++ optionals (stdenv.isLinux) [ + "-Ddri3=true" + "-Dgallium-omx=bellagio" + "-Dgallium-va=true" + "-Dgallium-xa=true" # used in vmware driver + "-Dgallium-nine=true" # Direct3D in Wine + "-Dgbm=true" + "-Degl=true" + ]; buildInputs = with xorg; [ expat llvmPackages.llvm libglvnd xorgproto @@ -151,50 +167,38 @@ stdenv.mkDerivation rec { ++ lib.optionals stdenv.isLinux [ libomxil-bellagio libva-minimal ] ++ lib.optional withValgrind valgrind-light; + nativeBuildInputs = [ + pkgconfig meson ninja + intltool bison flex file + python3Packages.python python3Packages.Mako + ]; + + propagatedBuildInputs = with xorg; [ + libXdamage libXxf86vm + ] ++ optional stdenv.isLinux libdrm + ++ optionals stdenv.isDarwin [ OpenGL Xplugin ]; + enableParallelBuilding = true; doCheck = false; - installFlags = [ - "sysconfdir=\${drivers}/etc" - "localstatedir=\${TMPDIR}" - "vendorjsondir=\${out}/share/glvnd/egl_vendor.d" - ]; - - # TODO: probably not all .la files are completely fixed, but it shouldn't matter; postInstall = '' # Some installs don't have any drivers so this directory is never created. mkdir -p $drivers '' + optionalString (galliumDrivers != []) '' + mkdir -p $drivers/lib + # move gallium-related stuff to $drivers, so $out doesn't depend on LLVM - mv -t "$drivers/lib/" \ - $out/lib/libXvMC* \ - $out/lib/d3d \ - $out/lib/vdpau \ - $out/lib/bellagio \ + mv -t $drivers/lib \ $out/lib/libxatracker* \ $out/lib/libvulkan_* # Move other drivers to a separate output - mv $out/lib/dri/* $drivers/lib/dri # */ - rmdir "$out/lib/dri" mv $out/lib/lib*_mesa* $drivers/lib # move libOSMesa to $osmesa, as it's relatively big - mkdir -p {$osmesa,$drivers}/lib/ + mkdir -p $osmesa/lib mv -t $osmesa/lib/ $out/lib/libOSMesa* - # now fix references in .la files - sed "/^libdir=/s,$out,$osmesa," -i $osmesa/lib/libOSMesa*.la - - # set the default search path for DRI drivers; used e.g. by X server - substituteInPlace "$dev/lib/pkgconfig/dri.pc" --replace '$(drivers)' "${libglvnd.driverLink}" - - # remove GLES libraries; they are provided by libglvnd - rm $out/lib/lib{GLESv1_CM,GLESv2}.* - - # remove pkgconfig files for GL/GLES/EGL; they are provided by libGL. - rm $dev/lib/pkgconfig/{gl,egl,glesv1_cm,glesv2}.pc - # move vendor files mv $out/share/ $drivers/ @@ -202,11 +206,6 @@ stdenv.mkDerivation rec { for js in $drivers/share/glvnd/egl_vendor.d/*.json; do substituteInPlace "$js" --replace '"libEGL_' '"'"$drivers/lib/libEGL_" done - - # Update search path used by pkg-config - for pc in $dev/lib/pkgconfig/{d3d,dri,xatracker}.pc; do - substituteInPlace "$pc" --replace $out $drivers - done '' + optionalString (vulkanDrivers != []) '' # Update search path used by Vulkan (it's pointing to $out but # drivers are in $drivers) @@ -219,6 +218,17 @@ stdenv.mkDerivation rec { # check $out doesn't depend on llvm: builder failures are ignored # for some reason grep -qv '${llvmPackages.llvm}' -R "$out"; postFixup = optionalString (galliumDrivers != []) '' + # set the default search path for DRI drivers; used e.g. by X server + substituteInPlace "$dev/lib/pkgconfig/dri.pc" --replace "$drivers" "${libglvnd.driverLink}" + + # remove pkgconfig files for GL/EGL; they are provided by libGL. + rm $dev/lib/pkgconfig/{gl,egl}.pc + + # Update search path used by pkg-config + for pc in $dev/lib/pkgconfig/{d3d,dri,xatracker}.pc; do + substituteInPlace "$pc" --replace $out $drivers + done + # add RPATH so the drivers can find the moved libgallium and libdricore9 # moved here to avoid problems with stripping patchelfed files for lib in $drivers/lib/*.so* $drivers/lib/*/*.so*; do @@ -241,4 +251,3 @@ stdenv.mkDerivation rec { maintainers = with maintainers; [ vcunat ]; }; } - diff --git a/pkgs/development/libraries/mesa/disk_cache-include-dri-driver-path-in-cache-key.patch b/pkgs/development/libraries/mesa/disk_cache-include-dri-driver-path-in-cache-key.patch index 37813db893471e..1e280b64ee5fb7 100644 --- a/pkgs/development/libraries/mesa/disk_cache-include-dri-driver-path-in-cache-key.patch +++ b/pkgs/development/libraries/mesa/disk_cache-include-dri-driver-path-in-cache-key.patch @@ -6,29 +6,30 @@ Subject: [PATCH] disk_cache: include dri driver path in cache key This fixes invalid cache hits on NixOS where all shared library timestamps in /nix/store are zero. --- - src/util/Makefile.am | 3 +++ + meson_options.txt | 6 ++++++ src/util/disk_cache.c | 3 +++ - 2 files changed, 6 insertions(+) + src/util/meson.build | 7 ++++++- + 3 files changed, 15 insertions(+), 1 deletion(-) -diff --git a/src/util/Makefile.am b/src/util/Makefile.am -index bafb57439a..a22e2e41eb 100644 ---- a/src/util/Makefile.am -+++ b/src/util/Makefile.am -@@ -35,6 +35,9 @@ noinst_LTLIBRARIES = \ - libmesautil.la \ - libxmlconfig.la - -+AM_CFLAGS = \ -+ -DDISK_CACHE_KEY=\"$(drivers)\" -+ - AM_CPPFLAGS = \ - $(PTHREAD_CFLAGS) \ - -I$(top_srcdir)/include +diff --git a/meson_options.txt b/meson_options.txt +index a723b5406cf..65a8954291f 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -330,3 +330,9 @@ option( + value : true, + description : 'Enable direct rendering in GLX and EGL for DRI', + ) ++option( ++ 'disk-cache-key', ++ type : 'string', ++ value : '', ++ description : 'Mesa cache key.' ++) diff --git a/src/util/disk_cache.c b/src/util/disk_cache.c -index 368ec41792..071220b2ba 100644 +index 0aa2646a9bb..bd784d38e21 100644 --- a/src/util/disk_cache.c +++ b/src/util/disk_cache.c -@@ -388,8 +388,10 @@ disk_cache_create(const char *gpu_name, const char *driver_id, +@@ -389,8 +389,10 @@ disk_cache_create(const char *gpu_name, const char *driver_id, /* Create driver id keys */ size_t id_size = strlen(driver_id) + 1; @@ -39,7 +40,7 @@ index 368ec41792..071220b2ba 100644 cache->driver_keys_blob_size += gpu_name_size; /* We sometimes store entire structs that contains a pointers in the cache, -@@ -410,6 +412,7 @@ disk_cache_create(const char *gpu_name, const char *driver_id, +@@ -411,6 +413,7 @@ disk_cache_create(const char *gpu_name, const char *driver_id, uint8_t *drv_key_blob = cache->driver_keys_blob; DRV_KEY_CPY(drv_key_blob, &cache_version, cv_size) DRV_KEY_CPY(drv_key_blob, driver_id, id_size) @@ -47,6 +48,24 @@ index 368ec41792..071220b2ba 100644 DRV_KEY_CPY(drv_key_blob, gpu_name, gpu_name_size) DRV_KEY_CPY(drv_key_blob, &ptr_size, ptr_size_size) DRV_KEY_CPY(drv_key_blob, &driver_flags, driver_flags_size) +diff --git a/src/util/meson.build b/src/util/meson.build +index 397c2228129..77013563e5d 100644 +--- a/src/util/meson.build ++++ b/src/util/meson.build +@@ -120,7 +120,12 @@ libmesa_util = static_library( + [files_mesa_util, format_srgb], + include_directories : inc_common, + dependencies : [dep_zlib, dep_clock, dep_thread, dep_atomic, dep_m], +- c_args : [c_msvc_compat_args, c_vis_args], ++ c_args : [ ++ c_msvc_compat_args, c_vis_args, ++ '-DDISK_CACHE_KEY="@0@"'.format( ++ get_option('disk-cache-key') ++ ), ++ ], + build_by_default : false + ) + -- -2.19.1 +2.19.2 diff --git a/pkgs/development/libraries/mesa/opencl-install-dir.patch b/pkgs/development/libraries/mesa/opencl-install-dir.patch new file mode 100644 index 00000000000000..fe85d2c90bb24a --- /dev/null +++ b/pkgs/development/libraries/mesa/opencl-install-dir.patch @@ -0,0 +1,12 @@ +diff --git a/src/gallium/targets/opencl/meson.build b/src/gallium/targets/opencl/meson.build +index 317ad8dab4a..5567308caf0 100644 +--- a/src/gallium/targets/opencl/meson.build ++++ b/src/gallium/targets/opencl/meson.build +@@ -68,6 +68,6 @@ if with_opencl_icd + input : 'mesa.icd.in', + output : 'mesa.icd', + install : true, +- install_dir : join_paths(get_option('sysconfdir'), 'OpenCL', 'vendors'), ++ install_dir : join_paths(get_option('prefix'), 'etc', 'OpenCL', 'vendors'), + ) + endif diff --git a/pkgs/development/libraries/mesa/symlink-drivers.patch b/pkgs/development/libraries/mesa/symlink-drivers.patch deleted file mode 100644 index af2ec9fdb096db..00000000000000 --- a/pkgs/development/libraries/mesa/symlink-drivers.patch +++ /dev/null @@ -1,112 +0,0 @@ -diff -ru -x '*~' mesa-12.0.3-orig/src/gallium/targets/dri/Makefile.am mesa-12.0.3/src/gallium/targets/dri/Makefile.am ---- mesa-12.0.3-orig/src/gallium/targets/dri/Makefile.am 2016-09-08 18:57:48.000000000 +0200 -+++ mesa-12.0.3/src/gallium/targets/dri/Makefile.am 2016-09-22 14:42:19.173575498 +0200 -@@ -134,14 +134,13 @@ - done; - endif - --# hardlink each megadriver instance, but don't actually have --# gallium_dri.so in the set of final installed files. -+# symlink each megadriver instance. - install-data-hook: - for i in $(TARGET_DRIVERS); do \ -- ln -f $(DESTDIR)$(dridir)/gallium_dri.so \ -+ ln -srf $(DESTDIR)$(dridir)/gallium_dri.so \ - $(DESTDIR)$(dridir)/$${i}_dri.so; \ - done; \ -- $(RM) $(DESTDIR)$(dridir)/gallium_dri.*; \ -+ $(RM) $(DESTDIR)$(dridir)/gallium_dri.la \ - $(RM) -d $(DESTDIR)$(dridir) &>/dev/null || true - - uninstall-hook: - for i in $(TARGET_DRIVERS); do \ -diff -ru -x '*~' mesa-12.0.3-orig/src/gallium/targets/va/Makefile.am mesa-12.0.3/src/gallium/targets/va/Makefile.am ---- mesa-12.0.3-orig/src/gallium/targets/va/Makefile.am 2016-09-08 18:57:48.000000000 +0200 -+++ mesa-12.0.3/src/gallium/targets/va/Makefile.am 2016-09-22 14:45:39.635963339 +0200 -@@ -71,10 +71,10 @@ - # gallium_drv_video.so in the set of final installed files. - install-data-hook: - for i in $(TARGET_DRIVERS); do \ -- ln -f $(DESTDIR)$(vadir)/gallium_drv_video.so \ -+ ln -srf $(DESTDIR)$(vadir)/gallium_drv_video.so \ - $(DESTDIR)$(vadir)/$${i}_drv_video.so; \ - done; \ -- $(RM) $(DESTDIR)$(vadir)/gallium_drv_video.* -+ $(RM) $(DESTDIR)$(vadir)/gallium_drv_video.la - - uninstall-hook: - for i in $(TARGET_DRIVERS); do \ -diff -ru -x '*~' mesa-12.0.3-orig/src/gallium/targets/vdpau/Makefile.am mesa-12.0.3/src/gallium/targets/vdpau/Makefile.am ---- mesa-12.0.3-orig/src/gallium/targets/vdpau/Makefile.am 2016-05-24 21:19:37.000000000 +0200 -+++ mesa-12.0.3/src/gallium/targets/vdpau/Makefile.am 2016-09-22 14:42:19.173575498 +0200 -@@ -103,15 +103,14 @@ - done; - endif - --# hardlink each megadriver instance, but don't actually have --# libvdpau_gallium.so in the set of final installed files. -+# symlink each megadriver instance. - install-data-hook: - $(AM_V_GEN)dest_dir=$(DESTDIR)/$(vdpaudir); \ - for i in $(TARGET_DRIVERS); do \ - j=libvdpau_gallium.$(LIB_EXT); \ - k=libvdpau_$${i}.$(LIB_EXT); \ - l=$${k}.$(VDPAU_MAJOR).$(VDPAU_MINOR).0; \ -- ln -f $${dest_dir}/$${j}.$(VDPAU_MAJOR).$(VDPAU_MINOR).0 \ -+ ln -srf $${dest_dir}/$${j}.$(VDPAU_MAJOR).$(VDPAU_MINOR).0 \ - $${dest_dir}/$${l}; \ - ln -sf $${l} \ - $${dest_dir}/$${k}.$(VDPAU_MAJOR).$(VDPAU_MINOR); \ -@@ -120,7 +119,7 @@ - ln -sf $${l} \ - $${dest_dir}/$${k}; \ - done; \ -- $(RM) $${dest_dir}/libvdpau_gallium.*; \ -+ $(RM) $${dest_dir}/libvdpau_gallium.la \ - $(RM) -d $${dest_dir} &>/dev/null || true - - uninstall-hook: - for i in $(TARGET_DRIVERS); do \ -diff -ru -x '*~' mesa-12.0.3-orig/src/gallium/targets/xvmc/Makefile.am mesa-12.0.3/src/gallium/targets/xvmc/Makefile.am ---- mesa-12.0.3-orig/src/gallium/targets/xvmc/Makefile.am 2016-05-24 21:19:37.000000000 +0200 -+++ mesa-12.0.3/src/gallium/targets/xvmc/Makefile.am 2016-09-22 14:54:22.291014543 +0200 -@@ -73,7 +73,7 @@ - j=libXvMCgallium.$(LIB_EXT); \ - k=libXvMC$${i}.$(LIB_EXT); \ - l=$${k}.$(XVMC_MAJOR).$(XVMC_MINOR).0; \ -- ln -f $${dest_dir}/$${j}.$(XVMC_MAJOR).$(XVMC_MINOR).0 \ -+ ln -srf $${dest_dir}/$${j}.$(XVMC_MAJOR).$(XVMC_MINOR).0 \ - $${dest_dir}/$${l}; \ - ln -sf $${l} \ - $${dest_dir}/$${k}.$(XVMC_MAJOR).$(XVMC_MINOR); \ -@@ -82,7 +82,7 @@ - ln -sf $${l} \ - $${dest_dir}/$${k}; \ - done; \ -- $(RM) $${dest_dir}/libXvMCgallium.*; \ -+ $(RM) $${dest_dir}/libXvMCgallium.la \ - $(RM) -d $${dest_dir} &>/dev/null || true - - uninstall-hook: - for i in $(TARGET_DRIVERS); do \ -diff -ru -x '*~' mesa-12.0.3-orig/src/mesa/drivers/dri/Makefile.am mesa-12.0.3/src/mesa/drivers/dri/Makefile.am ---- mesa-12.0.3-orig/src/mesa/drivers/dri/Makefile.am 2016-09-08 18:57:48.000000000 +0200 -+++ mesa-12.0.3/src/mesa/drivers/dri/Makefile.am 2016-09-22 14:42:19.173575498 +0200 -@@ -94,14 +94,13 @@ - done; - endif - --# hardlink each megadriver instance, but don't actually have --# mesa_dri_drivers.so in the set of final installed files. -+# symink each megadriver instance. - install-data-hook: - for i in $(MEGADRIVERS); do \ -- ln -f $(DESTDIR)$(dridir)/mesa_dri_drivers.so \ -+ ln -srf $(DESTDIR)$(dridir)/mesa_dri_drivers.so \ - $(DESTDIR)$(dridir)/$$i; \ - done; -- $(RM) $(DESTDIR)$(dridir)/mesa_dri_drivers.* -+ $(RM) $(DESTDIR)$(dridir)/mesa_dri_drivers.la - - uninstall-hook: - for i in $(MEGADRIVERS); do \