[PATCH] gnu: add minimacy

  • Open
  • quality assurance status badge
Details
3 participants
  • Konrad Hinsen
  • Ludovic Courtès
  • Simon Tournier
Owner
unassigned
Submitted by
Konrad Hinsen
Severity
normal
K
K
Konrad Hinsen wrote on 12 Dec 2022 11:09
(address . guix-patches@gnu.org)
m1tu219bmo.fsf@fastmail.net
* gnu/packages/minimacy.scm: New module.
---
gnu/packages/minimacy.scm | 90 +++++++++++++++++++++++++++++
gnu/packages/patches/minimacy.patch | 34 +++++++++++
2 files changed, 124 insertions(+)
create mode 100644 gnu/packages/minimacy.scm
create mode 100644 gnu/packages/patches/minimacy.patch

Toggle diff (138 lines)
diff --git a/gnu/packages/minimacy.scm b/gnu/packages/minimacy.scm
new file mode 100644
index 0000000000..549ca8f14f
--- /dev/null
+++ b/gnu/packages/minimacy.scm
@@ -0,0 +1,90 @@
+;;; 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 git-download)
+ #:use-module (guix build-system gnu)
+ #: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 "0.6.2")))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1x9i1spf79lq3kxms55dx7lf8pl84cyblq313sjyfpr9l187ailb"))
+ (patches (search-patches "minimacy.patch"))))
+ (build-system gnu-build-system)
+ (inputs (list libx11 libxext alsa-lib mesa glu))
+ (outputs '("out" ; the core
+ "X11" ; for GUI programs, with X11 and ALSA
+ "X11GL")) ; for GUI programs, with X11, OpenGL, and ALSA
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-path
+ (lambda _
+ (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 _
+ (let ((output (assoc-ref %outputs "out")))
+ (install-file "bin/minimacy" (string-append output "/bin"))
+ (mkdir-p (string-append output "/rom"))
+ (mkdir-p (string-append output "/system"))
+ (copy-recursively "rom" (string-append output "/rom"))
+ (copy-recursively "system" (string-append output "/system")))
+ (let ((output (assoc-ref %outputs "X11")))
+ (install-file "bin/minimacyX11" (string-append output "/bin")))
+ (let ((output (assoc-ref %outputs "X11GL")))
+ (install-file "bin/minimacyX11GL" (string-append output "/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)
+ {
--
2.38.1
S
S
Simon Tournier wrote on 27 Jan 2023 19:49
[PATCH v2] gnu: Add minimacy.
(address . 59997@debbugs.gnu.org)(name . Konrad Hinsen)(address . konrad.hinsen@fastmail.net)
20230127184925.3126904-1-zimon.toutoune@gmail.com
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 | 97 +++++++++++++++++++++++++++++
gnu/packages/patches/minimacy.patch | 34 ++++++++++
3 files changed, 133 insertions(+)
create mode 100644 gnu/packages/minimacy.scm
create mode 100644 gnu/packages/patches/minimacy.patch

Toggle diff (167 lines)
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..6d8e6a3f75
--- /dev/null
+++ b/gnu/packages/minimacy.scm
@@ -0,0 +1,97 @@
+;;; 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 git-download)
+ #:use-module (guix build-system gnu)
+ #: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
+ `(#: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)
+ {

base-commit: 8e1cca32b938cef0812ce042c6c2e8bccb326ec7
--
2.38.1
S
S
Simon Tournier wrote on 27 Jan 2023 19:50
Re: [bug#59997] [PATCH] gnu: add minimacy
87o7qjn75e.fsf@gmail.com
Hi Konrad,

I have sent a V2 with some minor tweaks.

Cheers,
simon
S
S
Simon Tournier wrote on 27 Jan 2023 20:20
[PATCH v3] gnu: Add minimacy.
(address . 59997@debbugs.gnu.org)(name . Konrad Hinsen)(address . konrad.hinsen@fastmail.net)
20230127192031.3142167-1-zimon.toutoune@gmail.com
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

Toggle diff (172 lines)
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)
+ {

base-commit: 8e1cca32b938cef0812ce042c6c2e8bccb326ec7
--
2.38.1
K
K
Konrad Hinsen wrote on 28 Jan 2023 16:56
Re: [bug#59997] [PATCH] gnu: add minimacy
m1pmayhcud.fsf@fastmail.net
Simon Tournier <zimon.toutoune@gmail.com> writes:

Toggle quote (2 lines)
> I have sent a V2 with some minor tweaks.

And a V3. Looks good to me - and I learned about two more files in the
Guix infrastructure.

Konrad.
L
L
Ludovic Courtès wrote on 24 Feb 2023 22:32
Re: bug#59997: [PATCH] gnu: add minimacy
(name . Simon Tournier)(address . zimon.toutoune@gmail.com)
87o7pi21hv.fsf_-_@gnu.org
HI,

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

Toggle quote (6 lines)
> 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.

[...]

Toggle quote (8 lines)
> 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. :-)

Toggle quote (4 lines)
> + (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?

Toggle quote (2 lines)
> + (delete 'check))))

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

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

s/an open-source/a/

Toggle quote (6 lines)
> +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’.
K
K
Konrad Hinsen wrote on 26 Feb 2023 17:08
(address . 59997@debbugs.gnu.org)
m1a610wgsw.fsf@fastmail.net
Hi Ludo,

Thanks for looking into this!

Toggle quote (2 lines)
> It misses the very first line. :-)

Oops :-)

Toggle quote (3 lines)
> 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".

Toggle quote (4 lines)
> 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.

Toggle quote (2 lines)
> Rather #:tests? #f with a comment explaining why.

OK.

Toggle quote (2 lines)
> Could you send one last revision?

Coming...

Cheers,
Konrad.
K
K
Konrad Hinsen wrote on 26 Feb 2023 17:13
[PATCH v4] gnu: add minimacy
(address . 59997@debbugs.gnu.org)
m17cw4wgkr.fsf_-_@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 | 103 ++++++++++++++++++++++++++++
gnu/packages/patches/minimacy.patch | 34 +++++++++
3 files changed, 139 insertions(+)
create mode 100644 gnu/packages/minimacy.scm
create mode 100644 gnu/packages/patches/minimacy.patch

Toggle diff (171 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 4ccf015316..c72f14b685 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -423,6 +423,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/mold.scm \
@@ -1548,6 +1549,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..2a04d7c117
--- /dev/null
+++ b/gnu/packages/minimacy.scm
@@ -0,0 +1,103 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; 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
+ "gui" ; for GUI programs, with X11 and ALSA
+ "opengl")) ; for GUI programs, with X11, OpenGL, and ALSA
+ (arguments
+ (list
+ #:tests? #f ; no tests
+ #: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"))
+ (gui (assoc-ref outputs "gui"))
+ (opengl (assoc-ref outputs "opengl")))
+ (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 gui "/bin"))
+ (install-file "bin/minimacyX11GL"
+ (string-append opengl "/bin"))))))))
+ (synopsis "Minimalist computing system")
+ (description
+ "Minimacy is a 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)
+ {
--
2.39.1
?