Subject: [PATCH 081/602] gnu: renpy: Build with Python 3.

From: Maxim Cournoyer <[email-masked]>
Date: Sun, 15 May 2022 00:37:48 -0400

* gnu/packages/game-development.scm (renpy)[python]: Delete argument.
[phases]: Delete trailing #t.
[propagated-inputs]: Update the inputs to their Python 3 counterparts.
[native-inputs]: Likewise.
---
 gnu/packages/game-development.scm | 197 ++----------------------------
 1 file changed, 10 insertions(+), 187 deletions(-)

diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index d8725e837c..961b396ea7 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -1263,9 +1263,9 @@ (define-public python-pygame-sdl2
 (define-public python2-pygame-sdl2
   (package-with-python2 python-pygame-sdl2))
 
-(define-public python2-renpy
+(define-public renpy
   (package
-    (name "python2-renpy")
+    (name "renpy")
     (version "7.4.11")
     (source
      (origin
@@ -1284,8 +1284,7 @@ (define-public python2-renpy
            #t))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f ; Ren'py doesn't seem to package tests
-       #:python ,python-2
+     `(#:tests? #f                      ; Ren'py doesn't seem to package tests
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-commands
@@ -1293,8 +1292,7 @@ (define-public python2-renpy
              (substitute* "renpy/editor.py"
                (("xdg-open")
                 (string-append (assoc-ref inputs "xdg-utils")
-                               "/bin/xdg-open")))
-             #t))
+                               "/bin/xdg-open")))))
          (add-after 'unpack 'fix-include-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "module/setup.py"
@@ -1305,8 +1303,7 @@ (define-public python2-renpy
              (setenv "RENPY_CYTHON"
                      (search-input-file (or native-inputs inputs)
                                         "/bin/cython"))
-             (setenv "RENPY_DEPS_INSTALL" (string-join (map cdr inputs) ":"))
-             #t))
+             (setenv "RENPY_DEPS_INSTALL" (string-join (map cdr inputs) ":"))))
          (replace 'build
            (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
              ;; The "module" subdirectory contains a python (really cython)
@@ -1316,8 +1313,7 @@ (define-public python2-renpy
                (apply (assoc-ref %standard-phases 'build) args))
              ;; The above only builds the cython modules, but nothing else,
              ;; so we do that here.
-             (invoke "python" "-m" "compileall" "renpy")
-             #t))
+             (invoke "python" "-m" "compileall" "renpy")))
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
              ;; Again, we have to wrap the module installation.
@@ -1332,8 +1328,9 @@ (define-public python2-renpy
                  (apply (assoc-ref %standard-phases 'install) args))
                (copy-recursively "renpy"
                                  (string-append out site "/renpy"))
-               (delete-file-recursively (string-append out site "/renpy/common")))
-             #t)))))
+               (delete-file-recursively (string-append out site
+                                                       "/renpy/common"))))))))
+    (native-inputs (list python-cython))
     (inputs
      (list ffmpeg
            freetype
@@ -1342,11 +1339,7 @@ (define-public python2-renpy
            libpng
            (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
            xdg-utils))
-    (propagated-inputs
-     `(("python2-future" ,python2-future)
-       ("python2-pygame" ,python2-pygame-sdl2)))
-    (native-inputs
-     (list python2-cython))
+    (propagated-inputs (list python-future python-pygame-sdl2))
     (home-page "https://www.renpy.org/")
     (synopsis "Ren'py python module")
     (description "This package contains the shared libraries and Python modules
@@ -1355,176 +1348,6 @@ (define-public python2-renpy
 are only used to bootstrap it.")
     (license license:expat)))
 
-(define-public renpy
-  (package
-    (inherit python2-renpy)
-    (name "renpy")
-    (build-system python-build-system)
-    (arguments
-     `(#:tests? #f ; see python2-renpy
-       #:python ,python-2
-       #:modules ((srfi srfi-1)
-                  (guix build python-build-system)
-                  (guix build utils))
-       #:imported-modules ((srfi srfi-1) ,@%python-build-system-modules)
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-commands
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (substitute* "launcher/game/choose_directory.rpy"
-               (("/usr/bin/python")
-                (string-append (assoc-ref inputs "python2")
-                               "/bin/python2")))
-             (substitute* "launcher/game/front_page.rpy"
-               (("xdg-open")
-                (string-append (assoc-ref inputs "xdg-utils")
-                               "/bin/xdg-open")))
-             (substitute* "launcher/game/project.rpy"
-               (("cmd = \\[ executable, \"-EO\", sys.argv\\[0\\] \\]")
-                (string-append "cmd = [ \"" (assoc-ref outputs "out")
-                               "/bin/renpy\" ]"))
-               ;; Projects are still created in the usual style, so we need
-               ;; to adjust the path.
-               (("cmd.append\\(self.path\\)")
-                "cmd.append(self.path + \"/game\")"))
-             #t))
-         (add-after 'unpack 'drop-game-from-paths
-           (lambda _
-             (substitute* (list "launcher/game/gui7.rpy"
-                                "launcher/game/gui7/images.py")
-               ((", \"game\",") ","))
-             #t))
-         (add-before 'build 'start-xserver
-           (lambda* (#:key inputs native-inputs #:allow-other-keys)
-             (let ((xorg-server (assoc-ref (or native-inputs inputs)
-                                           "xorg-server")))
-               (setenv "HOME" (getcwd))
-               (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
-               (setenv "DISPLAY" ":1")
-               #t)))
-         (replace 'build
-           (lambda _
-             (invoke "python" "renpy.py" "launcher" "quit")
-             (invoke "python" "renpy.py" "the_question" "quit")
-             (invoke "python" "renpy.py" "tutorial" "quit")
-             #t))
-         (replace 'install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             ;; Here we install our custom renpy program.
-             ;; After finishing this step, "out" will have the following:
-             ;; |-- bin/renpy
-             ;; `-- share/renpy ; i.e. path_to_renpy_base()
-             ;;     |-- common
-             ;;     `-- gui
-             ;;
-             ;; Note that common shares the source files that would be installed
-             ;; by python2-renpy (which are instead deleted from that package),
-             ;; but also contains their byte-compiled versions.
-             ;; On other systems, renpy_base would point to site-packages or
-             ;; even somewhere in /opt.
-             ;; The former approach is not as straightforward as it seems
-             ;; -- it causes renpy to load files twice for some weird reason --
-             ;; and the latter is impossible on Guix. Hence the detour through
-             ;; share/renpy and the custom renpy program.
-             ;;
-             ;; As a convention, other games should be installed as
-             ;; subdirectories of share/renpy in their respective outputs as
-             ;; well. This differs from the traditional layout, which is
-             ;; roughly the following:
-             ;; `-- Super Awesome Game
-             ;;     |-- game       ; <- the folder we actually want
-             ;;     |-- lib        ; compiled renpy module and dependencies
-             ;;     |-- renpy      ; yet another copy of Ren'py's code
-             ;;     |   |-- common ; the common folder from above
-             ;;     |   `-- ...    ; Python code (source + compiled)
-             ;;     |-- Super Awesome Game.py
-             ;;     `-- Super Awesome Game.sh
-             (let* ((out (assoc-ref outputs "out"))
-                    (bin/renpy (string-append out "/bin/renpy")))
-               (copy-recursively "renpy/common"
-                                 (string-append out "/share/renpy/common"))
-               (copy-recursively "gui"
-                                 (string-append out "/share/renpy/gui"))
-
-               (mkdir-p (string-append out "/bin"))
-               (copy-file (assoc-ref inputs "renpy.in") bin/renpy)
-               (substitute* bin/renpy
-                 (("@PYTHON@") (search-input-file inputs "bin/python2"))
-                 (("@RENPY_BASE@") (string-append out "/share/renpy")))
-               (chmod bin/renpy #o755))))
-
-         (add-after 'install 'install-games
-           (lambda* (#:key outputs #:allow-other-keys)
-             (define renpy (assoc-ref outputs "out"))
-             ;; TODO: We should offer a renpy-build-system to make the
-             ;; installation of Ren'py games easier.
-             (define* (install-renpy-game #:key output game name (renpy renpy)
-                                          #:allow-other-keys)
-               (let* ((name (or name (basename game)))
-                      (launcher (string-append output "/bin/renpy-" name))
-                      (share (string-append output "/share/renpy/" name)))
-                 (copy-recursively (string-append game "/game") share)
-                 (mkdir-p (string-append output "/bin"))
-                 (with-output-to-file launcher
-                   (lambda ()
-                     (format #t
-                             "#!~a~%~a ~a \"$@\""
-                             (which "bash")
-                             (string-append renpy "/bin/renpy")
-                             share)))
-                 (chmod launcher #o755)))
-
-             (install-renpy-game #:output (assoc-ref outputs "out")
-                                 #:game "launcher")
-
-             (install-renpy-game #:output (assoc-ref outputs "the-question")
-                                 #:game "the_question"
-                                 #:name "the-question")
-
-             (install-renpy-game #:output (assoc-ref outputs "tutorial")
-                                 #:game "tutorial")
-             #t))
-         (replace 'wrap
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (site (string-append "/lib/python"
-                                        (python-version
-                                         (assoc-ref inputs "python"))
-                                        "/site-packages")))
-               (wrap-program (string-append out "/bin/renpy")
-                 `("GUIX_PYTHONPATH" =
-                   (,@(delete-duplicates
-                       (map
-                        (lambda (store-path)
-                          (string-append store-path site))
-                        (cons (assoc-ref outputs "out")
-                              (map cdr
-                                   (filter
-                                    (lambda (input)
-                                      (string-prefix? "python2" (car input)))
-                                    inputs))))))))
-               #t))))))
-    (inputs
-     `(("renpy.in" ,(search-auxiliary-file "renpy/renpy.in"))
-       ("python2-renpy" ,python2-renpy)
-       ("python2-tkinter" ,python-2 "tk")
-       ("python2" ,python-2) ; for ‘fix-commands’ and ‘wrap’
-       ("xdg-utils" ,xdg-utils)))
-    (propagated-inputs '())
-    (native-inputs
-     (list xorg-server-for-tests))
-    (outputs
-     (list "out" "tutorial" "the-question"))
-    (home-page "https://www.renpy.org/")
-    (synopsis "Visual Novel Engine")
-    (description "Ren'Py is a visual novel engine that helps you use words,
-images, and sounds to tell interactive stories that run on computers and
-mobile devices.  These can be both visual novels and life simulation games.
-The easy to learn script language allows anyone to efficiently write large
-visual novels, while its Python scripting is enough for complex simulation
-games.")
-    (license license:expat)))
-
 (define-public python-pyxel
   (package
     (name "python-pyxel")
-- 
2.36.0