;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2021 Adam Kandur ;;; Copyright © 2021 Morgan Smith ;;; Copyright © 2021, 2023 Daniel Meißner ;;; Copyright © 2023 Adam Faiz ;;; Copyright © 2023 Simon Tournier ;;; Copyright © 2024 Sharlatan Hellseher (define-module (gnu packages python-graphics) #:use-module ((guix licenses) #:prefix license:) #:use-module ((guix build-system python) #:select (pypi-uri)) #:use-module (guix build-system pyproject) #:use-module (guix download) #:use-module (guix gexp) #:use-module (guix git-download) #:use-module (guix packages) #:use-module (gnu packages) #:use-module (gnu packages audio) #:use-module (gnu packages check) #:use-module (gnu packages compression) #:use-module (gnu packages fontutils) #:use-module (gnu packages gl) #:use-module (gnu packages base) #:use-module (gnu packages gtk) #:use-module (gnu packages pulseaudio) #:use-module (gnu packages python-build) #:use-module (gnu packages python-xyz) #:use-module (gnu packages video) #:use-module (gnu packages xorg)) ;;; Commentary: ;;; ;;; Python modules which are meant to be used in GUI creation or mainly are ;;; bindings to low level libraries such as Glue, Mesa, OpenGL, Xorg etc. ;;; ;;; Please: Try to add new module packages in alphabetic order. ;;; ;;; Code: (define-public python-glcontext (let (;; Upstream is known for abusing mutable tag, hence pinpoint the ;; relevant commit. (revision "2") (commit "f2875abdb18b24e785c3958cc22845c81725d5cd")) (package (name "python-glcontext") (version (git-version "3.0.0" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/moderngl/glcontext") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 "15pngnc4agdvm8crq782vjlb5v1qrclln5xpqiyhz3jhmipsqb8q")))) (build-system pyproject-build-system) (arguments (list #:phases #~(modify-phases %standard-phases (add-before 'build 'fix-lib-paths (lambda* (#:key inputs outputs #:allow-other-keys) (let ((libgl (assoc-ref inputs "libgl")) (libx11 (assoc-ref inputs "libx11"))) (substitute* '("glcontext/x11.cpp" "glcontext/egl.cpp") (("\"libGL.so\"") (string-append "\"" libgl "/lib/libGL.so\"")) (("\"libEGL.so\"") (string-append "\"" libgl "/lib/libEGL.so\"")) (("\"libX11.so\"") (string-append "\"" libx11 "/lib/libX11.so\""))) (substitute* '("glcontext/__init__.py") (("find_library\\('GL'\\)") (string-append "'" libgl "/lib/libGL.so'")) (("find_library\\('EGL'\\)") (string-append "'" libgl "/lib/libEGL.so'")) (("find_library\\(\"X11\"\\)") (string-append "'" libx11 "/lib/libX11.so'")))))) (add-before 'check 'prepare-test-environment (lambda _ (system "Xvfb :1 &") (setenv "DISPLAY" ":1")))))) (inputs (list libx11 libgl)) (native-inputs (list python-psutil python-pytest python-setuptools python-wheel xorg-server-for-tests)) (home-page "https://github.com/moderngl/glcontext") (synopsis "Portable OpenGL Context for ModernGL") (description "Python-glcontext is a library providing an OpenGL implementation for ModernGL on multiple platforms.") (license license:expat)))) (define-public python-pyglet (package (name "python-pyglet") (version "2.0.18") (source (origin (method url-fetch) (uri (pypi-uri "pyglet" version)) (sha256 (base32 "1p4rizj81vfqxal288m3afbrgk0il3w7k5kmhai2sah8f26j7ybw")))) (build-system pyproject-build-system) (arguments (list #:test-flags #~(list "tests" "--ignore=tests/interactive" ;; All tests errored "--ignore=tests/integration/media/test_openal.py" "--ignore=tests/integration/text/test_empty_document.py" ;; Tests failed "-k" (string-append "not test2" " and not test5" " and not testPad" " and not testPad" " and not testRange" " and not testRect" " and not testRect" " and not testSet" " and not testSquare" " and not testSquare" " and not testTuple" " and not testTupleRange" " and not test_context_noshare_texture" " and not test_context_share_texture" " and not test_method" " and not test_openal_listener" " and not test_parse_all_controller_mappings" " and not test_player_play" " and not test_player_play_multiple" " and not test_stream_write_needed" " and not test_window_caption" " and not test_window_caption_from_argv")) #:phases #~(modify-phases %standard-phases (add-after 'unpack 'patch-lib-paths (lambda* (#:key inputs #:allow-other-keys) (substitute* (list "pyglet/font/fontconfig.py" "pyglet/font/freetype_lib.py" "pyglet/gl/lib_glx.py" "pyglet/input/linux/evdev.py" "pyglet/libs/egl/egl.py" "pyglet/libs/egl/lib.py" "pyglet/libs/x11/xf86vmode.py" "pyglet/libs/x11/xinerama.py" "pyglet/libs/x11/xlib.py" "pyglet/libs/x11/xsync.py" "pyglet/media/drivers/openal/lib_openal.py" "pyglet/media/drivers/pulse/lib_pulseaudio.py") (("'EGL'") (format #f "'~a/~a'" #$(this-package-input "libgl") "lib/libEGL.so")) (("\"fontconfig\"") (format #f "'~a/~a'" #$(this-package-input "fontconfig-minimal") "lib/libfontconfig.so")) (("\"freetype\"") (format #f "'~a/~a'" #$(this-package-input "freetype") "lib/libfreetype.so")) (("'GL'") (format #f "'~a/~a'" #$(this-package-input "libgl") "lib/libGL.so")) (("'GLU'") (format #f "'~a/~a'" #$(this-package-input "glu") "lib/libGLU.so")) (("'X11'") (format #f "'~a/~a'" #$(this-package-input "libx11") "lib/libX11.so")) (("'Xext'") (format #f "'~a/~a'" #$(this-package-input "libxext") "lib/libXext.so")) (("'Xinerama'") (format #f "'~a/~a'" #$(this-package-input "libxinerama") "lib/libXinerama.so")) (("'Xxf86vm'") (format #f "'~a/~a'" #$(this-package-input "libxxf86vm") "lib/libXxf86vm.so")) (("'c'") (format #f "'~a/~a'" #$(this-package-input "glibc") "lib/libc.so")) (("'gdk-x11-2.0'") (format #f "'~a/~a'" #$(this-package-input "gtk+") "lib/gdk-pixbuf-2.0.so")) (("'gdk_pixbuf-2.0'") (format #f "'~a/~a'" #$(this-package-input "gdk-pixbuf") "lib/libgdk_pixbuf-2.0.so")) (("'openal'") (format #f "'~a/~a'" #$(this-package-input "openal") "lib/libopenal.so")) (("'pulse'") (format #f "'~a/~a'" #$(this-package-input "pulseaudio") "lib/libpulse.so"))))) (add-before 'check 'prepare-test-environment (lambda _ ;; The test suite requires a running X server. (system "Xvfb :1 &") (setenv "DISPLAY" ":1") (setenv "HOME" "/tmp") (setenv "PYGLET_HEADLESS" "True")))))) (native-inputs (list python-flit-core python-pytest unzip xorg-server-for-tests)) (inputs (list ffmpeg fontconfig freeglut freetype gdk-pixbuf glibc glu gtk+ libx11 libxext libxinerama libxxf86vm libgl openal pulseaudio)) (home-page "https://github.com/pyglet/pyglet") (synopsis "Windowing and multimedia library") (description "Pyglet is a Python library for developing games and other visually-rich applications. It supports windowing, user interface event handling, Joysticks, OpenGL graphics, loading images and videos, playing sounds and music." ) (license license:bsd-3))) ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above in alphabetical order. ;;;