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.
parent
da52f45208
commit
9f1bd63fb5
|
@ -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")
|
||||
|
|
Reference in New Issue