GNU bug report logs - #48952
[PATCH 0/3] build-system: Add godot-build-system.

Previous Next

Package: guix-patches;

Reported by: Vinicius Monego <monego <at> posteo.net>

Date: Fri, 11 Jun 2021 00:55:01 UTC

Severity: normal

Tags: patch

To reply to this bug, email your comments to 48952 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#48952; Package guix-patches. (Fri, 11 Jun 2021 00:55:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Vinicius Monego <monego <at> posteo.net>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Fri, 11 Jun 2021 00:55:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Vinicius Monego <monego <at> posteo.net>
To: guix-patches <at> gnu.org
Cc: Vinicius Monego <monego <at> posteo.net>
Subject: [PATCH 0/3] build-system: Add godot-build-system.
Date: Fri, 11 Jun 2021 00:53:43 +0000
This patchset adds a build system for Godot games. There is some TODO for the future:

_ I had to add a #:game keyword because it is difficult to parse the name of games in the source files. I'd like to remove it when possible.
_ I expect that most projects will begin to ship export_presets.cfg and desktop files in the future. Librerama is the only project that I found shipping both and the desktop file is in export/freedesktop. I don't know if that location is autogenerated or not. In any case, I left the desktop files out of the build system for now.
_ Support unit tests for games. I don't know how it works in Godot, and very few games have them at the moment.

I also tested the build system with Tux Builder (reimplementation of SuperTux in Godot) and Circle Jump and both are working.

Side note: Godot 3.3.2-stable is fully compatible with 3.2.* (it was supposed to be 3.2.4 but the versioning change) and a recomended upgrade in case anyone wants to upgrade it.

Vinicius Monego (3):
  build-system: Add godot-build-system.
  gnu: superstarfighter: Use godot-build-system.
  gnu: Add librerama.

 Makefile.am                       |   3 +
 doc/guix.texi                     |  19 ++++
 gnu/packages/games.scm            | 100 ++++++++++-----------
 guix/build-system/godot.scm       | 142 ++++++++++++++++++++++++++++++
 guix/build/godot-build-system.scm | 113 ++++++++++++++++++++++++
 5 files changed, 330 insertions(+), 49 deletions(-)
 create mode 100644 guix/build-system/godot.scm
 create mode 100644 guix/build/godot-build-system.scm

-- 
2.32.0





Information forwarded to guix-patches <at> gnu.org:
bug#48952; Package guix-patches. (Fri, 11 Jun 2021 00:57:02 GMT) Full text and rfc822 format available.

Message #8 received at 48952 <at> debbugs.gnu.org (full text, mbox):

From: Vinicius Monego <monego <at> posteo.net>
To: 48952 <at> debbugs.gnu.org
Cc: Vinicius Monego <monego <at> posteo.net>
Subject: [PATCH 1/3] build-system: Add godot-build-system.
Date: Fri, 11 Jun 2021 00:55:44 +0000
* guix/build/godot-build-system.scm: New file.
* guix/build-system/godot.scm: New file.
* Makefile.am (MODULES): Add them here.
* doc/guix.texi (Build Systems): Document godot-build-system.
---
 Makefile.am                       |   3 +
 doc/guix.texi                     |  19 ++++
 guix/build-system/godot.scm       | 142 ++++++++++++++++++++++++++++++
 guix/build/godot-build-system.scm | 113 ++++++++++++++++++++++++
 4 files changed, 277 insertions(+)
 create mode 100644 guix/build-system/godot.scm
 create mode 100644 guix/build/godot-build-system.scm

diff --git a/Makefile.am b/Makefile.am
index aa21b5383b..2fbf1d1a13 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -15,6 +15,7 @@
 # Copyright © 2018 Alex Vong <alexvong1995 <at> gmail.com>
 # Copyright © 2019 Efraim Flashner <efraim <at> flashner.co.il>
 # Copyright © 2021 Chris Marusich <cmmarusich <at> gmail.com>
+# Copyright © 2021 Vinicius Monego <monego <at> posteo.net>
 #
 # This file is part of GNU Guix.
 #
@@ -145,6 +146,7 @@ MODULES =					\
   guix/build-system/copy.scm			\
   guix/build-system/glib-or-gtk.scm		\
   guix/build-system/gnu.scm			\
+  guix/build-system/godot.scm			\
   guix/build-system/guile.scm			\
   guix/build-system/haskell.scm			\
   guix/build-system/julia.scm			\
@@ -201,6 +203,7 @@ MODULES =					\
   guix/build/gnu-bootstrap.scm			\
   guix/build/gnu-build-system.scm		\
   guix/build/gnu-dist.scm			\
+  guix/build/godot-build-system.scm		\
   guix/build/guile-build-system.scm		\
   guix/build/maven-build-system.scm		\
   guix/build/node-build-system.scm		\
diff --git a/doc/guix.texi b/doc/guix.texi
index 59b4ac11b4..430724be0a 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -90,6 +90,7 @@ Copyright @copyright{} 2020 Edgar Vincent@*
 Copyright @copyright{} 2021 Maxime Devos@*
 Copyright @copyright{} 2021 B. Wilson@*
 Copyright @copyright{} 2021 Xinglu Chen@*
+Copyright @copyright{} 2021 Vinicius Monego@*
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -7751,6 +7752,24 @@ specified with the @code{#:glib} parameter.
 Both phases are executed after the @code{install} phase.
 @end defvr
 
+@defvr {Scheme Variable} godot-build-system
+This variable is exported by @code{(guix build-system godot)}.  It implements
+the more or less standard build procedure used by Godot games.
+
+Projects may place @file{project.godot} in a subdirectory.  This can be passed
+to @code{#:project-directory}.  It defaults to the source root.
+
+Many projects do not ship with @file{exports_preset.cfg}.  In that case, a
+custom template is created.  If that file exists already, it is preferred.
+The name of the target preset is variable and can be specified with
+@code{#:export-name}.  Defaults to ``Guix'' which is used in the custom
+template.
+
+It further creates a wrapper script in @code{bin/} which can be used to launch
+the game.  The filename is configured by @code{#:game} and should be set to
+the name of the package.  Desktop files must be created or copied manually.
+@end defvr
+
 @defvr {Scheme Variable} guile-build-system
 This build system is for Guile packages that consist exclusively of Scheme
 code and that are so lean that they don't even have a makefile, let alone a
diff --git a/guix/build-system/godot.scm b/guix/build-system/godot.scm
new file mode 100644
index 0000000000..3362e71fbc
--- /dev/null
+++ b/guix/build-system/godot.scm
@@ -0,0 +1,142 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Vinicius Monego <monego <at> posteo.net>
+;;;
+;;; 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 godot)
+  #: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 (%godot-build-system-modules
+            default-godot
+            godot-build
+            godot-build-system))
+
+(define (default-godot)
+  "Return the default Godot package."
+  ;; Lazily resolve the binding to avoid a circular dependency.
+  (let ((module (resolve-interface '(gnu packages game-development))))
+    (module-ref module 'godot)))
+
+(define %godot-build-system-modules
+  ;; Build-side modules imported by default.
+  `((guix build godot-build-system)
+    ,@%gnu-build-system-modules))
+
+(define* (lower name
+                #:key source inputs native-inputs outputs system target
+                (godot (default-godot))
+                #:allow-other-keys
+                #:rest arguments)
+  "Return a bag for NAME."
+  (define private-keywords
+    '(#:source #:inputs #:native-inputs #:target))
+
+  (and (not target)                               ;XXX: no cross-compilation
+       (bag
+         (name name)
+         (system system)
+         (host-inputs `(,@(if source
+                              `(("source" ,source))
+                              '())
+                        ("godot" ,godot)
+                        ,@inputs
+
+                        ;; Keep the standard inputs of 'gnu-build-system'.
+                        ,@(standard-packages)))
+         (build-inputs `(("godot-headless" ,godot "headless")
+                         ,@native-inputs))
+         (outputs outputs)
+         (build godot-build)
+         (arguments (strip-keyword-arguments private-keywords arguments)))))
+
+(define* (godot-build store name inputs
+                       #:key
+                       (phases '(@ (guix build godot-build-system)
+                                   %standard-phases))
+                       (configure-flags ''())
+                       (outputs '("out"))
+                       (output "out")
+
+                       ;; Name of the wrapper script and pck file.
+                       ;; Usually the same name of the package.
+                       (game "game")
+
+                       ;; Directory where project.godot is located.
+                       (project-directory ".")
+
+                       ;; Name for the export target.
+                       (export-name "Guix")
+                       
+                       (search-paths '())
+                       (system (%current-system))
+                       (guile #f)
+                       (imported-modules %godot-build-system-modules)
+                       (modules '((guix build godot-build-system)
+                                  (guix build utils))))
+  "Build SOURCE using GODOT, and with INPUTS."
+  (define builder
+    `(begin
+       (use-modules ,@modules)
+       (godot-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
+                    #:game ,game
+                    #:project-directory ,project-directory
+                    #:export-name ,export-name
+                    #:outputs %outputs
+                    #:output ,output
+                    #: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 godot-build-system
+  (build-system
+    (name 'godot)
+    (description "The Godot build system")
+    (lower lower)))
diff --git a/guix/build/godot-build-system.scm b/guix/build/godot-build-system.scm
new file mode 100644
index 0000000000..e72ae9db14
--- /dev/null
+++ b/guix/build/godot-build-system.scm
@@ -0,0 +1,113 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Vinicius Monego <monego <at> posteo.net>
+;;;
+;;; 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 godot-build-system)
+  #:use-module ((guix build gnu-build-system) #:prefix gnu:)
+  #:use-module (guix build utils)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 format)
+  #:use-module (ice-9 ftw)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:export (%standard-phases
+            godot-build))
+
+(define* (configure #:key project-directory #:allow-other-keys)
+
+  ;; Projects may have the 'project.godot' file in different directories.  The
+  ;; project-directory key contains the path string to the directory where it
+  ;; is located.
+  
+  (chdir project-directory)
+  (setenv "HOME" (getcwd))
+  
+  ;; Not all projects ship with export_presets.cfg because it may contain
+  ;; confidential information such as CI keys.  In that case, we check if
+  ;; this file exists, and if it doesn't we use this generic template below.
+  ;; There is ongoing effort to separate the keys from that file. See:
+  ;; https://github.com/godotengine/godot-demo-projects/issues/329 and
+  ;; https://github.com/godotengine/godot/pull/35930.  Until that is fixed and
+  ;; developers start to provide the file, we have to use our own template.
+
+  (let ((export-presets "export_presets.cfg"))
+    (when (not (file-exists? export-presets))
+      (with-output-to-file export-presets
+        (lambda ()
+          (display
+           "[preset.0]
+
+name=\"Guix\"
+platform=\"Linux/X11\"
+runnable=true
+custom_features=\"\"
+export_filter=\"all_resources\"
+include_filter=\"\"
+exclude_filter=\"\"
+export_path=\"\"
+patch_list=PoolStringArray(  )
+script_export_mode=1
+script_encryption_key=\"\"
+
+[preset.0.options]
+
+texture_format/bptc=false
+texture_format/s3tc=true
+texture_format/etc=false
+texture_format/etc2=false
+texture_format/no_bptc_fallbacks=true
+binary_format/64_bits=false
+binary_format/embed_pck=false
+custom_template/release=\"\"
+custom_template/debug=\"\""))))))
+
+(define* (build #:key inputs game export-name #:allow-other-keys)
+  (let ((godot (assoc-ref inputs "godot-headless")))
+    (invoke (string-append godot "/bin/godot_server")
+            "--export-pack" export-name (string-append game ".pck")
+            "project.godot")))
+
+(define* (install #:key inputs outputs game #:allow-other-keys)
+  (let* ((out (assoc-ref outputs "out"))
+         (bin (string-append out "/bin"))
+         (share (string-append out "/share"))
+         (data (string-append share "/" game))
+         (icons (string-append share "/icons/hicolor/256x256/apps")))
+    (install-file (string-append game ".pck") data)
+    (mkdir-p bin)
+    (call-with-output-file (string-append bin "/" game)
+      (lambda (port)
+        (format port
+                "#!/bin/sh~@
+                 exec ~a/bin/godot --main-pack ~a/~a.pck~%"
+                (assoc-ref inputs "godot") data game)
+        (chmod port #o755)))
+    (mkdir-p icons)
+    (copy-file "icon.png" (string-append icons "/" game ".png"))))
+
+(define %standard-phases
+  (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
+    (replace 'configure configure)
+    (replace 'build build)
+    (delete 'check)
+    (replace 'install install)))
+
+(define* (godot-build #:key inputs (phases %standard-phases)
+                       #:allow-other-keys #:rest args)
+  "Build the given Godot package, applying all of PHASES in order."
+  (apply gnu:gnu-build #:inputs inputs #:phases phases args))
-- 
2.32.0





Information forwarded to guix-patches <at> gnu.org:
bug#48952; Package guix-patches. (Fri, 11 Jun 2021 00:57:02 GMT) Full text and rfc822 format available.

Message #11 received at 48952 <at> debbugs.gnu.org (full text, mbox):

From: Vinicius Monego <monego <at> posteo.net>
To: 48952 <at> debbugs.gnu.org
Cc: Vinicius Monego <monego <at> posteo.net>
Subject: [PATCH 2/3] gnu: superstarfighter: Use godot-build-system.
Date: Fri, 11 Jun 2021 00:55:45 +0000
* gnu/packages/games.scm (superstarfighter)[build-system]: Use
godot-build-system.
[arguments]: Remove #:tests?. <#:game, #:project-directory>: New fields.
<#:phases>: Do not replace configure, build and install. Add phase
'install-desktop-file after 'install.
---
 gnu/packages/games.scm | 61 +++++++++---------------------------------
 1 file changed, 12 insertions(+), 49 deletions(-)

diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 2eaea5868e..55f468da2c 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -62,6 +62,7 @@
 ;;; Copyright © 2021 David Pflug <david <at> pflug.io>
 ;;; Copyright © 2021 Felix Gruber <felgru <at> posteo.net>
 ;;; Copyright © 2021 Solene Rapenne <solene <at> perso.pw>
+;;; Copyright © 2021 Vinicius Monego <monego <at> posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -199,6 +200,7 @@
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
+  #:use-module (guix build-system godot)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
@@ -2464,62 +2466,23 @@ modify quests for the Solarus engine.")))
        (file-name (git-file-name name version))
        (sha256
         (base32 "1fly63yf5ls1xwm15if4lxwy67wi84k4gvjllljpykrl18vw2y0y"))))
-    (build-system gnu-build-system)
+    (build-system godot-build-system)
     (arguments
-     `(#:tests? #f                      ;there are no tests
+     `(#:game ,name
+       #:project-directory "godot"
        #:phases
        (modify-phases %standard-phases
-         (replace 'configure
-           (lambda _
-             (chdir "godot")
-             (setenv "HOME" (getcwd))
-             (with-output-to-file "export_presets.cfg"
-               (lambda ()
-                 (display
-                  "[preset.0]
-name=\"Guix\"
-platform=\"Linux/X11\"
-runnable=true
-[preset.0.options]")))
-             #t))
-         (replace 'build
-           (lambda _
-             (let ((godot (assoc-ref %build-inputs "godot-headless")))
-               (invoke (string-append godot "/bin/godot_server")
-                       "--export-pack" "Guix"
-                       "superstarfighter.pck" "project.godot"))
-             #t))
-         (replace 'install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
+         (add-after 'install 'install-desktop-file
+           (lambda* (#:key inputs outputs game #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin"))
-                    (share (string-append out "/share"))
-                    (data (string-append share "/superstarfighter"))
-                    (icons (string-append share "/icons/hicolor/256x256/apps")))
-               (install-file "superstarfighter.pck" data)
-               (mkdir-p bin)
-               (call-with-output-file (string-append bin "/superstarfighter")
-                 (lambda (port)
-                   (format port
-                           "#!/bin/sh~@
-                            exec ~a/bin/godot --main-pack ~a/superstarfighter.pck~%"
-                           (assoc-ref inputs "godot")
-                           data)
-                   (chmod port #o755)))
-               (mkdir-p icons)
-               (copy-file "icon.png" (string-append icons "/" ,name ".png"))
+                    (share (string-append out "/share")))
                (make-desktop-entry-file
-                (string-append share "/applications/" ,name ".desktop")
+                (string-append share "/applications/" game ".desktop")
                 #:name "SuperStarfighter"
                 #:comment "Fast-paced arcade combat game"
-                #:exec ,name
-                #:icon ,name
-                #:categories '("Game" "ArcadeGame")))
-             #t)))))
-    (native-inputs
-     `(("godot-headless" ,godot "headless")))
-    (inputs
-     `(("godot" ,godot)))
+                #:exec game
+                #:icon game
+                #:categories '("Game" "ArcadeGame"))))))))
     (home-page "https://notapixel.itch.io/superstarfighter")
     (synopsis "Fast-paced local multiplayer arcade game")
     (description "In SuperStarfighter, up to four local players compete in a
-- 
2.32.0





Information forwarded to guix-patches <at> gnu.org:
bug#48952; Package guix-patches. (Fri, 11 Jun 2021 00:57:03 GMT) Full text and rfc822 format available.

Message #14 received at 48952 <at> debbugs.gnu.org (full text, mbox):

From: Vinicius Monego <monego <at> posteo.net>
To: 48952 <at> debbugs.gnu.org
Cc: Vinicius Monego <monego <at> posteo.net>
Subject: [PATCH 3/3] gnu: Add librerama.
Date: Fri, 11 Jun 2021 00:55:46 +0000
* gnu/packages/games.scm (librerama): New variable.
---
 gnu/packages/games.scm | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 55f468da2c..40ae8de80c 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -2491,6 +2491,45 @@ available, as well as a single-player mode with AI-controlled ships.")
     (license (list license:expat         ; game
                    license:silofl1.1)))) ; fonts
 
+(define-public librerama
+  (package
+    (name "librerama")
+    (version "0.4.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://codeberg.org/Yeldham/librerama")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "16hx09vbdsh27vwkgfmbhl1s5zkkmnyrirryz420kzlvmf5igsvy"))))
+    (build-system godot-build-system)
+    (arguments
+     `(#:game ,name
+       #:export-name "GNU/Linux / *BSD - 32 Bits"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-desktop-file
+           (lambda* (#:key inputs outputs game #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (share (string-append out "/share"))
+                    (applications (string-append share "/applications")))
+               (mkdir-p applications)
+               (with-directory-excursion "export/freedesktop"
+                 (copy-file "io.yeldham.librerama.desktop"
+                            (string-append applications "/" game
+                                           ".desktop")))))))))
+    (home-page "https://yeldham.itch.io/librerama")
+    (synopsis "Fast-paced arcade collection of mini-games")
+    (description
+     "Librerama is an arcade compilation of small, fast-paced games, with the
+overall objective being to play a series of mini-games (here referred as
+\"nanogames\") which progressively increase in speed and difficulty.")
+    (license (list license:gpl3+         ; game
+                   license:cc-by-sa4.0   ; assets
+                   license:silofl1.1)))) ; fonts
+
 (define %ufoai-commit "a542a87a891f96b1ab2c44d35b2f6f16859a5019")
 (define %ufoai-revision "0")
 (define %ufoai-version (git-version "2.6.0_dev" %ufoai-revision %ufoai-commit))
-- 
2.32.0





Information forwarded to guix-patches <at> gnu.org:
bug#48952; Package guix-patches. (Tue, 21 Dec 2021 23:57:02 GMT) Full text and rfc822 format available.

Message #17 received at 48952 <at> debbugs.gnu.org (full text, mbox):

From: Vinicius Monego <monego <at> posteo.net>
To: 48952 <at> debbugs.gnu.org
Cc: Vinicius Monego <monego <at> posteo.net>
Subject: [PATCH v2 0/6] Add godot-build-system (v2).
Date: Tue, 21 Dec 2021 23:55:42 +0000
This is my second attempt. Updated to the new standards with some small changes and other proof of concept packages.

Vinicius Monego (6):
  build-system: Add godot-build-system.
  gnu: superstarfighter: Use godot-build-system.
  gnu: Add librerama.
  gnu: Add material-maker.
  gnu: Add pixelorama.
  gnu: Add lorien.

 Makefile.am                       |   3 +
 doc/guix.texi                     |  19 +++++
 gnu/packages/game-development.scm |  47 ++++++++++++
 gnu/packages/games.scm            |  81 +++++++++-----------
 gnu/packages/graphics.scm         |  30 ++++++++
 guix/build-system/godot.scm       | 122 +++++++++++++++++++++++++++++
 guix/build/godot-build-system.scm | 123 ++++++++++++++++++++++++++++++
 7 files changed, 382 insertions(+), 43 deletions(-)
 create mode 100644 guix/build-system/godot.scm
 create mode 100644 guix/build/godot-build-system.scm


base-commit: 8f85e4f9aa0bd53d0240ea28e280551c8a066b85
-- 
2.30.2





Information forwarded to guix-patches <at> gnu.org:
bug#48952; Package guix-patches. (Tue, 21 Dec 2021 23:57:02 GMT) Full text and rfc822 format available.

Message #20 received at 48952 <at> debbugs.gnu.org (full text, mbox):

From: Vinicius Monego <monego <at> posteo.net>
To: 48952 <at> debbugs.gnu.org
Cc: Vinicius Monego <monego <at> posteo.net>
Subject: [PATCH v2 1/6] build-system: Add godot-build-system.
Date: Tue, 21 Dec 2021 23:55:43 +0000
* guix/build/godot-build-system.scm: New file.
* guix/build-system/godot.scm: New file.
* Makefile.am (MODULES): Add them here.
* doc/guix.texi (Build Systems): Document godot-build-system.
---
 Makefile.am                       |   3 +
 doc/guix.texi                     |  19 +++++
 guix/build-system/godot.scm       | 122 +++++++++++++++++++++++++++++
 guix/build/godot-build-system.scm | 123 ++++++++++++++++++++++++++++++
 4 files changed, 267 insertions(+)
 create mode 100644 guix/build-system/godot.scm
 create mode 100644 guix/build/godot-build-system.scm

diff --git a/Makefile.am b/Makefile.am
index c4ccee65f1..283e2d7b7f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -16,6 +16,7 @@
 # Copyright © 2019 Efraim Flashner <efraim <at> flashner.co.il>
 # Copyright © 2021 Chris Marusich <cmmarusich <at> gmail.com>
 # Copyright © 2021 Andrew Tropin <andrew <at> trop.in>
+# Copyright © 2021 Vinicius Monego <monego <at> posteo.net>
 #
 # This file is part of GNU Guix.
 #
@@ -148,6 +149,7 @@ MODULES =					\
   guix/build-system/copy.scm			\
   guix/build-system/glib-or-gtk.scm		\
   guix/build-system/gnu.scm			\
+  guix/build-system/godot.scm			\
   guix/build-system/guile.scm			\
   guix/build-system/haskell.scm			\
   guix/build-system/julia.scm			\
@@ -204,6 +206,7 @@ MODULES =					\
   guix/build/gnu-bootstrap.scm			\
   guix/build/gnu-build-system.scm		\
   guix/build/gnu-dist.scm			\
+  guix/build/godot-build-system.scm		\
   guix/build/guile-build-system.scm		\
   guix/build/maven-build-system.scm		\
   guix/build/minetest-build-system.scm		\
diff --git a/doc/guix.texi b/doc/guix.texi
index 34e75156eb..d1b5a365ea 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -100,6 +100,7 @@ Copyright @copyright{} 2021 Josselin Poiret@*
 Copyright @copyright{} 2021 Andrew Tropin@*
 Copyright @copyright{} 2021 Sarah Morgensen@*
 Copyright @copyright{} 2021 Josselin Poiret@*
+Copyright @copyright{} 2021 Vinicius Monego@*
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -8324,6 +8325,24 @@ specified with the @code{#:glib} parameter.
 Both phases are executed after the @code{install} phase.
 @end defvr
 
+@defvr {Scheme Variable} godot-build-system
+This variable is exported by @code{(guix build-system godot)}.  It implements
+the more or less standard build procedure used by Godot games.
+
+Projects may place @file{project.godot} in a subdirectory.  This can be passed
+to @code{#:project-directory}.  It defaults to the source root.
+
+Many projects do not ship with @file{exports_preset.cfg}.  In that case, a
+custom template is created.  If that file exists already, it is preferred.
+The name of the target preset is variable and can be specified with
+@code{#:export-name}.  Defaults to ``Linux/X11'' which is used in the custom
+template.
+
+It further creates a wrapper script in @code{bin/} which can be used to launch
+the game.  The filename is configured by @code{#:game} and should be set to
+the name of the package.  Desktop files must be created or copied manually.
+@end defvr
+
 @defvr {Scheme Variable} guile-build-system
 This build system is for Guile packages that consist exclusively of Scheme
 code and that are so lean that they don't even have a makefile, let alone a
diff --git a/guix/build-system/godot.scm b/guix/build-system/godot.scm
new file mode 100644
index 0000000000..510d33c86e
--- /dev/null
+++ b/guix/build-system/godot.scm
@@ -0,0 +1,122 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Vinicius Monego <monego <at> posteo.net>
+;;;
+;;; 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 godot)
+  #:use-module (guix store)
+  #:use-module (guix utils)
+  #:use-module (guix memoization)
+  #:use-module (guix packages)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
+  #: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 (%godot-build-system-modules
+            default-godot
+            godot-build
+            godot-build-system))
+
+(define (default-godot)
+  "Return the default Godot package."
+  ;; Lazily resolve the binding to avoid a circular dependency.
+  (let ((module (resolve-interface '(gnu packages game-development))))
+    (module-ref module 'godot)))
+
+(define %godot-build-system-modules
+  ;; Build-side modules imported by default.
+  `((guix build godot-build-system)
+    ,@%gnu-build-system-modules))
+
+(define* (lower name
+                #:key source inputs native-inputs outputs system target
+                (godot (default-godot))
+                #:allow-other-keys
+                #:rest arguments)
+  "Return a bag for NAME."
+  (define private-keywords
+    '(#:target #:godot #:inputs #:native-inputs))
+
+  (and (not target)                               ;XXX: no cross-compilation
+       (bag
+         (name name)
+         (system system)
+         (host-inputs `(,@(if source
+                              `(("source" ,source)
+                                ("godot-headless" ,godot "headless"))
+                              '())
+                        ,@inputs
+
+                        ;; Keep the standard inputs of 'gnu-build-system'.
+                        ,@(standard-packages)))
+         (build-inputs `(("godot" ,godot)
+                         ,@native-inputs))
+         (outputs outputs)
+         (build godot-build)
+         (arguments (strip-keyword-arguments private-keywords arguments)))))
+
+(define* (godot-build name inputs
+                      #:key
+                      source
+                      (phases '%standard-phases)
+                      (configure-flags ''())
+                      (game "Game")
+                      (project-directory ".")
+                      (export-name "Linux/X11")
+                      (outputs '("out"))
+                      (output "out")
+                      (search-paths '())
+                      (system (%current-system))
+                      (guile #f)
+                      (imported-modules %godot-build-system-modules)
+                      (modules '((guix build godot-build-system)
+                                 (guix build utils))))
+  "Build SOURCE using GODOT, and with INPUTS."
+  (define builder
+    (with-imported-modules imported-modules
+      #~(begin
+          (use-modules #$@(sexp->gexp modules))
+          (godot-build #:name #$name
+                       #:source #+source
+                       #:configure-flags #$configure-flags
+                       #:game #$game
+                       #:project-directory #$project-directory
+                       #:export-name #$export-name
+                       #:system #$system
+                       #:phases #$phases
+                       #:outputs #$(outputs->gexp outputs)
+                       #:output #$output
+                       #:game #$game
+                       #:search-paths '#$(sexp->gexp
+                                          (map search-path-specification->sexp
+                                               search-paths))
+                       #:inputs #$(input-tuples->gexp inputs)))))
+
+  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
+                                                  system #:graft? #f)))
+    (gexp->derivation name builder
+                      #:system system
+                      #:guile-for-build guile)))
+
+(define godot-build-system
+  (build-system
+    (name 'godot)
+    (description "The Godot build system")
+    (lower lower)))
diff --git a/guix/build/godot-build-system.scm b/guix/build/godot-build-system.scm
new file mode 100644
index 0000000000..5c25111540
--- /dev/null
+++ b/guix/build/godot-build-system.scm
@@ -0,0 +1,123 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Vinicius Monego <monego <at> posteo.net>
+;;;
+;;; 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 godot-build-system)
+  #:use-module ((guix build gnu-build-system) #:prefix gnu:)
+  #:use-module (guix build utils)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 format)
+  #:use-module (ice-9 ftw)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:export (%standard-phases
+            godot-build))
+
+(define* (configure #:key project-directory #:allow-other-keys)
+
+  ;; Projects may have the 'project.godot' file in different directories.  The
+  ;; project-directory key contains the path string to the directory where it
+  ;; is located.
+
+  (chdir project-directory)
+  (setenv "HOME" (getcwd))
+
+  ;; Not all projects ship with export_presets.cfg because it may contain
+  ;; confidential information such as CI keys.  In that case, we check if
+  ;; this file exists, and if it doesn't we use this generic template below.
+  ;; There is ongoing effort to separate the keys from that file.  See:
+  ;; https://github.com/godotengine/godot-demo-projects/issues/329 and
+  ;; https://github.com/godotengine/godot/pull/35930.  Until that is fixed and
+  ;; developers start to provide the file, we have to use our own template.
+
+  (let ((export-presets "export_presets.cfg"))
+    (when (not (file-exists? export-presets))
+      (with-output-to-file export-presets
+        (lambda ()
+          (display
+           "[preset.0]
+
+name=\"Linux/X11\"
+platform=\"Linux/X11\"
+runnable=true
+custom_features=\"\"
+export_filter=\"all_resources\"
+include_filter=\"\"
+exclude_filter=\"\"
+export_path=\"\"
+patch_list=PoolStringArray(  )
+script_export_mode=1
+script_encryption_key=\"\"
+
+[preset.0.options]
+
+texture_format/bptc=false
+texture_format/s3tc=true
+texture_format/etc=false
+texture_format/etc2=false
+texture_format/no_bptc_fallbacks=true
+binary_format/64_bits=false
+binary_format/embed_pck=false
+custom_template/release=\"\"
+custom_template/debug=\"\""))))))
+
+(define* (build #:key inputs game export-name #:allow-other-keys)
+  (let ((godot (assoc-ref inputs "godot-headless")))
+    (invoke (string-append godot "/bin/godot_server")
+            "--export-pack" export-name (string-append game ".pck")
+            "project.godot")))
+
+(define* (install #:key inputs outputs game #:allow-other-keys)
+  (let* ((out (assoc-ref outputs "out"))
+         (bin (string-append out "/bin"))
+         (share (string-append out "/share"))
+         (data (string-append share "/" game))
+         (desktop (string-append share "/applications")))
+
+    ;; Install the binary file.
+    (install-file (string-append game ".pck") data)
+    (mkdir-p bin)
+    (call-with-output-file (string-append bin "/" game)
+      (lambda (port)
+        (format port
+                "#!/bin/sh~@
+                 exec ~a/bin/godot --main-pack ~a/~a.pck~%"
+                (assoc-ref inputs "godot") data game)
+        (chmod port #o755)))
+
+    ;; Install desktop file[s].
+    (mkdir-p desktop)
+    (for-each (lambda (file)
+                (display file)
+                (copy-file file (string-append
+                                 desktop "/"
+                                 (car (last-pair
+                                       (string-split file #\/))))))
+              (find-files "." "\\.desktop$"))))
+
+(define %standard-phases
+  (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
+    (replace 'configure configure)
+    (replace 'build build)
+    (delete 'check)
+    (replace 'install install)))
+
+(define* (godot-build #:key inputs (phases %standard-phases)
+                       #:allow-other-keys #:rest args)
+  "Build the given Godot package, applying all of PHASES in order."
+  (apply gnu:gnu-build #:inputs inputs #:phases phases args))
-- 
2.30.2





Information forwarded to guix-patches <at> gnu.org:
bug#48952; Package guix-patches. (Tue, 21 Dec 2021 23:57:03 GMT) Full text and rfc822 format available.

Message #23 received at 48952 <at> debbugs.gnu.org (full text, mbox):

From: Vinicius Monego <monego <at> posteo.net>
To: 48952 <at> debbugs.gnu.org
Cc: Vinicius Monego <monego <at> posteo.net>
Subject: [PATCH v2 2/6] gnu: superstarfighter: Use godot-build-system.
Date: Tue, 21 Dec 2021 23:55:44 +0000
* gnu/packages/games.scm (superstarfighter)[build-system]: Use
godot-build-system.
[arguments]: Remove #:tests?. <#:game, #:project-directory>: New fields.
<#:phases>: Do not replace configure, build and install. Add phase
'install-desktop-file after 'install.
---
 gnu/packages/games.scm | 54 +++++++++---------------------------------
 1 file changed, 11 insertions(+), 43 deletions(-)

diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 6258d65f97..a701f7aa94 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -67,6 +67,7 @@
 ;;; Copyright © 2021 Petr Hodina <phodina <at> protonmail.com>
 ;;; Copyright © 2021 Brendan Tildesley <mail <at> brendan.scot>
 ;;; Copyright © 2021 Christopher Baines <mail <at> cbaines.net>
+;;; Copyright © 2021 Vinicius Monego <monego <at> posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -209,6 +210,7 @@
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
+  #:use-module (guix build-system godot)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
@@ -2562,59 +2564,25 @@ modify quests for the Solarus engine.")))
              (commit "32521f467616bb390e3929d07e1936ff43fe64da")))
        (file-name (git-file-name name version))
        (sha256
+
         (base32 "1ckghzrfgvk9z1n5f4ivnamm6s8h9sbv0a3aq9pp4a3yrhkgld0k"))))
-    (build-system gnu-build-system)
+    (build-system godot-build-system)
     (arguments
-     `(#:tests? #f                      ;there are no tests
+     `(#:game ,name
+       #:project-directory "godot"
        #:phases
        (modify-phases %standard-phases
-         (replace 'configure
-           (lambda _
-             (chdir "godot")
-             (setenv "HOME" (getcwd))
-             (with-output-to-file "export_presets.cfg"
-               (lambda ()
-                 (display
-                  "[preset.0]
-name=\"Guix\"
-platform=\"Linux/X11\"
-runnable=true
-[preset.0.options]")))
-             #t))
-         (replace 'build
-           (lambda _
-             (let ((godot (assoc-ref %build-inputs "godot-headless")))
-               (invoke (string-append godot "/bin/godot_server")
-                       "--export-pack" "Guix"
-                       "superstarfighter.pck" "project.godot"))
-             #t))
-         (replace 'install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
+         (add-after 'install 'install-desktop-file
+           (lambda* (#:key inputs outputs game #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin"))
-                    (share (string-append out "/share"))
-                    (data (string-append share "/superstarfighter"))
-                    (icons (string-append share "/icons/hicolor/256x256/apps")))
-               (install-file "superstarfighter.pck" data)
-               (mkdir-p bin)
-               (call-with-output-file (string-append bin "/superstarfighter")
-                 (lambda (port)
-                   (format port
-                           "#!/bin/sh~@
-                            exec ~a/bin/godot --main-pack ~a/superstarfighter.pck~%"
-                           (assoc-ref inputs "godot")
-                           data)
-                   (chmod port #o755)))
-               (mkdir-p icons)
-               (copy-file "icon.png" (string-append icons "/" ,name ".png"))
+                    (share (string-append out "/share")))
                (make-desktop-entry-file
-                (string-append share "/applications/" ,name ".desktop")
+                (string-append share "/applications/" game ".desktop")
                 #:name "SuperStarfighter"
                 #:comment "Fast-paced arcade combat game"
                 #:exec ,name
                 #:icon ,name
-                #:categories '("Game" "ArcadeGame")))
-             #t)))))
+                #:categories '("Game" "ArcadeGame"))))))))
     (native-inputs
      `(("godot-headless" ,godot "headless")))
     (inputs
-- 
2.30.2





Information forwarded to guix-patches <at> gnu.org:
bug#48952; Package guix-patches. (Tue, 21 Dec 2021 23:57:03 GMT) Full text and rfc822 format available.

Message #26 received at 48952 <at> debbugs.gnu.org (full text, mbox):

From: Vinicius Monego <monego <at> posteo.net>
To: 48952 <at> debbugs.gnu.org
Cc: Vinicius Monego <monego <at> posteo.net>
Subject: [PATCH v2 3/6] gnu: Add librerama.
Date: Tue, 21 Dec 2021 23:55:45 +0000
* gnu/packages/games.scm (librerama): New variable.
---
 gnu/packages/games.scm | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index a701f7aa94..7358630dba 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -2595,6 +2595,33 @@ available, as well as a single-player mode with AI-controlled ships.")
     (license (list license:expat         ; game
                    license:silofl1.1)))) ; fonts
 
+(define-public librerama
+  (package
+    (name "librerama")
+    (version "0.5.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://codeberg.org/librerama/librerama")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1am88cilrjhcpgfdsrz2z31k1dgmhiqypaspaparbzk0dday2i4j"))))
+    (build-system godot-build-system)
+    (arguments
+     `(#:game ,name
+       #:export-name "GNU/Linux / *BSD - 64 Bits"))
+    (home-page "https://yeldham.itch.io/librerama")
+    (synopsis "Fast-paced arcade collection of mini-games")
+    (description
+     "Librerama is an arcade compilation of small, fast-paced games, with the
+overall objective being to play a series of mini-games (here referred as
+\"nanogames\") which progressively increase in speed and difficulty.")
+    (license (list license:gpl3+         ; game
+                   license:cc-by-sa4.0   ; assets
+                   license:silofl1.1)))) ; fonts
+
 (define %ufoai-commit "a542a87a891f96b1ab2c44d35b2f6f16859a5019")
 (define %ufoai-revision "0")
 (define %ufoai-version (git-version "2.6.0_dev" %ufoai-revision %ufoai-commit))
-- 
2.30.2





Information forwarded to guix-patches <at> gnu.org:
bug#48952; Package guix-patches. (Tue, 21 Dec 2021 23:57:03 GMT) Full text and rfc822 format available.

Message #29 received at 48952 <at> debbugs.gnu.org (full text, mbox):

From: Vinicius Monego <monego <at> posteo.net>
To: 48952 <at> debbugs.gnu.org
Cc: Vinicius Monego <monego <at> posteo.net>
Subject: [PATCH v2 4/6] gnu: Add material-maker.
Date: Tue, 21 Dec 2021 23:55:46 +0000
* gnu/packages/game-development.scm (material-maker): New variable.
---
 gnu/packages/game-development.scm | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index 305c2c2819..f0096a4c59 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -25,6 +25,7 @@
 ;;; Copyright © 2020-2021 James Smith <jsubuntuxp <at> disroot.org>
 ;;; Copyright © 2021 Ekaitz Zarraga <ekaitz <at> elenq.tech>
 ;;; Copyright © 2021 Andy Tai <atai <at> atai.org>
+;;; Copyright © 2021 Vinicius Monego <monego <at> posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -52,6 +53,7 @@
   #:use-module (guix utils)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system godot)
   #:use-module (guix build-system python)
   #:use-module (guix build-system scons)
   #:use-module (gnu packages)
@@ -622,6 +624,29 @@ development of visual novels, written on top of Guile-SDL2.  It is still
 experimental.")
     (license license:lgpl3+)))
 
+(define-public material-maker
+  (package
+    (name "material-maker")
+    (version "0.97")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/RodZill4/material-maker")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "06y4kaknrwkvwgznlyql9c5f5sjr32fadzraww3g7vcx5y240cr0"))))
+    (build-system godot-build-system)
+    (arguments
+     `(#:game ,name))
+    (home-page "https://www.materialmaker.org/")
+    (synopsis "Procedural textures authoring and 3D model painting tool")
+    (description
+     "Material Maker is a tool based on Godot Engine that can be used to
+create textures procedurally and paint 3D models.")
+    (license license:expat)))
+
 (define-public sfml
   (package
     (name "sfml")
-- 
2.30.2





Information forwarded to guix-patches <at> gnu.org:
bug#48952; Package guix-patches. (Tue, 21 Dec 2021 23:57:04 GMT) Full text and rfc822 format available.

Message #32 received at 48952 <at> debbugs.gnu.org (full text, mbox):

From: Vinicius Monego <monego <at> posteo.net>
To: 48952 <at> debbugs.gnu.org
Cc: Vinicius Monego <monego <at> posteo.net>
Subject: [PATCH v2 5/6] gnu: Add pixelorama.
Date: Tue, 21 Dec 2021 23:55:47 +0000
* gnu/packages/game-development.scm (pixelorama): New variable.
---
 gnu/packages/game-development.scm | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index f0096a4c59..294c9ccbe9 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -647,6 +647,28 @@ experimental.")
 create textures procedurally and paint 3D models.")
     (license license:expat)))
 
+(define-public pixelorama
+  (package
+    (name "pixelorama")
+    (version "0.9.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Orama-Interactive/Pixelorama")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0m08lzb3cqbv5k5nqygd22kgq6ihacc4qrsybmys3v1mv694c9wm"))))
+    (build-system godot-build-system)
+    (arguments
+     `(#:game ,name
+       #:export-name "Linux/X11 64-bit"))
+    (home-page "https://orama-interactive.itch.io/pixelorama")
+    (synopsis "2D sprite editor")
+    (description "Pixelorama is a 2D sprite editor made with Godot engine.")
+    (license license:expat)))
+
 (define-public sfml
   (package
     (name "sfml")
-- 
2.30.2





Information forwarded to guix-patches <at> gnu.org:
bug#48952; Package guix-patches. (Tue, 21 Dec 2021 23:57:04 GMT) Full text and rfc822 format available.

Message #35 received at 48952 <at> debbugs.gnu.org (full text, mbox):

From: Vinicius Monego <monego <at> posteo.net>
To: 48952 <at> debbugs.gnu.org
Cc: Vinicius Monego <monego <at> posteo.net>
Subject: [PATCH v2 6/6] gnu: Add lorien.
Date: Tue, 21 Dec 2021 23:55:48 +0000
* gnu/packages/graphics.scm (lorien): New variable.
---
 gnu/packages/graphics.scm | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 3f83c72599..7c06cd20d8 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -109,6 +109,7 @@
   #:use-module (guix build-system copy)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system godot)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
   #:use-module (guix build-system qt)
@@ -606,6 +607,35 @@ NOTE: This older version of Blender is the last release that does not require
 OpenGL 3.  It is retained for use with older computers.")
     (license license:gpl2+)))
 
+(define-public lorien
+  (package
+    (name "lorien")
+    (version "0.4.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/mbrlabs/Lorien")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0z185j87qhwhfyahkqywmdazabyf21nb3ywaba0g1dwjrylk72jj"))))
+    (build-system godot-build-system)
+    (arguments
+     `(#:game ,name
+       #:project-directory "lorien"))
+    (home-page "https://github.com/mbrlabs/Lorien")
+    (synopsis "Infinite canvas drawing/whiteboarding")
+    (description "Lorien is an infinite canvas drawing/note-taking app that is
+focused on performance, small savefiles and simplicity.  It's not based on
+bitmap images like Krita, Gimp or Photoshop; it rather saves brush strokes as
+a collection of points and renders them at runtime.  It's primarily designed
+to be used as a digital notebook and as brainstorming tool.  While it can
+totally be used to make small sketches and diagrams, it is not meant to
+replace traditional art programs that operate on bitmap images.  It is
+entirely written in the Godot Game Engine")
+    (license license:expat)))
+
 (define-public goxel
   (package
     (name "goxel")
-- 
2.30.2





Information forwarded to guix-patches <at> gnu.org:
bug#48952; Package guix-patches. (Thu, 30 Dec 2021 09:44:01 GMT) Full text and rfc822 format available.

Message #38 received at 48952 <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Goaziou <mail <at> nicolasgoaziou.fr>
To: Vinicius Monego <monego <at> posteo.net>
Cc: 48952 <at> debbugs.gnu.org
Subject: Re: [bug#48952] [PATCH v2 0/6] Add godot-build-system (v2).
Date: Thu, 30 Dec 2021 10:43:43 +0100
Hello,

Vinicius Monego <monego <at> posteo.net> writes:

> This is my second attempt. Updated to the new standards with some
> small changes and other proof of concept packages.

This looks nice. Thank you.

I just have one question: since `name' is more or less the standard
value for #:game keyword, per documentation, would it be possible to
fill it automatically?

Regards,
-- 
Nicolas Goaziou




Information forwarded to guix-patches <at> gnu.org:
bug#48952; Package guix-patches. (Thu, 30 Dec 2021 15:30:02 GMT) Full text and rfc822 format available.

Message #41 received at 48952 <at> debbugs.gnu.org (full text, mbox):

From: Vinicius Monego <monego <at> posteo.net>
To: Nicolas Goaziou <mail <at> nicolasgoaziou.fr>
Cc: 48952 <at> debbugs.gnu.org
Subject: Re: [bug#48952] [PATCH v2 0/6] Add godot-build-system (v2).
Date: Thu, 30 Dec 2021 15:28:47 +0000
Em qui, 2021-12-30 às 10:43 +0100, Nicolas Goaziou escreveu:
> Hello,
> 
> Vinicius Monego <monego <at> posteo.net> writes:
> 
> > This is my second attempt. Updated to the new standards with some
> > small changes and other proof of concept packages.
> 
> This looks nice. Thank you.
> 
> I just have one question: since `name' is more or less the standard
> value for #:game keyword, per documentation, would it be possible to
> fill it automatically?
> 
> Regards,

It is possible. The problem is that reading `name' in the build system
resolves to the package name + version, e.g. (godot-3.4) instead of
just the package name which is what I need. If there is a general way
to strip the version number or only read the package name without
passing it from the definition then it can be done.

I just noticed that the #:game keyword is duplicate in godot.scm.





Information forwarded to guix-patches <at> gnu.org:
bug#48952; Package guix-patches. (Fri, 28 Jan 2022 09:50:02 GMT) Full text and rfc822 format available.

Message #44 received at 48952 <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Goaziou <mail <at> nicolasgoaziou.fr>
To: Vinicius Monego <monego <at> posteo.net>
Cc: 48952 <at> debbugs.gnu.org
Subject: Re: [bug#48952] [PATCH v2 0/6] Add godot-build-system (v2).
Date: Fri, 28 Jan 2022 10:49:51 +0100
Hello,

Vinicius Monego <monego <at> posteo.net> writes:

> This is my second attempt. Updated to the new standards with some
> small changes and other proof of concept packages.

Now you have commit rights (congratulations!), you may want to commit
this patch set!

Regards,
-- 
Nicolas Goaziou




This bug report was last modified 2 years and 82 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.