Merge pull request #119126 from fabaff/pycomfoconnect
[NixPkgs.git] / pkgs / development / python-modules / pyglet / default.nix
blob1bb36d6029ecc8ec64634afa04da98264fdded4e
1 { lib, stdenv
2 , buildPythonPackage
3 , fetchPypi
4 , libGL
5 , libGLU
6 , xorg
7 , future
8 , pytest
9 , glibc
10 , gtk2-x11
11 , gdk-pixbuf
12 , fontconfig
13 , freetype
14 , ffmpeg-full
17 buildPythonPackage rec {
18   version = "1.4.2";
19   pname = "pyglet";
21   src = fetchPypi {
22     inherit pname version;
23     sha256 = "1dxxrl4nc7xh3aai1clgzvk48bvd35r7ksirsddz0mwhx7jmm8px";
24   };
26   # find_library doesn't reliably work with nix (https://github.com/NixOS/nixpkgs/issues/7307).
27   # Even naively searching `LD_LIBRARY_PATH` won't work since `libc.so` is a linker script and
28   # ctypes.cdll.LoadLibrary cannot deal with those. Therefore, just hardcode the paths to the
29   # necessary libraries.
30   postPatch = let
31     ext = stdenv.hostPlatform.extensions.sharedLibrary;
32   in ''
33     cat > pyglet/lib.py <<EOF
34     import ctypes
35     def load_library(*names, **kwargs):
36         for name in names:
37             path = None
38             if name == 'GL':
39                 path = '${libGL}/lib/libGL${ext}'
40             elif name == 'GLU':
41                 path = '${libGLU}/lib/libGLU${ext}'
42             elif name == 'c':
43                 path = '${glibc}/lib/libc${ext}.6'
44             elif name == 'X11':
45                 path = '${xorg.libX11}/lib/libX11${ext}'
46             elif name == 'gdk-x11-2.0':
47                 path = '${gtk2-x11}/lib/libgdk-x11-2.0${ext}'
48             elif name == 'gdk_pixbuf-2.0':
49                 path = '${gdk-pixbuf}/lib/libgdk_pixbuf-2.0${ext}'
50             elif name == 'Xext':
51                 path = '${xorg.libXext}/lib/libXext${ext}'
52             elif name == 'fontconfig':
53                 path = '${fontconfig.lib}/lib/libfontconfig${ext}'
54             elif name == 'freetype':
55                 path = '${freetype}/lib/libfreetype${ext}'
56             elif name[0:2] == 'av' or name[0:2] == 'sw':
57                 path = '${ffmpeg-full}/lib/lib' + name + '${ext}'
58             if path is not None:
59                 return ctypes.cdll.LoadLibrary(path)
60         raise Exception("Could not load library {}".format(names))
61     EOF
62   '';
64   propagatedBuildInputs = [ future ];
66   # needs an X server. Keep an eye on
67   # https://bitbucket.org/pyglet/pyglet/issues/219/egl-support-headless-rendering
68   doCheck = false;
70   checkInputs = [
71     pytest
72   ];
74   checkPhase = ''
75     py.test tests/unit tests/integration
76   '';
78   meta = with lib; {
79     homepage = "http://www.pyglet.org/";
80     description = "A cross-platform windowing and multimedia library";
81     license = licenses.bsd3;
82     platforms = platforms.mesaPlatforms;
83   };