Files
nixpkgs/pkgs/development/python-modules/pyglet/default.nix
T
Alyssa Ross d4a72a3935 lib.platforms.mesaPlatforms: remove
Mesa is a package like any other.  There's no reason for it to be a
special case with its platforms listed in lib, because if other
packages want to refer to mesa's platforms, they can access the
platforms from the package meta like they would for any other package.
2024-08-31 10:28:31 +02:00

116 lines
3.5 KiB
Nix

{
lib,
stdenv,
buildPythonPackage,
fetchPypi,
unzip,
pythonOlder,
libGL,
libGLU,
xorg,
pytestCheckHook,
glibc,
gtk2-x11,
gdk-pixbuf,
fontconfig,
freetype,
ffmpeg-full,
openal,
libpulseaudio,
mesa,
}:
buildPythonPackage rec {
version = "2.0.10";
format = "setuptools";
pname = "pyglet";
disabled = pythonOlder "3.6";
src = fetchPypi {
inherit pname version;
hash = "sha256-JCvrGzvWfFvr3+W6EexWtpathrUMbn8qMX+NeDJWuck=";
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 = '${lib.getLib 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 = "Cross-platform windowing and multimedia library";
license = licenses.bsd3;
inherit (mesa.meta) platforms;
};
}