Files
nixpkgs/pkgs/development/python-modules/pyglet/default.nix
T
Guillaume Girol 33afbf39f6 treewide: switch to nativeCheckInputs
checkInputs used to be added to nativeBuildInputs. Now we have
nativeCheckInputs to do that instead. Doing this treewide change allows
to keep hashes identical to before the introduction of
nativeCheckInputs.
2023-01-21 12:00:00 +00:00

112 lines
3.3 KiB
Nix

{ lib, stdenv
, buildPythonPackage
, fetchPypi
, unzip
, pythonOlder
, libGL
, libGLU
, xorg
, pytestCheckHook
, glibc
, gtk2-x11
, gdk-pixbuf
, fontconfig
, freetype
, ffmpeg-full
, openal
, libpulseaudio
}:
buildPythonPackage rec {
version = "2.0.2.1";
pname = "pyglet";
disabled = pythonOlder "3.6";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-WonGjdooD3Yb3rAha536An+y4nUZoOo8FvZViyBPHl8=";
extension = "zip";
};
# find_library doesn't reliably work with nix (https://github.com/NixOS/nixpkgs/issues/7307).
# Even naively searching `LD_LIBRARY_PATH` won't work since `libc.so` is a linker script and
# ctypes.cdll.LoadLibrary cannot deal with those. Therefore, just hardcode the paths to the
# necessary libraries.
postPatch = let
ext = stdenv.hostPlatform.extensions.sharedLibrary;
in ''
cat > pyglet/lib.py <<EOF
import ctypes
def load_library(*names, **kwargs):
for name in names:
path = None
if name == 'GL':
path = '${libGL}/lib/libGL${ext}'
elif name == 'EGL':
path = '${libGL}/lib/libEGL${ext}'
elif name == 'GLU':
path = '${libGLU}/lib/libGLU${ext}'
elif name == 'c':
path = '${glibc}/lib/libc${ext}.6'
elif name == 'X11':
path = '${xorg.libX11}/lib/libX11${ext}'
elif name == 'gdk-x11-2.0':
path = '${gtk2-x11}/lib/libgdk-x11-2.0${ext}'
elif name == 'gdk_pixbuf-2.0':
path = '${gdk-pixbuf}/lib/libgdk_pixbuf-2.0${ext}'
elif name == 'Xext':
path = '${xorg.libXext}/lib/libXext${ext}'
elif name == 'fontconfig':
path = '${fontconfig.lib}/lib/libfontconfig${ext}'
elif name == 'freetype':
path = '${freetype}/lib/libfreetype${ext}'
elif name[0:2] == 'av' or name[0:2] == 'sw':
path = '${ffmpeg-full}/lib/lib' + name + '${ext}'
elif name == 'openal':
path = '${openal}/lib/libopenal${ext}'
elif name == 'pulse':
path = '${libpulseaudio}/lib/libpulse${ext}'
elif name == 'Xi':
path = '${xorg.libXi}/lib/libXi${ext}'
elif name == 'Xinerama':
path = '${xorg.libXinerama}/lib/libXinerama${ext}'
elif name == 'Xxf86vm':
path = '${xorg.libXxf86vm}/lib/libXxf86vm${ext}'
if path is not None:
return ctypes.cdll.LoadLibrary(path)
raise Exception("Could not load library {}".format(names))
EOF
'';
nativeBuildInputs = [ unzip ];
# needs GL set up which isn't really possible in a build environment even in headless mode.
# tests do run and pass in nix-shell, however.
doCheck = false;
nativeCheckInputs = [
pytestCheckHook
];
preCheck = ''
export PYGLET_HEADLESS=True
'';
# test list taken from .travis.yml
disabledTestPaths = [
"tests/base"
"tests/interactive"
"tests/integration"
"tests/unit/text/test_layout.py"
];
pythonImportsCheck = [ "pyglet" ];
meta = with lib; {
homepage = "http://www.pyglet.org/";
description = "A cross-platform windowing and multimedia library";
license = licenses.bsd3;
platforms = platforms.mesaPlatforms;
};
}