1{ lib
2, stdenv
3, fetchFromGitHub
4, meson
5, ninja
6, pkg-config
7, utilmacros
8, python3
9, libGL
10, libX11
11, Carbon
12, OpenGL
13, x11Support ? !stdenv.isDarwin
14}:
15
16stdenv.mkDerivation rec {
17 pname = "libepoxy";
18 version = "1.5.10";
19
20 src = fetchFromGitHub {
21 owner = "anholt";
22 repo = pname;
23 rev = version;
24 sha256 = "sha256-gZiyPOW2PeTMILcPiUTqPUGRNlMM5mI1z9563v4SgEs=";
25 };
26
27 patches = [ ./libgl-path.patch ];
28
29 postPatch = ''
30 patchShebangs src/*.py
31 ''
32 + lib.optionalString stdenv.isDarwin ''
33 substituteInPlace src/dispatch_common.h --replace "PLATFORM_HAS_GLX 0" "PLATFORM_HAS_GLX 1"
34 ''
35 # cgl_core and cgl_epoxy_api fail in darwin sandbox and on Hydra (because it's headless?)
36 + lib.optionalString stdenv.isDarwin ''
37 substituteInPlace test/meson.build \
38 --replace "[ 'cgl_epoxy_api', [ 'cgl_epoxy_api.c' ] ]," ""
39 ''
40 + lib.optionalString (stdenv.isDarwin && stdenv.isx86_64) ''
41 substituteInPlace test/meson.build \
42 --replace "[ 'cgl_core', [ 'cgl_core.c' ] ]," ""
43 '';
44
45 outputs = [ "out" "dev" ];
46
47 nativeBuildInputs = [ meson ninja pkg-config utilmacros python3 ];
48
49 buildInputs = lib.optionals (x11Support && !stdenv.isDarwin) [
50 libGL
51 ] ++ lib.optionals x11Support [
52 libX11
53 ] ++ lib.optionals stdenv.isDarwin [
54 Carbon
55 OpenGL
56 ];
57
58 mesonFlags = [
59 "-Degl=${if (x11Support && !stdenv.isDarwin) then "yes" else "no"}"
60 "-Dglx=${if x11Support then "yes" else "no"}"
61 "-Dtests=${lib.boolToString doCheck}"
62 "-Dx11=${lib.boolToString x11Support}"
63 ];
64
65 env.NIX_CFLAGS_COMPILE = lib.optionalString (x11Support && !stdenv.isDarwin) ''-DLIBGL_PATH="${lib.getLib libGL}/lib"'';
66
67 doCheck = true;
68
69 meta = with lib; {
70 description = "A library for handling OpenGL function pointer management";
71 homepage = "https://github.com/anholt/libepoxy";
72 license = licenses.mit;
73 maintainers = with maintainers; [ goibhniu ];
74 platforms = platforms.unix;
75 pkgConfigModules = [ "epoxy" ];
76 };
77}