diff mbox series

[bug#55893] gnu: python-xyz: Add python-pysdl2.

Message ID sI5NpRLWOdEz9zhYZ8sxDXyHrltR220O0Qgg-EI99gO6vQtPhFy5HYBbFOQqE5R9Ra5klbjLXWdrwWWzgDjNfBZg3F0O0cvZYzrFpH0HrFs=@jeandudey.tech
State Accepted
Headers show
Series [bug#55893] gnu: python-xyz: Add python-pysdl2. | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue

Commit Message

Jean Pierre De Jesus DIAZ June 10, 2022, 6:09 p.m. UTC
Adds the PySDL2 package published on PyPi.

The package definition sets a fixed path for SDL2 libraries instead of relying on `LD_LIBRARY_PATH`.

Comments

M June 10, 2022, 10:13 p.m. UTC | #1
Jean Pierre De Jesus DIAZ via Guix-patches via schreef op vr 10-06-2022
om 18:09 [+0000]:
> +    (native-inputs
> +      (list sdl2 sdl2-image sdl2-gfx sdl2-mixer sdl2-ttf))

These need to be in 'inputs', not native-inputs -- their shared
libraries will actually be executed when python-pysdl2 executed, which
can only work if they are compiled for the same architecture as python-
pysdl2 is compiled for (that's what 'inputs' means; for 'native-
inputs', it would be compiled for the architecture on which python-
pysdl2 is compiled, not the architecture it is compiled for). 

> +    (synopsis "Python ctypes wrapper around SDL2")

ctypes sounds like an implementation detail not relevant to users of
python-pysdl2, maybe: ‘Python bindings around SDL2’?

> +                ; Disable pysdl2-dll. Not needed.

Nitpick: the convention is two ;;, not a single ;.

> +                 (string-append "DLL(\"SDL2\", [\"SDL2\", \"SDL2
2.0\","
> +                                "\"SDL2-2.0.0\"], "
> +                                "\""

Thee strings above can be combined.

> +                                (dirname
> +                                  (search-input-file inputs
> +                                                     "/lib/libSDL2.so"))

Indentations seems a bit wonky -- if this is to not make the line too long,
maybe try putting a line break between the 'string-append' and the "DLL(..."?

> +                                "\""
> +                                ")")))

These strings too.

> +    (arguments
> +      `(#:tests? #f ; Requires /dev/dri, OpenGL module, etc.
> +        #:phases
> +        (modify-phases %standard-phases

Recommended style (considered more readable):

  (list #:tests? #f ; etcetera
        #:phases
        #~(modify-phases [etcetera]))

(Many other packages don't do it like that yet, it has only
be discovered recently -- I would point you at IRC logs but
I'm currently offline.)

Also, don't put the package definition simply at the end, that
leads to merge conflicts.  Instead, try keep packages
alphabetical ... which is difficult here, because it has
historically neglected alphebetical ordening, but maybe right
after python-py would be a good fit?

Otherwise, the package definition LGTM from a distance, though
I only looked at the definition, I didn't check the source code
(for simplifying the substitute*-ions or checking for malware)
or build it.

Greetings,
Maxime.
diff mbox series

Patch

From f983d332d6f541e019aa68eddbc14525c549b948 Mon Sep 17 00:00:00 2001
Message-Id: <f983d332d6f541e019aa68eddbc14525c549b948.1654884220.git.me@jeandudey.tech>
From: Jean-Pierre De Jesus DIAZ <me@jeandudey.tech>
Date: Fri, 10 Jun 2022 19:57:31 +0200
Subject: [PATCH] gnu: python-xyz: Add python-pysdl2.

* gnu/packages/python-xyz.scm (python-pysdl2): Add package.
---
 gnu/packages/python-xyz.scm | 73 +++++++++++++++++++++++++++++++++++++
 1 file changed, 73 insertions(+)

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 92adf74393..062d8ce96b 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -123,6 +123,7 @@ 
 ;;; Copyright © 2022 Jai Vetrivelan <jaivetrivelan@gmail.com>
 ;;; Copyright © 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
 ;;; Copyright © 2022 Paul A. Patience <paul@apatience.com>
+;;; Copyright © 2022 Jean-Pierre De Jesus DIAZ <me@jeandudey.tech>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29447,3 +29448,75 @@  (define-public python-musical-scales
 @url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
 Wikipedia}.")
     (license license:expat)))
+
+(define-public python-pysdl2
+  (package
+    (name "python-pysdl2")
+    (version "0.9.11")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "PySDL2" version))
+              (sha256
+               (base32
+                "19id1qswgcj4v4j5kn49shq1xxx3slhjpm0102w87mczsdbi1rck"))))
+    (build-system python-build-system)
+    (arguments
+      `(#:tests? #f ; Requires /dev/dri, OpenGL module, etc.
+        #:phases
+        (modify-phases %standard-phases
+          (add-after 'unpack 'patch-paths
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "sdl2/dll.py"
+                ; Disable pysdl2-dll. Not needed.
+                (("prepath = os\\.getenv\\('PYSDL2_DLL_PATH'\\)")
+                 "prepath = \"system\"")
+                (("^import sdl2dll$") "")
+                (("postpath = os\\.getenv\\('PYSDL2_DLL_PATH'\\)")
+                 "postpath = \"system\"")
+                (("DLL\\(.*, os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)\\)")
+                 (string-append "DLL(\"SDL2\", [\"SDL2\", \"SDL2-2.0\","
+                                "\"SDL2-2.0.0\"], "
+                                "\""
+                                (dirname
+                                  (search-input-file inputs
+                                                     "/lib/libSDL2.so"))
+                                "\""
+                                ")")))
+              (substitute* "sdl2/sdlimage.py"
+                (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
+                 (string-append "\""
+                                (dirname
+                                  (search-input-file inputs
+                                                     "/lib/libSDL2_image.so"))
+                                "\"")))
+              (substitute* "sdl2/sdlgfx.py"
+                (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
+                 (string-append "\""
+                                (dirname
+                                  (search-input-file inputs
+                                                     "/lib/libSDL2_gfx.so"))
+                                "\"")))
+              (substitute* "sdl2/sdlmixer.py"
+                (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
+                 (string-append "\""
+                                (dirname
+                                  (search-input-file inputs
+                                                     "/lib/libSDL2_mixer.so"))
+                                "\"")))
+              (substitute* "sdl2/sdlttf.py"
+                (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
+                 (string-append "\""
+                                (dirname
+                                  (search-input-file inputs
+                                                     "/lib/libSDL2_ttf.so"))
+                                "\""))))))))
+    (native-inputs
+      (list sdl2 sdl2-image sdl2-gfx sdl2-mixer sdl2-ttf))
+    (home-page "https://github.com/py-sdl/py-sdl2")
+    (synopsis "Python ctypes wrapper around SDL2")
+    (description "PySDL2 is a pure Python wrapper around the @code{SDL2},
+@code{SDL2_mixer}, @code{SDL2_image}, @code{SDL2_ttf}, and @code{SDL2_gfx}
+libraries. Instead of relying on C code, it uses the built-in ctypes module to
+interface with SDL2, and provides simple Python classes and wrappers for
+common SDL2 functionality.")
+    (license license:cc0)))
-- 
2.36.1