lol
at 24.11-pre 88 lines 2.5 kB view raw
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})