diff mbox series

[bug#59997,v3] gnu: Add minimacy.

Message ID 20230127192031.3142167-1-zimon.toutoune@gmail.com
State New
Headers show
Series [bug#59997,v3] gnu: Add minimacy. | expand

Commit Message

Simon Tournier Jan. 27, 2023, 7:20 p.m. UTC
From: Konrad Hinsen <konrad.hinsen@fastmail.net>

* gnu/packages/minimacy.scm: New file.
* gnu/packages/patches/minimacy.patch: New patch.
* gnu/local.mk: Add them.
---
 gnu/local.mk                        |   2 +
 gnu/packages/minimacy.scm           | 102 ++++++++++++++++++++++++++++
 gnu/packages/patches/minimacy.patch |  34 ++++++++++
 3 files changed, 138 insertions(+)
 create mode 100644 gnu/packages/minimacy.scm
 create mode 100644 gnu/packages/patches/minimacy.patch


base-commit: 8e1cca32b938cef0812ce042c6c2e8bccb326ec7

Comments

Ludovic Courtès Feb. 24, 2023, 9:32 p.m. UTC | #1
HI,

Simon Tournier <zimon.toutoune@gmail.com> skribis:

> From: Konrad Hinsen <konrad.hinsen@fastmail.net>
>
> * gnu/packages/minimacy.scm: New file.
> * gnu/packages/patches/minimacy.patch: New patch.
> * gnu/local.mk: Add them.

[...]

> diff --git a/gnu/packages/minimacy.scm b/gnu/packages/minimacy.scm
> new file mode 100644
> index 0000000000..6cfba75879
> --- /dev/null
> +++ b/gnu/packages/minimacy.scm
> @@ -0,0 +1,102 @@
> +;;; Copyright © 2022 Konrad Hinsen <konrad.hinsen@fastmail.net>

It misses the very first line.  :-)

> +    (outputs '("out"             ;core
> +               "X11"             ;for GUI programs, with X11 and ALSA
> +               "X11GL"))         ;for GUI programs, with X11, OpenGL, and ALSA

Two things: output names are lowercase by convention, and the
(unofficial) convention for the GUI output is “gui”.

Does it make sense to separate the two GUI outputs?  It seems better to
me to keep just one “gui” output with both OpenGL and non-OpenGL
thingies.  WDYT?

> +          (delete 'check))))

Rather #:tests? #f with a comment explaining why.

> +    (synopsis "Minimalist computing system")
> +    (description
> +     "Minimacy is an open-source minimalist computing technology.

s/an open-source/a/

> +It consists of a programming language (compiler plus virtual machine)
> +and a library, written such that the whole system can be fully
> +understood by a single person.  An optional extension to the virtual
> +machine adds X11 and ALSA for user interfaces, another extension
> +adds OpenGL support.")

Could you send one last revision?

Thanks!

Ludo’.
Konrad Hinsen Feb. 26, 2023, 4:08 p.m. UTC | #2
Hi Ludo,

Thanks for looking into this!

> It misses the very first line.  :-)

Oops :-)

> Two things: output names are lowercase by convention, and the
> (unofficial) convention for the GUI output is “gui”.

OK. The three outputs are now "out", "gui" and "opengl".

> Does it make sense to separate the two GUI outputs?  It seems better to
> me to keep just one “gui” output with both OpenGL and non-OpenGL
> thingies.  WDYT?

A good reason for separating them is output size (with dependencies):

out:     72.7 MiB
gui:     82.1 MiB
opengl: 416.8 MiB

For software aiming at minimalism, that looks important enough to me. In
particular when using "guix pack" to deploy on small machines.

> Rather #:tests? #f with a comment explaining why.

OK.

> Could you send one last revision?

Coming...

Cheers,
  Konrad.
diff mbox series

Patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 29237b1138..212c95c98b 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -424,6 +424,7 @@  GNU_SYSTEM_MODULES =				\
   %D%/packages/messaging.scm			\
   %D%/packages/minetest.scm			\
   %D%/packages/mingw.scm			\
+  %D%/packages/minimacy.scm			\
   %D%/packages/microcom.scm			\
   %D%/packages/moe.scm				\
   %D%/packages/motti.scm			\
@@ -1540,6 +1541,7 @@  dist_patch_DATA =						\
   %D%/packages/patches/mingw-w64-reproducible-gendef.patch	\
   %D%/packages/patches/minisat-friend-declaration.patch		\
   %D%/packages/patches/minisat-install.patch			\
+  %D%/packages/patches/minimacy.patch                           \
   %D%/packages/patches/mit-krb5-hurd.patch			\
   %D%/packages/patches/mixxx-link-qtscriptbytearray-qtscript.patch	\
   %D%/packages/patches/mixxx-system-googletest-benchmark.patch	\
diff --git a/gnu/packages/minimacy.scm b/gnu/packages/minimacy.scm
new file mode 100644
index 0000000000..6cfba75879
--- /dev/null
+++ b/gnu/packages/minimacy.scm
@@ -0,0 +1,102 @@ 
+;;; Copyright © 2022 Konrad Hinsen <konrad.hinsen@fastmail.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 (gnu packages minimacy)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages gl)
+  #:use-module (gnu packages linux)
+  #:use-module (guix download)
+  #:use-module (guix gexp)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix download)
+  #:use-module (guix gexp)
+  #:use-module (guix git-download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages))
+
+(define-public minimacy
+  (package
+    (name "minimacy")
+    (version "0.6.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ambermind/minimacy/")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1x9i1spf79lq3kxms55dx7lf8pl84cyblq313sjyfpr9l187ailb"))
+              (patches (search-patches "minimacy.patch"))
+              (modules '((guix build utils)))
+              (snippet '(delete-file-recursively "windows"))))
+    (build-system gnu-build-system)
+    (inputs (list libx11 libxext alsa-lib mesa glu))
+    (outputs '("out"             ;core
+               "X11"             ;for GUI programs, with X11 and ALSA
+               "X11GL"))         ;for GUI programs, with X11, OpenGL, and ALSA
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-path
+            (lambda* (#:key outputs #:allow-other-keys)
+              (substitute* "src/hw.c"
+                (("minimacy-in-gnu-store")
+                 (assoc-ref outputs "out")))))
+          (delete 'configure)
+          (replace 'build
+            (lambda _
+              (chdir "unix")
+              (invoke "make" "nox")
+              (for-each delete-file
+                        (find-files "../obj" "\\.o$"))
+              (invoke "make" "x11")
+              (for-each delete-file
+                        (find-files "../obj" "\\.o$"))
+              (invoke "make" "x11gl")
+              (chdir "..")))
+          (replace 'install
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((out (assoc-ref outputs "out"))
+                    (x11 (assoc-ref outputs "X11"))
+                    (x11gl (assoc-ref outputs "X11GL")))
+                (mkdir-p (string-append out "/rom"))
+                (mkdir-p (string-append out "/system"))
+                (copy-recursively "rom"
+                                  (string-append out "/rom"))
+                (copy-recursively "system"
+                                  (string-append out "/system"))
+                (install-file "bin/minimacy"
+                              (string-append out "/bin"))
+                (install-file "bin/minimacyX11"
+                              (string-append x11 "/bin"))
+                (install-file "bin/minimacyX11GL"
+                              (string-append x11gl "/bin")))))
+          (delete 'check))))
+    (synopsis "Minimalist computing system")
+    (description
+     "Minimacy is an open-source minimalist computing technology.
+It consists of a programming language (compiler plus virtual machine)
+and a library, written such that the whole system can be fully
+understood by a single person.  An optional extension to the virtual
+machine adds X11 and ALSA for user interfaces, another extension
+adds OpenGL support.")
+    (home-page "https://minimacy.net/")
+    (license license:gpl2)))
diff --git a/gnu/packages/patches/minimacy.patch b/gnu/packages/patches/minimacy.patch
new file mode 100644
index 0000000000..eca49431c3
--- /dev/null
+++ b/gnu/packages/patches/minimacy.patch
@@ -0,0 +1,34 @@ 
+The Minimacy distribution is set up for being compiled and used from the
+user's home directory. Running Minimacy as a Guix package requires adding
+its store path as a search path for the virtual machine. That is done in
+two steps: this patch, and a substitution of the actual store path in the
+build process.
+
+--- minimacy/src/hw.c	2022-12-05 18:51:13.000000000 +0100
++++ minimacy/src/hw.c	2022-12-09 15:55:47.122793826 +0100
+@@ -90,6 +90,13 @@
+ #if defined ON_UNIX || defined ON_MACOS_CMDLINE || defined ON_RASPBERRY64
+ void systemExecDir(char* path, int len)
+ {
++	char* p = "minimacy-in-gnu-store";
++	if (strlen(p) < len - 2)
++	{
++		strcpy(path, p);
++		systemCleanDir(path);
++		return;
++	}
+ 	path[0] = 0;
+ }
+ #endif
+@@ -583,8 +590,9 @@
+ 	PRINTF(th, LOG_USER, "1- command line argument: -dir path\n");
+ 	PRINTF(th, LOG_USER, "2- environment variable MINIMACY\n");
+ 	PRINTF(th, LOG_USER, "3- grand parent of minimacy.exe (windows only)\n");
+-	PRINTF(th, LOG_USER, "4- ~/minimacy (on Unix) or [user]/Documents/minimacy (on Windows)\n");
+-	PRINTF(th, LOG_USER, "5- Working directory\n\n");
++	PRINTF(th, LOG_USER, "4- the minimacy package under /gnu/store (Guix only)\n");
++	PRINTF(th, LOG_USER, "5- ~/minimacy (on Unix) or [user]/Documents/minimacy (on Windows)\n");
++	PRINTF(th, LOG_USER, "6- Working directory\n\n");
+ }
+ int hwInit(Thread* th, int argc, char** argv, int standalone)
+ {