[PATCH 0/2] Add Ren'py build system

  • Done
  • quality assurance status badge
Details
2 participants
  • Leo Prikler
  • Nicolas Goaziou
Owner
unassigned
Submitted by
Leo Prikler
Severity
normal

Debbugs page

Leo Prikler wrote 4 years ago
(address . guix-patches@gnu.org)
6bf051d15833939d09f190d11cdbbf7954fdc3c0.camel@student.tugraz.at
Hi Guix,

a proper Ren'py build system had been on my TODO list ever since I've
packaged it back in 2019, but I've so far been too lazy to actually
create one. While I'm happy to announce, that this is no longer the
case, there are still a number of things, that can be improved in our
Ren'py package and build system.

This series contains two patches. The first adds the build system, the
second a package example for "The Question". Since "The Question" is
already an output of Ren'py, I don't see much value in this patch other
than for explanatory purposes, so I don't think I'll commit that one.
Instead, I'll probably redefine Ren'py once the first patch is merged.
I'm building this series on top of #45736, so things might be a bit
different on master, but I hope it works out regardless.

Regards,
Leo
Leo Prikler wrote 4 years ago
[PATCH 1/2] build-system: Add renpy-build-system.
(address . 46053@debbugs.gnu.org)
20210123134656.18353-1-leo.prikler@student.tugraz.at
* guix/build/renpy-build-system.scm: New file.
* guix/build-system/renpy.scm: New file.
* Makefile.am (MODULES): Add them here.
---
Makefile.am | 2 +
guix/build-system/renpy.scm | 131 ++++++++++++++++++++++++++++++
guix/build/renpy-build-system.scm | 99 ++++++++++++++++++++++
3 files changed, 232 insertions(+)
create mode 100644 guix/build-system/renpy.scm
create mode 100644 guix/build/renpy-build-system.scm

Toggle diff (264 lines)
diff --git a/Makefile.am b/Makefile.am
index 8a8133d669..c2d71ca5be 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -150,6 +150,7 @@ MODULES = \
guix/build-system/node.scm \
guix/build-system/perl.scm \
guix/build-system/python.scm \
+ guix/build-system/renpy.scm \
guix/build-system/ocaml.scm \
guix/build-system/qt.scm \
guix/build-system/waf.scm \
@@ -205,6 +206,7 @@ MODULES = \
guix/build/ocaml-build-system.scm \
guix/build/qt-build-system.scm \
guix/build/r-build-system.scm \
+ guix/build/renpy-build-system.scm \
guix/build/rakudo-build-system.scm \
guix/build/ruby-build-system.scm \
guix/build/scons-build-system.scm \
diff --git a/guix/build-system/renpy.scm b/guix/build-system/renpy.scm
new file mode 100644
index 0000000000..35edc0056d
--- /dev/null
+++ b/guix/build-system/renpy.scm
@@ -0,0 +1,131 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Leo Prikler <leo.prikler@student.tugraz.at>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix build-system renpy)
+ #:use-module (guix store)
+ #:use-module (guix utils)
+ #:use-module (guix memoization)
+ #:use-module (guix packages)
+ #:use-module (guix derivations)
+ #:use-module (guix search-paths)
+ #:use-module (guix build-system)
+ #:use-module (guix build-system gnu)
+ #:use-module (ice-9 match)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-26)
+ #:export (%renpy-build-system-modules
+ default-renpy
+ renpy-build
+ renpy-build-system))
+
+(define (default-renpy)
+ "Return the default Ren'py package."
+ ;; Lazily resolve the binding to avoid a circular dependency.
+ (let ((module (resolve-interface '(gnu packages game-development))))
+ (module-ref module 'renpy)))
+
+(define %renpy-build-system-modules
+ ;; Build-side modules imported by default.
+ `((guix build renpy-build-system)
+ (guix build json)
+ (guix build python-build-system)
+ ,@%gnu-build-system-modules))
+
+(define* (lower name
+ #:key source inputs native-inputs outputs system target
+ (renpy (default-renpy))
+ #:allow-other-keys
+ #:rest arguments)
+ "Return a bag for NAME."
+ (define private-keywords
+ '(#:source #:target #:renpy #:inputs #:native-inputs))
+
+ (and (not target) ;XXX: no cross-compilation
+ (bag
+ (name name)
+ (system system)
+ (host-inputs `(,@(if source
+ `(("source" ,source))
+ '())
+ ,@inputs
+
+ ;; Keep the standard inputs of 'gnu-build-system'.
+ ,@(standard-packages)))
+ (build-inputs `(("renpy" ,renpy)
+ ,@native-inputs))
+ (outputs outputs)
+ (build renpy-build)
+ (arguments (strip-keyword-arguments private-keywords arguments)))))
+
+(define* (renpy-build store name inputs
+ #:key
+ (phases '(@ (guix build renpy-build-system)
+ %standard-phases))
+ (configure-flags ''())
+ (outputs '("out"))
+ (output "out")
+ (game "game")
+ (search-paths '())
+ (system (%current-system))
+ (guile #f)
+ (imported-modules %renpy-build-system-modules)
+ (modules '((guix build renpy-build-system)
+ (guix build utils))))
+ "Build SOURCE using RENPY, and with INPUTS."
+ (define builder
+ `(begin
+ (use-modules ,@modules)
+ (renpy-build #:name ,name
+ #:source ,(match (assoc-ref inputs "source")
+ (((? derivation? source))
+ (derivation->output-path source))
+ ((source)
+ source)
+ (source
+ source))
+ #:configure-flags ,configure-flags
+ #:system ,system
+ #:phases ,phases
+ #:outputs %outputs
+ #:output ,output
+ #:game ,game
+ #:search-paths ',(map search-path-specification->sexp
+ search-paths)
+ #:inputs %build-inputs)))
+
+ (define guile-for-build
+ (match guile
+ ((? package?)
+ (package-derivation store guile system #:graft? #f))
+ (#f ; the default
+ (let* ((distro (resolve-interface '(gnu packages commencement)))
+ (guile (module-ref distro 'guile-final)))
+ (package-derivation store guile system #:graft? #f)))))
+
+ (build-expression->derivation store name builder
+ #:inputs inputs
+ #:system system
+ #:modules imported-modules
+ #:outputs outputs
+ #:guile-for-build guile-for-build))
+
+(define renpy-build-system
+ (build-system
+ (name 'renpy)
+ (description "The Ren'py build system")
+ (lower lower)))
diff --git a/guix/build/renpy-build-system.scm b/guix/build/renpy-build-system.scm
new file mode 100644
index 0000000000..464fc97b13
--- /dev/null
+++ b/guix/build/renpy-build-system.scm
@@ -0,0 +1,99 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Leo Prikler <leo.prikler@student.tugraz.at>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix build renpy-build-system)
+ #:use-module ((guix build gnu-build-system) #:prefix gnu:)
+ #:use-module ((guix build python-build-system) #:prefix python:)
+ #:use-module (guix build json)
+ #:use-module (guix build utils)
+ #:use-module (ice-9 match)
+ #:use-module (ice-9 ftw)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-26)
+ #:export (%standard-phases
+ renpy-build))
+
+(define* (build #:key game #:allow-other-keys)
+ (for-each make-file-writable
+ (find-files game (lambda (pred stat)
+ (eq? (stat:type stat) 'directory))))
+ (invoke "renpy"
+ "--json-dump" (string-append game "/renpy-build.json")
+ game
+ ;; should be "compile", but renpy wants to compile itself really
+ ;; badly if we do
+ "quit")
+ #t)
+
+(define* (install #:key outputs game (output "out") #:allow-other-keys)
+ (let* ((out (assoc-ref outputs output))
+ (json-dump (call-with-input-file (string-append game
+ "/renpy-build.json")
+ read-json))
+ (build (assoc-ref json-dump "build"))
+ (executable-name (assoc-ref build "executable_name"))
+ (directory-name (assoc-ref build "directory_name")))
+ (let ((launcher (string-append out "/bin/" executable-name))
+ (data (string-append out "/share/renpy/" directory-name)))
+ (mkdir-p (string-append out "/bin"))
+ (copy-recursively game data)
+ ;; We don't actually want the metadata to be dumped in the output
+ ;; directory
+ (delete-file (string-append data "/renpy-build.json"))
+ (call-with-output-file launcher
+ (lambda (port)
+ (format port "#!~a~%~a ~a \"$@\""
+ (which "bash")
+ (which "renpy")
+ data)))
+ (chmod launcher #o755)))
+ #t)
+
+(define* (install-desktop-file #:key outputs game (output "out")
+ #:allow-other-keys)
+ (let* ((out (assoc-ref outputs output))
+ (json-dump (call-with-input-file (string-append game
+ "/renpy-build.json")
+ read-json))
+ (build (assoc-ref json-dump "build"))
+ (directory-name (assoc-ref build "directory_name"))
+ (executable-name (assoc-ref build "executable_name")))
+ (make-desktop-entry-file
+ (string-append out "/share/applications/" executable-name ".desktop")
+ #:name (assoc-ref json-dump "name")
+ #:generic-name (assoc-ref build "display_name")
+ #:exec (string-append (which "renpy") " "
+ out "/share/renpy/" directory-name)
+ #:categories '("Game" "Visual Novel")))
+ #t)
+
+(define %standard-phases
+ (modify-phases gnu:%standard-phases
+ (add-after 'unpack 'enable-bytecode-determinism
+ (assoc-ref python:%standard-phases 'enable-bytecode-determinism))
+ (delete 'bootstrap)
+ (delete 'configure)
+ (replace 'build build)
+ (delete 'check)
+ (replace 'install install)
+ (add-after 'install 'install-desktop-file install-desktop-file)))
+
+(define* (renpy-build #:key inputs (phases %standard-phases)
+ #:allow-other-keys #:rest args)
+ "Build the given Ren'py package, applying all of PHASES in order."
+ (apply gnu:gnu-build #:inputs inputs #:phases phases args))
--
2.30.0
Leo Prikler wrote 4 years ago
[PATCH 2/2] gnu: Add the-question.
(address . 46053@debbugs.gnu.org)
20210123134656.18353-2-leo.prikler@student.tugraz.at
* gnu/packages/games.scm (the-question): New variable.
---
gnu/packages/games.scm | 15 +++++++++++++++
1 file changed, 15 insertions(+)

Toggle diff (32 lines)
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index ee1571e624..8b3a617d0a 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -196,6 +196,7 @@
#:use-module (guix build-system meson)
#:use-module (guix build-system perl)
#:use-module (guix build-system python)
+ #:use-module (guix build-system renpy)
#:use-module (guix build-system qt)
#:use-module (guix build-system scons)
#:use-module (guix build-system trivial)
@@ -12136,3 +12137,17 @@ game FPS.")
implemented using ncurses user interface. An SDL graphical version is also
available.")
(license license:gpl3+)))
+
+(define-public the-question
+ (package
+ (name "the-question")
+ (version (package-version renpy))
+ (source (package-source renpy))
+ (build-system renpy-build-system)
+ (arguments
+ '(#:game "the_question/game"))
+ (synopsis "Ren'py example game")
+ (description "The Question is a short game demonstrating the capabilities
+of Ren'py.")
+ (home-page (package-home-page renpy))
+ (license (package-license renpy))))
--
2.30.0
Nicolas Goaziou wrote 4 years ago
Re: [bug#46053] [PATCH 0/2] Add Ren'py build system
(name . Leo Prikler)(address . leo.prikler@student.tugraz.at)(address . 46053@debbugs.gnu.org)
87czxuen33.fsf@nicolasgoaziou.fr
Hello,

Leo Prikler <leo.prikler@student.tugraz.at> writes:

Toggle quote (6 lines)
> a proper Ren'py build system had been on my TODO list ever since I've
> packaged it back in 2019, but I've so far been too lazy to actually
> create one. While I'm happy to announce, that this is no longer the
> case, there are still a number of things, that can be improved in our
> Ren'py package and build system.

That's nice. It should also be documented in the manual.

It would be nice to have a "write a build system" in the cookbook (or
the manual?) at some point.

Toggle quote (8 lines)
> This series contains two patches. The first adds the build system, the
> second a package example for "The Question". Since "The Question" is
> already an output of Ren'py, I don't see much value in this patch other
> than for explanatory purposes, so I don't think I'll commit that one.
> Instead, I'll probably redefine Ren'py once the first patch is merged.
> I'm building this series on top of #45736, so things might be a bit
> different on master, but I hope it works out regardless.

LGTM, in addition to #45736.

Regards,
--
Nicolas Goaziou
Leo Prikler wrote 4 years ago
[PATCH v2] build-system: Add renpy-build-system.
(address . 46053@debbugs.gnu.org)(address . mail@nicolasgoaziou.fr)
20210124105122.9409-1-leo.prikler@student.tugraz.at
* guix/build/renpy-build-system.scm: New file.
* guix/build-system/renpy.scm: New file.
* Makefile.am (MODULES): Add them here.
* doc/guix.texi (Build Systems): Document renpy-build-system.
---
Makefile.am | 2 +
doc/guix.texi | 13 +++
guix/build-system/renpy.scm | 131 ++++++++++++++++++++++++++++++
guix/build/renpy-build-system.scm | 99 ++++++++++++++++++++++
4 files changed, 245 insertions(+)
create mode 100644 guix/build-system/renpy.scm
create mode 100644 guix/build/renpy-build-system.scm

Toggle diff (288 lines)
diff --git a/Makefile.am b/Makefile.am
index 8a8133d669..c2d71ca5be 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -150,6 +150,7 @@ MODULES = \
guix/build-system/node.scm \
guix/build-system/perl.scm \
guix/build-system/python.scm \
+ guix/build-system/renpy.scm \
guix/build-system/ocaml.scm \
guix/build-system/qt.scm \
guix/build-system/waf.scm \
@@ -205,6 +206,7 @@ MODULES = \
guix/build/ocaml-build-system.scm \
guix/build/qt-build-system.scm \
guix/build/r-build-system.scm \
+ guix/build/renpy-build-system.scm \
guix/build/rakudo-build-system.scm \
guix/build/ruby-build-system.scm \
guix/build/scons-build-system.scm \
diff --git a/doc/guix.texi b/doc/guix.texi
index 4a20b3b902..f44bf29963 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -7779,6 +7779,19 @@ passes flags specified by the @code{#:make-maker-flags} or
Which Perl package is used can be specified with @code{#:perl}.
@end defvr
+@defvr {Scheme Variable} renpy-build-system
+This variable is exported by @code{(guix build-system renpy)}. It implements
+the more or less standard build procedure used by Ren'py games, which consists
+of loading @code{#:game} once, thereby creating bytecode for it.
+
+It further creates a wrapper script in @code{bin/} and a desktop entry in
+@code{share/applications}, both of which can be used to launch the game.
+
+Which Ren'py package is used can be specified with @code{#:renpy}.
+Games can also be installed in outputs other than ``out'' by using
+@code{#:output}.
+@end defvr
+
@defvr {Scheme Variable} qt-build-system
This variable is exported by @code{(guix build-system qt)}. It
is intended for use with applications using Qt or KDE.
diff --git a/guix/build-system/renpy.scm b/guix/build-system/renpy.scm
new file mode 100644
index 0000000000..35edc0056d
--- /dev/null
+++ b/guix/build-system/renpy.scm
@@ -0,0 +1,131 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Leo Prikler <leo.prikler@student.tugraz.at>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix build-system renpy)
+ #:use-module (guix store)
+ #:use-module (guix utils)
+ #:use-module (guix memoization)
+ #:use-module (guix packages)
+ #:use-module (guix derivations)
+ #:use-module (guix search-paths)
+ #:use-module (guix build-system)
+ #:use-module (guix build-system gnu)
+ #:use-module (ice-9 match)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-26)
+ #:export (%renpy-build-system-modules
+ default-renpy
+ renpy-build
+ renpy-build-system))
+
+(define (default-renpy)
+ "Return the default Ren'py package."
+ ;; Lazily resolve the binding to avoid a circular dependency.
+ (let ((module (resolve-interface '(gnu packages game-development))))
+ (module-ref module 'renpy)))
+
+(define %renpy-build-system-modules
+ ;; Build-side modules imported by default.
+ `((guix build renpy-build-system)
+ (guix build json)
+ (guix build python-build-system)
+ ,@%gnu-build-system-modules))
+
+(define* (lower name
+ #:key source inputs native-inputs outputs system target
+ (renpy (default-renpy))
+ #:allow-other-keys
+ #:rest arguments)
+ "Return a bag for NAME."
+ (define private-keywords
+ '(#:source #:target #:renpy #:inputs #:native-inputs))
+
+ (and (not target) ;XXX: no cross-compilation
+ (bag
+ (name name)
+ (system system)
+ (host-inputs `(,@(if source
+ `(("source" ,source))
+ '())
+ ,@inputs
+
+ ;; Keep the standard inputs of 'gnu-build-system'.
+ ,@(standard-packages)))
+ (build-inputs `(("renpy" ,renpy)
+ ,@native-inputs))
+ (outputs outputs)
+ (build renpy-build)
+ (arguments (strip-keyword-arguments private-keywords arguments)))))
+
+(define* (renpy-build store name inputs
+ #:key
+ (phases '(@ (guix build renpy-build-system)
+ %standard-phases))
+ (configure-flags ''())
+ (outputs '("out"))
+ (output "out")
+ (game "game")
+ (search-paths '())
+ (system (%current-system))
+ (guile #f)
+ (imported-modules %renpy-build-system-modules)
+ (modules '((guix build renpy-build-system)
+ (guix build utils))))
+ "Build SOURCE using RENPY, and with INPUTS."
+ (define builder
+ `(begin
+ (use-modules ,@modules)
+ (renpy-build #:name ,name
+ #:source ,(match (assoc-ref inputs "source")
+ (((? derivation? source))
+ (derivation->output-path source))
+ ((source)
+ source)
+ (source
+ source))
+ #:configure-flags ,configure-flags
+ #:system ,system
+ #:phases ,phases
+ #:outputs %outputs
+ #:output ,output
+ #:game ,game
+ #:search-paths ',(map search-path-specification->sexp
+ search-paths)
+ #:inputs %build-inputs)))
+
+ (define guile-for-build
+ (match guile
+ ((? package?)
+ (package-derivation store guile system #:graft? #f))
+ (#f ; the default
+ (let* ((distro (resolve-interface '(gnu packages commencement)))
+ (guile (module-ref distro 'guile-final)))
+ (package-derivation store guile system #:graft? #f)))))
+
+ (build-expression->derivation store name builder
+ #:inputs inputs
+ #:system system
+ #:modules imported-modules
+ #:outputs outputs
+ #:guile-for-build guile-for-build))
+
+(define renpy-build-system
+ (build-system
+ (name 'renpy)
+ (description "The Ren'py build system")
+ (lower lower)))
diff --git a/guix/build/renpy-build-system.scm b/guix/build/renpy-build-system.scm
new file mode 100644
index 0000000000..464fc97b13
--- /dev/null
+++ b/guix/build/renpy-build-system.scm
@@ -0,0 +1,99 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Leo Prikler <leo.prikler@student.tugraz.at>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix build renpy-build-system)
+ #:use-module ((guix build gnu-build-system) #:prefix gnu:)
+ #:use-module ((guix build python-build-system) #:prefix python:)
+ #:use-module (guix build json)
+ #:use-module (guix build utils)
+ #:use-module (ice-9 match)
+ #:use-module (ice-9 ftw)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-26)
+ #:export (%standard-phases
+ renpy-build))
+
+(define* (build #:key game #:allow-other-keys)
+ (for-each make-file-writable
+ (find-files game (lambda (pred stat)
+ (eq? (stat:type stat) 'directory))))
+ (invoke "renpy"
+ "--json-dump" (string-append game "/renpy-build.json")
+ game
+ ;; should be "compile", but renpy wants to compile itself really
+ ;; badly if we do
+ "quit")
+ #t)
+
+(define* (install #:key outputs game (output "out") #:allow-other-keys)
+ (let* ((out (assoc-ref outputs output))
+ (json-dump (call-with-input-file (string-append game
+ "/renpy-build.json")
+ read-json))
+ (build (assoc-ref json-dump "build"))
+ (executable-name (assoc-ref build "executable_name"))
+ (directory-name (assoc-ref build "directory_name")))
+ (let ((launcher (string-append out "/bin/" executable-name))
+ (data (string-append out "/share/renpy/" directory-name)))
+ (mkdir-p (string-append out "/bin"))
+ (copy-recursively game data)
+ ;; We don't actually want the metadata to be dumped in the output
+ ;; directory
+ (delete-file (string-append data "/renpy-build.json"))
+ (call-with-output-file launcher
+ (lambda (port)
+ (format port "#!~a~%~a ~a \"$@\""
+ (which "bash")
+ (which "renpy")
+ data)))
+ (chmod launcher #o755)))
+ #t)
+
+(define* (install-desktop-file #:key outputs game (output "out")
+ #:allow-other-keys)
+ (let* ((out (assoc-ref outputs output))
+ (json-dump (call-with-input-file (string-append game
+ "/renpy-build.json")
+ read-json))
+ (build (assoc-ref json-dump "build"))
+ (directory-name (assoc-ref build "directory_name"))
+ (executable-name (assoc-ref build "executable_name")))
+ (make-desktop-entry-file
+ (string-append out "/share/applications/" executable-name ".desktop")
+ #:name (assoc-ref json-dump "name")
+ #:generic-name (assoc-ref build "display_name")
+ #:exec (string-append (which "renpy") " "
+ out "/share/renpy/" directory-name)
+ #:categories '("Game" "Visual Novel")))
+ #t)
+
+(define %standard-phases
+ (modify-phases gnu:%standard-phases
+ (add-after 'unpack 'enable-bytecode-determinism
+ (assoc-ref python:%standard-phases 'enable-bytecode-determinism))
+ (delete 'bootstrap)
+ (delete 'configure)
+ (replace 'build build)
+ (delete 'check)
+ (replace 'install install)
+ (add-after 'install 'install-desktop-file install-desktop-file)))
+
+(define* (renpy-build #:key inputs (phases %standard-phases)
+ #:allow-other-keys #:rest args)
+ "Build the given Ren'py package, applying all of PHASES in order."
+ (apply gnu:gnu-build #:inputs inputs #:phases phases args))
--
2.30.0
Leo Prikler wrote 4 years ago
Re: [bug#46053] [PATCH 0/2] Add Ren'py build system
(name . Nicolas Goaziou)(address . mail@nicolasgoaziou.fr)
2e82cd8cb0882ac3fde3b52b9ae897bb27ed32ba.camel@student.tugraz.at
Hello,

Am Sonntag, den 24.01.2021, 09:49 +0100 schrieb Nicolas Goaziou:
Toggle quote (1 lines)
> LGTM, in addition to #45736.
I've now pushed both this (well, v2 of it) and #45736.

Toggle quote (1 lines)
> It should also be documented in the manual.
Documentation is present in v2, which I've pushed. I hope it's
sufficient.

Regards,
Leo.
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 46053@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 46053
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch
You may also tag this issue. See list of standard tags. For example, to set the confirmed and easy tags
mumi command -t +confirmed -t +easy
Or, remove the moreinfo tag and set the help tag
mumi command -t -moreinfo -t +help