mesa: add driversdev output and test that dev doesn't depend on drivers

OpenGL applications should not depend on the Mesa drivers, since these
are supposed to be loaded at runtime from /run/opengl-driver using the
glvnd library.  Furthermore, the drivers output has a large closure
since it depends on LLVM.

The only dependency from dev to drivers came from the xatracker
pkg-config file.  This commit moves this file into a new
output called driversdev.
launchpad/nixpkgs/master
Gabriel Ebner 3 years ago
parent aa0b68b26a
commit acbfd3f7c0
  1. 35
      pkgs/development/libraries/mesa/default.nix
  2. 2
      pkgs/servers/x11/xorg/overrides.nix

@ -34,9 +34,8 @@ let
# Release frequency: https://www.mesa3d.org/releasing.html#schedule
version = "21.0.2";
branch = versions.major version;
in
stdenv.mkDerivation {
self = stdenv.mkDerivation {
pname = "mesa";
inherit version;
@ -88,7 +87,9 @@ stdenv.mkDerivation {
"find_program('${stdenv.cc.targetPrefix}nm')"
'';
outputs = [ "out" "dev" "drivers" ] ++ lib.optional enableOSMesa "osmesa";
outputs = [ "out" "dev" "drivers" ]
++ lib.optional enableOSMesa "osmesa"
++ lib.optional stdenv.isLinux "driversdev";
# TODO: Figure out how to enable opencl without having a runtime dependency on clang
mesonFlags = [
@ -181,20 +182,22 @@ stdenv.mkDerivation {
mv -t $osmesa/lib/ $out/lib/libOSMesa*
'';
# TODO:
# check $out doesn't depend on llvm: builder failures are ignored
# for some reason grep -qv '${llvmPackages.llvm}' -R "$out";
postFixup = optionalString stdenv.isLinux ''
# set the default search path for DRI drivers; used e.g. by X server
substituteInPlace "$dev/lib/pkgconfig/dri.pc" --replace "$drivers" "${libglvnd.driverLink}"
substituteInPlace "$dev/lib/pkgconfig/d3d.pc" --replace "$drivers" "${libglvnd.driverLink}"
# remove pkgconfig files for GL/EGL; they are provided by libGL.
rm -f $dev/lib/pkgconfig/{gl,egl}.pc
# Update search path used by pkg-config
for pc in $dev/lib/pkgconfig/{d3d,dri,xatracker}.pc; do
if [ -f "$pc" ]; then
substituteInPlace "$pc" --replace $out $drivers
# Move development files for libraries in $drivers to $driversdev
mkdir -p $driversdev/include
mv $dev/include/xa_* $dev/include/d3d* $driversdev/include
mkdir -p $driversdev/lib/pkgconfig
for pc in lib/pkgconfig/{xatracker,d3d}.pc; do
if [ -f "$dev/$pc" ]; then
substituteInPlace "$dev/$pc" --replace $out $drivers
mv $dev/$pc $driversdev/$pc
fi
done
@ -212,6 +215,14 @@ stdenv.mkDerivation {
passthru = {
inherit libdrm;
inherit (libglvnd) driverLink;
tests.devDoesNotDependOnLLVM = stdenv.mkDerivation {
name = "mesa-dev-does-not-depend-on-llvm";
buildCommand = ''
echo ${self.dev} >>$out
'';
disallowedRequisites = [ llvmPackages.llvm self.drivers ];
};
};
meta = {
@ -231,4 +242,6 @@ stdenv.mkDerivation {
platforms = platforms.mesaPlatforms;
maintainers = with maintainers; [ primeos vcunat ]; # Help is welcome :)
};
}
};
in self

@ -433,7 +433,7 @@ self: super:
});
xf86videovmware = super.xf86videovmware.overrideAttrs (attrs: {
buildInputs = attrs.buildInputs ++ [ mesa llvm ]; # for libxatracker
buildInputs = attrs.buildInputs ++ [ mesa mesa.driversdev llvm ]; # for libxatracker
meta = attrs.meta // {
platforms = ["i686-linux" "x86_64-linux"];
};

Loading…
Cancel
Save