lol
1{ stdenv
2, libglvnd
3, mesa
4, OpenGL
5, testers
6}:
7
8stdenv.mkDerivation (finalAttrs: {
9 pname = "libGL";
10 inherit (if stdenv.hostPlatform.isDarwin then mesa else libglvnd) version;
11 outputs = [ "out" "dev" ];
12
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
21
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
25
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
33
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
41
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 ''
50
51 # Otherwise, setup gl stubs to use libglvnd.
52 else ''
53 mkdir -p $out/nix-support
54 ln -s ${libglvnd.out}/lib $out/lib
55
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
59
60 genPkgConfig() {
61 local name="$1"
62 local lib="$2"
63
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 }
72
73 genPkgConfig gl GL
74 genPkgConfig egl EGL
75 genPkgConfig glesv1_cm GLESv1_CM
76 genPkgConfig glesv2 GLESv2
77 '';
78
79 passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
80
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)
86 homepage license platforms badPlatforms;
87 };
88})