{ stdenv , libglvnd, mesa , OpenGL }: stdenv.mkDerivation { inherit (libglvnd) version; pname = "libGL"; outputs = [ "out" "dev" ]; # On macOS, libglvnd is not supported, so we just use what mesa # build. We need to also include OpenGL.framework, and some # extra tricks to go along with. We add mesa’s libGLX to support # the X extensions to OpenGL. buildCommand = if stdenv.hostPlatform.isDarwin then '' mkdir -p $out/nix-support $dev echo ${OpenGL} >> $out/nix-support/propagated-build-inputs ln -s ${mesa.out}/lib $out/lib mkdir -p $dev/lib/pkgconfig $dev/nix-support echo "$out" > $dev/nix-support/propagated-build-inputs ln -s ${mesa.dev}/include $dev/include cat <<EOF >$dev/lib/pkgconfig/gl.pc Name: gl Description: gl library Version: ${mesa.version} Libs: -L${mesa.out}/lib -lGL Cflags: -I${mesa.dev}/include EOF cat <<EOF >$dev/lib/pkgconfig/glesv1_cm.pc Name: glesv1_cm Description: glesv1_cm library Version: ${mesa.version} Libs: -L${mesa.out}/lib -lGLESv1_CM Cflags: -I${mesa.dev}/include EOF cat <<EOF >$dev/lib/pkgconfig/glesv2.pc Name: glesv2 Description: glesv2 library Version: ${mesa.version} Libs: -L${mesa.out}/lib -lGLESv2 Cflags: -I${mesa.dev}/include EOF '' # Otherwise, setup gl stubs to use libglvnd. else '' mkdir -p $out/nix-support ln -s ${libglvnd.out}/lib $out/lib mkdir -p $dev/{,lib/pkgconfig,nix-support} echo "$out ${libglvnd} ${libglvnd.dev}" > $dev/nix-support/propagated-build-inputs ln -s ${mesa.dev}/include $dev/include genPkgConfig() { local name="$1" local lib="$2" cat <<EOF >$dev/lib/pkgconfig/$name.pc Name: $name Description: $lib library Version: ${mesa.version} Libs: -L${libglvnd.out}/lib -l$lib Cflags: -I${mesa.dev}/include -I${libglvnd.dev}/include EOF } genPkgConfig gl GL genPkgConfig egl EGL genPkgConfig glesv1_cm GLESv1_CM genPkgConfig glesv2 GLESv2 ''; }