From 9f1bd63fb5b6916f07d454ffde27cd3a66c95bb5 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Fri, 29 Apr 2022 17:34:16 -0400 Subject: [PATCH] gnu: renpy: Build with Python 3. * 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 @@ developed mainly for Ren'py.") (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 @@ developed mainly for Ren'py.") #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 @@ developed mainly for Ren'py.") (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 @@ developed mainly for Ren'py.") (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 @@ developed mainly for Ren'py.") (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 @@ developed mainly for Ren'py.") (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 @@ developed mainly for Ren'py.") 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 @@ the launcher and common Ren'py code provided by the @code{renpy} package and 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")