Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / development / libraries / mesa / stubs.nix
blob773897548a427c9b9a60aeaa2fe932529b0e0457
1 { stdenv
2 , libglvnd
3 , mesa
4 , OpenGL
5 , testers
6 }:
8 stdenv.mkDerivation (finalAttrs: {
9   pname = "libGL";
10   inherit (if stdenv.hostPlatform.isDarwin then mesa else libglvnd) version;
11   outputs = [ "out" "dev" ];
13   # On macOS, libglvnd is not supported, so we just use what mesa
14   # build. We need to also include OpenGL.framework, and some
15   # extra tricks to go along with. We add mesa’s libGLX to support
16   # the X extensions to OpenGL.
17   buildCommand = if stdenv.hostPlatform.isDarwin then ''
18     mkdir -p $out/nix-support $dev
19     echo ${OpenGL} >> $out/nix-support/propagated-build-inputs
20     ln -s ${mesa.out}/lib $out/lib
22     mkdir -p $dev/lib/pkgconfig $dev/nix-support
23     echo "$out" > $dev/nix-support/propagated-build-inputs
24     ln -s ${mesa.dev}/include $dev/include
26     cat <<EOF >$dev/lib/pkgconfig/gl.pc
27   Name: gl
28   Description: gl library
29   Version: ${mesa.version}
30   Libs: -L${mesa.out}/lib -lGL
31   Cflags: -I${mesa.dev}/include
32   EOF
34     cat <<EOF >$dev/lib/pkgconfig/glesv1_cm.pc
35   Name: glesv1_cm
36   Description: glesv1_cm library
37   Version: ${mesa.version}
38   Libs: -L${mesa.out}/lib -lGLESv1_CM
39   Cflags: -I${mesa.dev}/include
40   EOF
42     cat <<EOF >$dev/lib/pkgconfig/glesv2.pc
43   Name: glesv2
44   Description: glesv2 library
45   Version: ${mesa.version}
46   Libs: -L${mesa.out}/lib -lGLESv2
47   Cflags: -I${mesa.dev}/include
48   EOF
49   ''
51   # Otherwise, setup gl stubs to use libglvnd.
52   else ''
53     mkdir -p $out/nix-support
54     ln -s ${libglvnd.out}/lib $out/lib
56     mkdir -p $dev/{,lib/pkgconfig,nix-support}
57     echo "$out ${libglvnd} ${libglvnd.dev}" > $dev/nix-support/propagated-build-inputs
58     ln -s ${libglvnd.dev}/include $dev/include
60     genPkgConfig() {
61       local name="$1"
62       local lib="$2"
64       cat <<EOF >$dev/lib/pkgconfig/$name.pc
65     Name: $name
66     Description: $lib library
67     Version: ${libglvnd.version}
68     Libs: -L${libglvnd.out}/lib -l$lib
69     Cflags: -I${libglvnd.dev}/include
70     EOF
71     }
73     genPkgConfig gl GL
74     genPkgConfig egl EGL
75     genPkgConfig glesv1_cm GLESv1_CM
76     genPkgConfig glesv2 GLESv2
77   '';
79   passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
81   meta = {
82     description = "Stub bindings using " + (if stdenv.hostPlatform.isDarwin then "mesa" else "libglvnd");
83     pkgConfigModules = [ "gl" "egl" "glesv1_cm" "glesv2" ];
84   } // {
85     inherit (if stdenv.hostPlatform.isDarwin then mesa.meta else libglvnd.meta) homepage license platforms;
86   };