GNU bug report logs - #74734
[PATCH] gnu: Add inferno

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: guix-patches; Reported by: Homo <gay@HIDDEN>; Keywords: patch; dated Sun, 8 Dec 2024 08:29:03 UTC; Maintainer for guix-patches is guix-patches@HIDDEN.

Message received at 74734 <at> debbugs.gnu.org:


Received: (at 74734) by debbugs.gnu.org; 6 Jan 2025 18:02:25 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jan 06 13:02:25 2025
Received: from localhost ([127.0.0.1]:39974 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tUrQm-0001rH-GB
	for submit <at> debbugs.gnu.org; Mon, 06 Jan 2025 13:02:25 -0500
Received: from layka.disroot.org ([178.21.23.139]:49664)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <gay@HIDDEN>) id 1tUrQi-0001r5-Mq
 for 74734 <at> debbugs.gnu.org; Mon, 06 Jan 2025 13:02:22 -0500
Received: from mail01.disroot.lan (localhost [127.0.0.1])
 by disroot.org (Postfix) with ESMTP id CB80925BD4;
 Mon,  6 Jan 2025 19:02:18 +0100 (CET)
X-Virus-Scanned: SPAM Filter at disroot.org
Received: from layka.disroot.org ([127.0.0.1])
 by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP
 id DdM1I5hpGByJ; Mon,  6 Jan 2025 19:02:14 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail;
 t=1736186534; bh=0emUmeTRQMf+tiDZ+Xh/oCXr/ZDeTpUo+AXBV/GxnyA=;
 h=From:To:Cc:Subject:Date;
 b=ePqQDP2C+kK1lzOr0+y6fV11DGGQWWPfKNZjp3vt8bV/ZnZZb6pvyaqjcnfA44nhP
 GMqkNP2dc06n1xG0arxMrp1hm/m3FnygbhxrenBBnQhjYDfStTmWWHPIcklIt0xHpE
 rXYc7YlITLVvYm6GEzuQPK6MpSDolF5rXFGR4rMXrgIrtkEDaVPcx6PGNTtY8JURJQ
 6k3wbEKiPB6CyIF54z4BlowS1HutpZ8llKcLEKYCteAe5a86UGM0fvS1t7pUKqHLMC
 fyPdSvxKjzzCT/t8p/hQ7hxEMH3QALwSIava2YnXdTxqnOsIOurC6cnXn+GQ0UMB1v
 6w1qA+Viq8jXQ==
From: Homo <gay@HIDDEN>
To: 74734 <at> debbugs.gnu.org,
	ludo@HIDDEN
Subject: [PATCH v4] gnu: Add inferno.
Date: Mon,  6 Jan 2025 19:32:43 +0200
Message-ID: <20250106180155.10796-1-gay@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74734
Cc: Homo <gay@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Based on earlier work rejected for licensing reasons, code has been relicensed from LPL to Expat.

Just in case remove all fonts from distribution, instead fonts from plan9port are used.

* gnu/packages/inferno.scm: New file.
* gnu/packages/patches/inferno-fix-crash.patch: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES, dist_patch_DATA): Register new files.

Change-Id: I9a05a8bb2397796f6af86fa3be3408982ca62648
---
Hi, reformatted according to suggestions,
also fixed shebangs in scripts running in Dis VM.

I had to make little refactoring to avoid
duplication of variables, more specifically
it's hard to consistently track objtype.

P.S. Added mention where .patch file comes from.

To use system fonts, either use plan9port's fontsrv:
$ mkdir -p $HOME/mnt/fonts
$ 9 fontsrv -m $HOME/mnt/fonts
then inside Inferno:
% bind $home/mnt/fonts /fonts

Alternatively if you are familiar with 9P authentication:
$ 9 fontsrv
$ 9 9pserve -c 'unix!/tmp/ns.$USER.$DISPLAY/font' 'tcp!127.0.0.1!8080'
then inside Inferno:
% mount tcp!127.0.0.1!8080 /fonts

Inferno doesn't undersdand "unix!", because there are no sockets
in Plan 9 and Inferno, this is a workaround from plan9port because
there are no network-transparent filesystem namespaces in POSIX systems,
and Linux namespaces are not suitable for this task at all.

 gnu/local.mk                                 |   2 +
 gnu/packages/inferno.scm                     | 322 +++++++++++++++++++
 gnu/packages/patches/inferno-fix-crash.patch |  17 +
 3 files changed, 341 insertions(+)
 create mode 100644 gnu/packages/inferno.scm
 create mode 100644 gnu/packages/patches/inferno-fix-crash.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index f118fe4442..91204cdeb6 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -377,6 +377,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/image-processing.scm	\
   %D%/packages/image-viewers.scm	\
   %D%/packages/imagemagick.scm			\
+  %D%/packages/inferno.scm			\
   %D%/packages/inklingreader.scm		\
   %D%/packages/inkscape.scm			\
   %D%/packages/installers.scm			\
@@ -1592,6 +1593,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/igraph-fix-varargs-integer-size.patch	\
   %D%/packages/patches/ilmbase-fix-tests.patch			\
   %D%/packages/patches/indent-CVE-2024-0911.patch	\
+  %D%/packages/patches/inferno-fix-crash.patch		\
   %D%/packages/patches/instead-use-games-path.patch		\
   %D%/packages/patches/intltool-perl-compatibility.patch	\
   %D%/packages/patches/inetutils-hurd64.patch			\
diff --git a/gnu/packages/inferno.scm b/gnu/packages/inferno.scm
new file mode 100644
index 0000000000..67df73bf02
--- /dev/null
+++ b/gnu/packages/inferno.scm
@@ -0,0 +1,322 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Diego Nicola Barbato <dnbarbato@HIDDEN>
+;;; Copyright © 2024 Homo <gay@HIDDEN>
+;;;
+;;; 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 inferno)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix gexp)
+  #:use-module (guix git-download)
+  #:use-module (guix packages)
+  #:use-module ((guix licenses)
+                #:prefix license:)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages plan9)
+  #:use-module (gnu packages xorg)
+  #:use-module (ice-9 match))
+
+(define-public inferno
+  ;; There are no tags, also a lot of improvements and bugfixes happenned since 2015.
+  (let ((commit "67e70befb2ad0058fd7894be34c492ddb6d09988")
+        (revision "0"))
+    (package
+      (name "inferno")
+      (version (git-version "4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/inferno-os/inferno-os")
+               (commit commit)
+               ;; Inferno uses customized Freetype library with #include "lib9.h"
+               ;; TODO: use packaged Freetype library.
+               (recursive? #t)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0g3fzb991hbwa7r3vsnybw7m1v13nins5ajmygnvz4vmx5rzl405"))
+         (patches (search-patches "inferno-fix-crash.patch"))
+         (modules '((guix build utils)))
+         ;; Remove bundled non-free and potentially non-free fonts.
+         (snippet '(delete-file-recursively "fonts"))))
+      (build-system gnu-build-system)
+      (arguments
+       (list
+        ;; Force a 32-bit build targeting a similar architecture, i.e.:
+        ;; armhf for armhf/aarch64, i686 for i686/x86_64.
+        ;; TODO: mips and powerpc.
+        #:system (match (%current-system)
+                   ((or "armhf-linux" "aarch64-linux")
+                    "armhf-linux")
+                   (_ "i686-linux"))
+        ;; No tests.
+        #:tests? #f
+        #:phases
+        #~(modify-phases %standard-phases
+            (replace 'unpack
+              (lambda* (#:key source #:allow-other-keys)
+                (let* ((root (string-append #$output "/inferno")))
+                  ;; Copy directly to 'root' since the source
+                  ;; tree doubles as Inferno's root directory
+                  ;; and its path is baked into the emu binary.
+                  (mkdir-p root)
+                  (copy-recursively source root)
+                  (chdir root))))
+            ;; Scripts running in virtual machine need /dis/sh.
+            (delete 'patch-generated-file-shebangs)
+            (delete 'patch-shebangs)
+            (replace 'patch-source-shebangs
+              (lambda* (#:key inputs #:allow-other-keys)
+                ;; Substitute ocurrences of /bin/sh.
+                (for-each (lambda (file)
+                            (substitute* file
+                              (("/bin/sh")
+                               (search-input-file inputs "/bin/bash"))))
+                          '("makemk.sh"
+                            "mkfiles/mkhost-Linux"
+                            "emu/Linux/mk-wrt"
+                            "utils/mk/Posix.c"))))
+            (add-after 'patch-source-shebangs 'patch-src-files
+              (lambda _
+                ;; Do not pass '-m32' unconditionally
+                ;; when building mk.
+                (substitute* "makemk.sh" (("-m32") ""))
+                ;; Use the correct name for gcc.
+                (substitute* "mkfiles/mkfile-Linux-386"
+                  (("cc -")
+                   ;; Don't match yacc.
+                   "gcc -"))
+                (substitute* "mkfiles/mkfile-Linux-arm"
+                  (("arm-gcc")
+                   "gcc"))
+                ;; Conflicting occurence of fsub.
+                (for-each (lambda (file)
+                            (substitute* file
+                              (("fsub")
+                               "_fsub")))
+                          '("utils/libmach/vcodas.c"
+                            "utils/libmach/vdb.c"))
+                ;; Fix build.
+                (for-each (lambda (file)
+                            (substitute* file
+                              (("^CFLAGS=")
+                               "CFLAGS=-D_GNU_SOURCE -fcommon")))
+                          '("mkfiles/mkfile-Linux-386"
+                            "mkfiles/mkfile-Linux-arm"
+                            "mkfiles/mkfile-Linux-power"
+                            "mkfiles/mkfile-Linux-spim"))
+                ;; Make build reproducible by
+                ;; ensuring timestamps embedded into
+                ;; binaries are set to 0.
+                (substitute* "emu/Linux/mkfile"
+                  (("^KERNDATE=.*$")
+                   "KERNDATE=0\n"))))
+            (replace 'configure
+              (lambda* (#:key inputs #:allow-other-keys)
+                (let* ((objtype #$@(match (%current-system)
+                                     ((or "armhf-linux" "aarch64-linux")
+                                      `("arm"))
+                                     (_ `("386"))))
+                       (root (string-append #$output "/inferno"))
+                       (root/bindir (string-append root "/Linux/" objtype "/bin")))
+                  (substitute* "mkconfig"
+                    (("ROOT=/usr/inferno")
+                     (string-append "ROOT=" root))
+                    (("SYSHOST=Plan9")
+                     "SYSHOST=Linux")
+                    (("OBJTYPE=\\$objtype")
+                     (string-append "OBJTYPE=" objtype)))
+                  ;; Delete pre-built binaries.
+                  (delete-file-recursively root/bindir)
+                  (mkdir-p root/bindir)
+                  ;; Avoid duplicating objtype variable later.
+                  (symlink root/bindir (string-append #$output "/inferno/bin"))
+                  (setenv "PATH"
+                    (string-append
+                      ;; These utilities will be used later in build.
+                      root/bindir ":"
+                      (getenv "PATH") ":"
+                      ;; Bootstrap mk binary.
+                      (search-input-directory inputs "/plan9/bin"))))))
+            (replace 'build
+              (lambda _
+                ;; Build emu, utilities and Dis binaries using mk.
+                (invoke "mk" "-s" "nuke" "mkdirs" "install")))
+            (replace 'install
+              (lambda* (#:key inputs #:allow-other-keys)
+                (let* ((bindir (string-append #$output "/bin"))
+                       (emu-script (string-append bindir "/emu"))
+                       (infwm-script (string-append bindir "/infwm"))
+                       (root/bindir (string-append #$output "/inferno/bin"))
+                       (simulate-fonts
+                         (lambda (size targets)
+                           (string-concatenate
+                             (map (lambda (file)
+                                    (string-append
+                                      "ramfile /fonts/" file ".font; "
+                                      "bind /fonts/fixed/unicode." size ".font"
+                                      " /fonts/" file ".font; "))
+                                  targets))))
+                       (write-script
+                         (lambda (file cmds)
+                           (with-output-to-file file
+                             (lambda ()
+                               (display
+                                 (string-concatenate
+                                   (cons* "#!"
+                                          (search-input-file inputs "/bin/bash")
+                                          "\n"
+                                          cmds)))))
+                           (chmod file #o755))))
+                  (mkdir-p bindir)
+                  (mkdir-p "fonts")
+                  ;; Install emu script.
+                  (write-script emu-script (list
+                    "exec " root/bindir "/emu sh -c \""
+                    ;; Use plan9port's fonts.
+                    "bind '#U*"
+                    (search-input-directory inputs "/plan9/font")
+                    "' /fonts; "
+                    ;; Pretend fonts were not removed.
+                    ;; TODO: de-hardcode fonts from apps.
+                    ;; TODO: use fonts available in the host system,
+                    ;;       plan9port's fontsrv is a good way to start.
+                    ;; TODO: find fix for minitel fonts.
+                    "memfs -b /fonts; "
+                    (string-concatenate
+                      (map (lambda (dir)
+                             (string-append
+                              "mkdir /fonts/" dir "; "
+                              "bind /fonts/fixed /fonts/" dir "; "))
+                           '("charon" "lucida" "lucidasans" "lucm" "pelm")))
+                    (simulate-fonts "6x9"
+                                    '("charon/cw.tiny"
+                                      "charon/plain.tiny"
+                                      "lucida/unicode.6"
+                                      "lucidasans/latin1.6"
+                                      "lucidasans/typelatin1.6"
+                                      "lucidasans/unicode.6"))
+                    (simulate-fonts "7x13"
+                                    '("charon/cw.small"
+                                      "charon/plain.small"
+                                      "lucida/unicode.7"
+                                      "lucidasans/latin1.7"
+                                      "lucidasans/typelatin1.7"
+                                      "lucidasans/unicode.7"))
+                    (simulate-fonts "8x13"
+                                    '("charon/cw.normal"
+                                      "charon/plain.normal"
+                                      "lucida/unicode.8"
+                                      "lucidasans/euro.8"
+                                      "lucidasans/latin1.8"
+                                      "lucidasans/typelatin1.8"
+                                      "lucidasans/unicode.8"
+                                      "pelm/unicode.8"))
+                    (simulate-fonts "9x15"
+                                    '("charon/cw.large"
+                                      "charon/plain.large"
+                                      "lucida/unicode.10"
+                                      "lucidasans/latin1.10"
+                                      "lucidasans/typelatin1.10"
+                                      "lucidasans/unicode.10"
+                                      "lucm/unicode.9"
+                                      "pelm/ascii.12"
+                                      "pelm/latin1.9"
+                                      "pelm/unicode.9"))
+                    (simulate-fonts "10x20"
+                                    '("charon/cw.vlarge"
+                                      "charon/plain.vlarge"
+                                      "lucida/moo.16"
+                                      "lucida/unicode.13"
+                                      "lucidasans/latin1.13"
+                                      "lucidasans/typelatin1.13"
+                                      "lucidasans/unicode.13"
+                                      "pelm/ascii.16"))
+                    (simulate-fonts "6x13O"
+                                    '("charon/italic.tiny"
+                                      "charon/italic.small"
+                                      "lucidasans/italiclatin1.6"
+                                      "lucidasans/italiclatin1.7"))
+                    (simulate-fonts "7x13O"
+                                    '("charon/italic.normal"
+                                      "lucidasans/italiclatin1.8"))
+                    (simulate-fonts "8x13O"
+                                    '("charon/italic.large"
+                                      "charon/italic.vlarge"
+                                      "lucidasans/italiclatin1.10"
+                                      "lucidasans/italiclatin1.13"))
+                    (simulate-fonts "6x13B"
+                                    '("charon/bold.tiny"
+                                      "lucidasans/boldlatin1.6"))
+                    (simulate-fonts "7x13B"
+                                    '("charon/bold.small"
+                                      "lucidasans/boldlatin1.7"))
+                    (simulate-fonts "8x13B"
+                                    '("charon/bold.normal"
+                                      "lucidasans/boldlatin1.8"))
+                    (simulate-fonts "9x15B"
+                                    '("charon/bold.large"
+                                      "lucidasans/boldlatin1.10"))
+                    (simulate-fonts "9x18B"
+                                    '("charon/bold.vlarge"
+                                      "lucidasans/boldlatin1.13"))
+                    ;; Bind the host's /tmp to Inferno's
+                    ;; /tmp to make it writable.
+                    "bind -bc '#U*/tmp' /tmp; "
+                    ;; Bind the host's /home to Inferno's
+                    ;; /usr.
+                    "bind '#U*/home' /usr; "
+                    "$*\"\n"))
+                  ;; Install infwm script.
+                  (write-script infwm-script (list
+                    "exec " bindir "/emu $* wm/wm wm/logon -u $USER\n"))
+                  ;; Install a symlink to the Limbo compiler.
+                  (symlink (string-append root/bindir "/limbo")
+                           (string-append bindir "/limbo")))))
+            ;; Inferno doesn't compress man pages.
+            (delete 'compress-documentation))))
+      (inputs (list libx11 libxext plan9port xorgproto))
+      (home-page "https://www.inferno-os.org")
+      (synopsis
+       "Compact operating system for building cross-platform distributed systems")
+      (description
+       ;; Except for the last sentence this is taken verbatim from the
+       ;; intro(1) man page (man/1/0intro in the source tree).
+       "Inferno is a virtualised operating system that can run natively across
+a wide range of processor architectures or hosted on a wide range of
+operating systems.  The principal components of the system are:
+@itemize
+@item The Inferno kernel which can run both native and hosted on a
+range of platforms and which presents the same interface to programs
+in both cases.
+@item The Dis virtual machine.
+@item Styx - the tiny broad-spectrum file service protocol.
+@item Limbo - a new simple, modular, concurrent programming language.
+@item Tk and Prefab - graphical user interface (GUI) primitives
+without a lot of goo.
+@item The portable cross-development suites that allow any native
+Inferno platform to be cross-compiled on any hosted system.
+@end itemize
+This package provides hosted Inferno.
+")
+      (supported-systems '("i686-linux" "x86_64-linux" "armhf-linux"
+                           "aarch64-linux"))
+      (license (list license:expat ;MIT license
+                     license:freetype
+                     ;; According to NOTICE the combined work is effectively
+                     ;; GPLv2+.
+                     license:gpl2+
+                     license:lgpl2.0+)))))
diff --git a/gnu/packages/patches/inferno-fix-crash.patch b/gnu/packages/patches/inferno-fix-crash.patch
new file mode 100644
index 0000000000..943812cce4
--- /dev/null
+++ b/gnu/packages/patches/inferno-fix-crash.patch
@@ -0,0 +1,17 @@
+Fixes crash.
+Patch from <https://github.com/inferno-os/inferno-os/pull/13>.
+
+diff --git a/emu/Linux/os.c b/emu/Linux/os.c
+index 08b039d6..0d8a0cf3 100644
+--- a/emu/Linux/os.c
++++ b/emu/Linux/os.c
+@@ -18,6 +18,9 @@
+ 
+ #include	<raise.h>
+ 
++/* For dynamic linking init/fini code that needs malloc */
++void (*coherence)(void) = nofence;
++
+ /* glibc 2.3.3-NTPL messes up getpid() by trying to cache the result, so we'll do it ourselves */
+ #include	<sys/syscall.h>
+ #define	getpid()	syscall(SYS_getpid)
-- 
2.47.1





Information forwarded to guix-patches@HIDDEN:
bug#74734; Package guix-patches. Full text available.

Message received at 74734 <at> debbugs.gnu.org:


Received: (at 74734) by debbugs.gnu.org; 6 Jan 2025 09:33:29 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Jan 06 04:33:29 2025
Received: from localhost ([127.0.0.1]:36690 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tUjUH-0000UY-CU
	for submit <at> debbugs.gnu.org; Mon, 06 Jan 2025 04:33:29 -0500
Received: from layka.disroot.org ([178.21.23.139]:51234)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <gay@HIDDEN>) id 1tUjUC-0000UM-Cw
 for 74734 <at> debbugs.gnu.org; Mon, 06 Jan 2025 04:33:27 -0500
Received: from mail01.disroot.lan (localhost [127.0.0.1])
 by disroot.org (Postfix) with ESMTP id B3EED25C4F;
 Mon,  6 Jan 2025 10:33:22 +0100 (CET)
X-Virus-Scanned: SPAM Filter at disroot.org
Received: from layka.disroot.org ([127.0.0.1])
 by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP
 id I3yV6Le5ciqc; Mon,  6 Jan 2025 10:33:18 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail;
 t=1736155998; bh=21q1weVrpWjdzDZrCgTKsR0dsC8484rr8PsxWok8R/w=;
 h=Date:From:To:Subject:In-Reply-To:References;
 b=QhJMJihZuFMFWUDB/iu/o6Y+KGyPI2UlPX9HnlmpSJnnMEFnqOKzGpnazx2LmV3YU
 oCeNbrfrA89PcyNv9PzVjm/VOzeUVedM66MwHQGEDCP6e7yUyYvxjAdDMLrVUooeI5
 P5gvI4Oqa/rZjnnD8zFk8SRHQcj6swuhdlb5qDTjkKeASd0UgUxm2jabsrVeRd9EhF
 Nes21a4VE8l9MV36pZYmdvvz/GlgLH+mbOMkxPexN8c3tAds76g7JpF6IUQExyK/jo
 PqUOxMnq5pMnfTihiOJKNGuB0OLsQYoKkwb7xkODrsL+Pk6BUUpqUXdQMF6cyNLDl2
 0f0VjnI/FBNgg==
MIME-Version: 1.0
Date: Mon, 06 Jan 2025 09:33:18 +0000
From: gay@HIDDEN
To: =?UTF-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>, 74734 <at> debbugs.gnu.org
Subject: Re: [bug#74734] [PATCH v3] gnu: Add inferno.
In-Reply-To: <87r05insui.fsf@HIDDEN>
References: <20241208002411.20796-1-gay@HIDDEN>
 <20241225212804.26266-1-gay@HIDDEN> <87r05insui.fsf@HIDDEN>
Message-ID: <df38ed4e5aacb9f48ae64e6313765380@HIDDEN>
X-Sender: gay@HIDDEN
Content-Type: text/plain; charset=US-ASCII;
 format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74734
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hi,

Sure, I'll send updated patch later, with a fix to broken scripts caused 
by guix replacing shebang #!/dis/sh.

If it's ok, I'd like to move /share/inferno to /inferno just like 
plan9port lives in /plan9.

If people start developing in Limbo or implementations of other 
languages add support for compiling to DIS virtual machine, there needs 
to be mechanism for re-generating emu script or namespace file so that 
it binds packages into union, otherwise this package should live in 
plan9.scm because of how closely related they are.

To get access to system fonts, users need to manually start fontsrv from 
plan9port.




Information forwarded to guix-patches@HIDDEN:
bug#74734; Package guix-patches. Full text available.

Message received at 74734 <at> debbugs.gnu.org:


Received: (at 74734) by debbugs.gnu.org; 4 Jan 2025 21:59:29 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Jan 04 16:59:29 2025
Received: from localhost ([127.0.0.1]:57761 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tUCB6-0007HZ-QQ
	for submit <at> debbugs.gnu.org; Sat, 04 Jan 2025 16:59:29 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:48402)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <ludo@HIDDEN>) id 1tUCB4-0007HK-Iu
 for 74734 <at> debbugs.gnu.org; Sat, 04 Jan 2025 16:59:27 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <ludo@HIDDEN>)
 id 1tUCAz-0008EL-1i; Sat, 04 Jan 2025 16:59:21 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-Version:Date:References:In-Reply-To:Subject:To:
 From; bh=kqRQAPnTcQqMSiRgNtuz4ACD6Ld5rDn5EB+Z2vhqrKo=; b=JSkH9qfN7ldcLjnHs+lX
 YiHeS1hsICZkLUMAA39dY1QlTl8kHqDeToBNbQ9kWfxLe3M6lTVsuRpVjgqL4ie57UFmGbxU/Mpz6
 jg6X9qwoRBV0e+NsuVWLfHkLoCv7pEu1O6WBn0zpuVapWHL8IYQBC+8p1OQbfeIaRmiMPLkHxvMPq
 vQ0iHgvsbBX+4NRki2Wugf3ArIM2kXslvlSNWqaY7mDVoYZCyv5qQ+ZcU8IvXZDgWPHnYoid/IHRK
 k9bUDCwHENZ5zSCpOkGs+kMGdSHn0z51rVBOeOx3t26SYrJoKY/COHY61plpBef7hEekay+AzIkGY
 0FMQenPpoSN4yg==;
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: Homo <gay@HIDDEN>
Subject: Re: [bug#74734] [PATCH v3] gnu: Add inferno.
In-Reply-To: <20241225212804.26266-1-gay@HIDDEN> (Homo's message of "Wed, 
 25 Dec 2024 23:23:30 +0200")
References: <20241208002411.20796-1-gay@HIDDEN>
 <20241225212804.26266-1-gay@HIDDEN>
Date: Sat, 04 Jan 2025 22:59:17 +0100
Message-ID: <87r05insui.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 74734
Cc: 74734 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi,

Homo <gay@HIDDEN> skribis:

> Based on earlier work rejected for licensing reasons, code has been relic=
ensed from LPL to Expat.
>
> Just in case remove all fonts from distribution, instead fonts from plan9=
port are used.
>
> * gnu/packages/inferno.scm: New file.
> * gnu/packages/patches/inferno-fix-crash.patch: New file.
> * gnu/local.mk (GNU_SYSTEM_MODULES, dist_patch_DATA): Register new files.
>
> Change-Id: Ie655f97fec5e249b8bbc92c66c5f13afabbc0552

[...]

> +(define-public inferno
> +  (let ((commit "67e70befb2ad0058fd7894be34c492ddb6d09988")
> +        (revision "0"))
> +    (package
> +      (name "inferno")
> +      (version (git-version "4" revision commit))

If there=E2=80=99s no release that can be used, please add a short comment
explaining why we=E2=80=99re picking a snapshot.

> +         ;; Remove bundled non-free and potentially non-free fonts.
> +         (snippet '(begin
> +                     (delete-file-recursively "fonts") #t))))

Just: (snippet '(delete-file-recursively "fonts")).

> +      (build-system gnu-build-system)
> +      (inputs (list libx11 libxext plan9port xorgproto))
> +      (arguments

Usually =E2=80=98arguments=E2=80=99 goes right after =E2=80=98build-system=
=E2=80=99.

> +       (list
> +        #:phases
> +        #~(let*
> +            ((bash (assoc-ref %build-inputs "bash"))
> +             (bindir (string-append #$output "/bin"))
> +             (emu-script (string-append bindir "/emu"))

This is quite unusual.  I would suggest instead moving these definitions
in the procedure where they=E2=80=99re used.

Also, prefer =E2=80=98search-input-file=E2=80=99 & co. instead of (assoc-ref
%build-inputs =E2=80=A6).

Otherwise LGTM.

Could you send an updated patch?

Thanks,
Ludo=E2=80=99.




Information forwarded to guix-patches@HIDDEN:
bug#74734; Package guix-patches. Full text available.

Message received at 74734 <at> debbugs.gnu.org:


Received: (at 74734) by debbugs.gnu.org; 25 Dec 2024 21:28:29 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 25 16:28:29 2024
Received: from localhost ([127.0.0.1]:39105 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tQYvc-0001ca-4k
	for submit <at> debbugs.gnu.org; Wed, 25 Dec 2024 16:28:29 -0500
Received: from layka.disroot.org ([178.21.23.139]:51670)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <gay@HIDDEN>) id 1tQYvY-0001cL-P2
 for 74734 <at> debbugs.gnu.org; Wed, 25 Dec 2024 16:28:26 -0500
Received: from mail01.disroot.lan (localhost [127.0.0.1])
 by disroot.org (Postfix) with ESMTP id 63DD725B68;
 Wed, 25 Dec 2024 22:28:23 +0100 (CET)
X-Virus-Scanned: SPAM Filter at disroot.org
Received: from layka.disroot.org ([127.0.0.1])
 by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP
 id 2b7l21d5IXts; Wed, 25 Dec 2024 22:28:19 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail;
 t=1735162099; bh=CtDlDe6DjDiBCadVyxP2dfbwvWDN3JYl9FYbq4QE84s=;
 h=From:To:Cc:Subject:Date;
 b=iJtaq7MnCAokAxdBIUZrBIYk3OFwuts5yxTHF1zfbvTO4+f4VzQAzCq82+MSr+UQG
 QT0flsHUUmnw8HPVLq2PN3iRyrWor5puoKTQ5fc45f+3BfXzl8PPKByg+ibetR29fO
 KNYues+Q36/lL2ZfPuLDuTKh4ZUQH6GzibeeWgKuecp6l3kN5x/NbplyUHfoLZDvKR
 5chbV5Gq7/2eVnJRJe8oqtbqxdYZVfa5DCpW0U2oEGf1yFhUJi0JtBWkulYaBwWWZK
 19hz4POsSP2glwKiNXyGsoi8C0UPtxCmRKbbBDc208RJDtBdOCBrYXfdAI1t7vQiLV
 tyx7hn5EVexpg==
From: Homo <gay@HIDDEN>
To: 74734 <at> debbugs.gnu.org
Subject: [PATCH v3] gnu: Add inferno.
Date: Wed, 25 Dec 2024 23:23:30 +0200
Message-ID: <20241225212804.26266-1-gay@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74734
Cc: Homo <gay@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Based on earlier work rejected for licensing reasons, code has been relicensed from LPL to Expat.

Just in case remove all fonts from distribution, instead fonts from plan9port are used.

* gnu/packages/inferno.scm: New file.
* gnu/packages/patches/inferno-fix-crash.patch: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES, dist_patch_DATA): Register new files.

Change-Id: Ie655f97fec5e249b8bbc92c66c5f13afabbc0552
---
Cleaned up mess caused by invoking guix style.
Now builds with mk from plan9port.
Some refactoring to improve readability and maintainability.

 gnu/local.mk                                 |   2 +
 gnu/packages/inferno.scm                     | 311 +++++++++++++++++++
 gnu/packages/patches/inferno-fix-crash.patch |  16 +
 3 files changed, 329 insertions(+)
 create mode 100644 gnu/packages/inferno.scm
 create mode 100644 gnu/packages/patches/inferno-fix-crash.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 84160f407a..cc15134036 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -377,6 +377,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/image-processing.scm	\
   %D%/packages/image-viewers.scm	\
   %D%/packages/imagemagick.scm			\
+  %D%/packages/inferno.scm			\
   %D%/packages/inklingreader.scm		\
   %D%/packages/inkscape.scm			\
   %D%/packages/installers.scm			\
@@ -1591,6 +1592,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/igraph-fix-varargs-integer-size.patch	\
   %D%/packages/patches/ilmbase-fix-tests.patch			\
   %D%/packages/patches/indent-CVE-2024-0911.patch	\
+  %D%/packages/patches/inferno-fix-crash.patch		\
   %D%/packages/patches/instead-use-games-path.patch		\
   %D%/packages/patches/intltool-perl-compatibility.patch	\
   %D%/packages/patches/inetutils-hurd64.patch			\
diff --git a/gnu/packages/inferno.scm b/gnu/packages/inferno.scm
new file mode 100644
index 0000000000..1fa90a5d63
--- /dev/null
+++ b/gnu/packages/inferno.scm
@@ -0,0 +1,311 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Diego Nicola Barbato <dnbarbato@HIDDEN>
+;;; Copyright © 2024 Homo <gay@HIDDEN>
+;;;
+;;; 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 inferno)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix gexp)
+  #:use-module (guix git-download)
+  #:use-module (guix packages)
+  #:use-module ((guix licenses)
+                #:prefix license:)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages plan9)
+  #:use-module (gnu packages xorg)
+  #:use-module (ice-9 match))
+
+(define-public inferno
+  (let ((commit "67e70befb2ad0058fd7894be34c492ddb6d09988")
+        (revision "0"))
+    (package
+      (name "inferno")
+      (version (git-version "4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/inferno-os/inferno-os")
+               (commit commit)
+               ;; Inferno uses customized Freetype library with #include "lib9.h"
+               ;; TODO: use packaged Freetype library.
+               (recursive? #t)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0g3fzb991hbwa7r3vsnybw7m1v13nins5ajmygnvz4vmx5rzl405"))
+         (patches (search-patches "inferno-fix-crash.patch"))
+         (modules '((guix build utils)))
+         ;; Remove bundled non-free and potentially non-free fonts.
+         (snippet '(begin
+                     (delete-file-recursively "fonts") #t))))
+      (build-system gnu-build-system)
+      (inputs (list libx11 libxext plan9port xorgproto))
+      (arguments
+       (list
+        ;; Force a 32-bit build targeting a similar architecture, i.e.:
+        ;; armhf for armhf/aarch64, i686 for i686/x86_64.
+        #:system (match (%current-system)
+                   ((or "armhf-linux" "aarch64-linux")
+                    "armhf-linux")
+                   (_ "i686-linux"))
+        ;; No tests.
+        #:tests? #f
+        #:phases
+        #~(let*
+            ((bash (assoc-ref %build-inputs "bash"))
+             (bindir (string-append #$output "/bin"))
+             (emu-script (string-append bindir "/emu"))
+             (infwm-script (string-append bindir "/infwm"))
+             (objtype #$@(match (%current-system)
+                           ((or "armhf-linux" "aarch64-linux")
+                            `("arm"))
+                           (_ `("386"))))
+             (root (string-append #$output "/share/inferno"))
+             (root/bindir (string-append root "/Linux/" objtype "/bin"))
+             (root/fontdir (string-append root "/fonts"))
+             (simulate-fonts
+               (lambda (size targets)
+                 (string-concatenate
+                   (map (lambda (file)
+                          (string-append
+                            "ramfile /fonts/" file ".font; "
+                            "bind /fonts/fixed/unicode." size ".font"
+                            " /fonts/" file ".font; "))
+                        targets))))
+             (write-script
+               (lambda (file cmds)
+                 (with-output-to-file file
+                   (lambda ()
+                     (display
+                       (string-concatenate
+                         (cons* "#!" bash "/bin/sh\n"
+                                cmds)))))
+                 (chmod file #o755))))
+            (modify-phases %standard-phases
+              (replace 'unpack
+                (lambda* (#:key source #:allow-other-keys)
+                  ;; Copy directly to 'root' since the source
+                  ;; tree doubles as Inferno's root directory
+                  ;; and its path is baked into the emu binary.
+                  (mkdir-p root)
+                  (copy-recursively source root)
+                  ;; Delete pre-built binaries.
+                  (delete-file-recursively root/bindir)
+                  (chdir root)))
+              (add-after 'unpack 'patch-src-files
+                (lambda _
+                  ;; Substitute ocurrences of /bin/sh.
+                  (for-each (lambda (file)
+                              (substitute* file
+                                (("/bin/sh")
+                                 (string-append bash
+                                  "/bin/sh"))))
+                            '("makemk.sh"
+                              "mkfiles/mkhost-Linux"
+                              "emu/Linux/mk-wrt"
+                              "utils/mk/Posix.c"))
+                  ;; Do not pass '-m32' unconditionally
+                  ;; when building mk.
+                  (substitute* "makemk.sh" (("-m32") ""))
+                  ;; Use the correct name for gcc.
+                  (substitute* "mkfiles/mkfile-Linux-386"
+                    (("cc -")
+                     ;; Don't match yacc.
+                     "gcc -"))
+                  (substitute* "mkfiles/mkfile-Linux-arm"
+                    (("arm-gcc")
+                     "gcc"))
+                  ;; Conflicting occurence of fsub.
+                  (for-each (lambda (file)
+                              (substitute* file
+                                (("fsub")
+                                 "_fsub")))
+                            '("utils/libmach/vcodas.c"
+                              "utils/libmach/vdb.c"))
+                  ;; Fix build.
+                  (for-each (lambda (file)
+                              (substitute* file
+                                (("^CFLAGS=")
+                                 "CFLAGS=-D_GNU_SOURCE -fcommon")))
+                            '("mkfiles/mkfile-Linux-386"
+                              "mkfiles/mkfile-Linux-arm"
+                              "mkfiles/mkfile-Linux-power"
+                              "mkfiles/mkfile-Linux-spim"))
+                  ;; Make build reproducible by
+                  ;; ensuring timestamps embedded into
+                  ;; binaries are set to 0.
+                  (substitute* "emu/Linux/mkfile"
+                    (("^KERNDATE=.*$")
+                     "KERNDATE=0\n"))))
+              (replace 'configure
+                (lambda _
+                  (substitute* "mkconfig"
+                    (("ROOT=/usr/inferno")
+                     (string-append "ROOT=" root))
+                    (("SYSHOST=Plan9")
+                     "SYSHOST=Linux")
+                    (("OBJTYPE=\\$objtype")
+                     (string-append "OBJTYPE=" objtype)))))
+              (replace 'build
+                (lambda* (#:key inputs #:allow-other-keys)
+                  ;; Add mk's and future utilities' locations to PATH.
+                  (setenv "PATH"
+                    (string-append
+                      root/bindir ":"
+                      (getenv "PATH") ":"
+                      (search-input-directory inputs "/plan9/bin")))
+                  ;; Build emu, utilities and .dis files using mk.
+                  (mkdir-p root/bindir)
+                  (invoke "mk" "-s" "nuke" "mkdirs" "install")))
+              (replace 'install
+                (lambda* (#:key inputs #:allow-other-keys)
+                  (mkdir-p bindir)
+                  (mkdir-p root/fontdir)
+                  ;; Install emu script.
+                  (write-script emu-script (list
+                    "exec " root/bindir "/emu sh -c \""
+                    ;; Use plan9port's fonts.
+                    "bind '#U*"
+                    (search-input-directory inputs "/plan9/font")
+                    "' /fonts; "
+                    ;; Pretend fonts were not removed.
+                    ;; TODO: de-hardcode fonts from apps.
+                    ;; TODO: use fonts available in the host system,
+                    ;;       plan9port's fontsrv is a good way to start.
+                    ;; TODO: find fix for minitel fonts.
+                    "memfs -b /fonts; "
+                    (string-concatenate
+                      (map (lambda (dir)
+                             (string-append
+                              "mkdir /fonts/" dir "; "
+                              "bind /fonts/fixed /fonts/" dir "; "))
+                           '("charon" "lucida" "lucidasans" "lucm" "pelm")))
+                    (simulate-fonts "6x9"
+                                    '("charon/cw.tiny"
+                                      "charon/plain.tiny"
+                                      "lucida/unicode.6"
+                                      "lucidasans/latin1.6"
+                                      "lucidasans/typelatin1.6"
+                                      "lucidasans/unicode.6"))
+                    (simulate-fonts "7x13"
+                                    '("charon/cw.small"
+                                      "charon/plain.small"
+                                      "lucida/unicode.7"
+                                      "lucidasans/latin1.7"
+                                      "lucidasans/typelatin1.7"
+                                      "lucidasans/unicode.7"))
+                    (simulate-fonts "8x13"
+                                    '("charon/cw.normal"
+                                      "charon/plain.normal"
+                                      "lucida/unicode.8"
+                                      "lucidasans/euro.8"
+                                      "lucidasans/latin1.8"
+                                      "lucidasans/typelatin1.8"
+                                      "lucidasans/unicode.8"
+                                      "pelm/unicode.8"))
+                    (simulate-fonts "9x15"
+                                    '("charon/cw.large"
+                                      "charon/plain.large"
+                                      "lucida/unicode.10"
+                                      "lucidasans/latin1.10"
+                                      "lucidasans/typelatin1.10"
+                                      "lucidasans/unicode.10"
+                                      "lucm/unicode.9"
+                                      "pelm/ascii.12"
+                                      "pelm/latin1.9"
+                                      "pelm/unicode.9"))
+                    (simulate-fonts "10x20"
+                                    '("charon/cw.vlarge"
+                                      "charon/plain.vlarge"
+                                      "lucida/moo.16"
+                                      "lucida/unicode.13"
+                                      "lucidasans/latin1.13"
+                                      "lucidasans/typelatin1.13"
+                                      "lucidasans/unicode.13"
+                                      "pelm/ascii.16"))
+                    (simulate-fonts "6x13O"
+                                    '("charon/italic.tiny"
+                                      "charon/italic.small"
+                                      "lucidasans/italiclatin1.6"
+                                      "lucidasans/italiclatin1.7"))
+                    (simulate-fonts "7x13O"
+                                    '("charon/italic.normal"
+                                      "lucidasans/italiclatin1.8"))
+                    (simulate-fonts "8x13O"
+                                    '("charon/italic.large"
+                                      "charon/italic.vlarge"
+                                      "lucidasans/italiclatin1.10"
+                                      "lucidasans/italiclatin1.13"))
+                    (simulate-fonts "6x13B"
+                                    '("charon/bold.tiny"
+                                      "lucidasans/boldlatin1.6"))
+                    (simulate-fonts "7x13B"
+                                    '("charon/bold.small"
+                                      "lucidasans/boldlatin1.7"))
+                    (simulate-fonts "8x13B"
+                                    '("charon/bold.normal"
+                                      "lucidasans/boldlatin1.8"))
+                    (simulate-fonts "9x15B"
+                                    '("charon/bold.large"
+                                      "lucidasans/boldlatin1.10"))
+                    (simulate-fonts "9x18B"
+                                    '("charon/bold.vlarge"
+                                      "lucidasans/boldlatin1.13"))
+                    ;; Bind the host's /tmp to Inferno's
+                    ;; /tmp to make it writable.
+                    "bind -bc '#U*/tmp' /tmp; "
+                    ;; Bind the host's /home to Inferno's
+                    ;; /usr.
+                    "bind '#U*/home' /usr; "
+                    "$*\"\n"))
+                  ;; Install infwm script.
+                  (write-script infwm-script (list
+                    "exec " bindir "/emu $* wm/wm wm/logon -u $USER\n"))
+                  ;; Install a symlink to the Limbo compiler.
+                  (symlink (string-append root/bindir "/limbo")
+                           (string-append bindir "/limbo"))))))))
+      (home-page "https://www.inferno-os.org")
+      (synopsis
+       "Compact operating system for building cross-platform distributed systems")
+      (description
+       ;; Except for the last sentence this is taken verbatim from the
+       ;; intro(1) man page (man/1/0intro in the source tree).
+       "Inferno is a virtualised operating system that can run natively across
+a wide range of processor architectures or hosted on a wide range of
+operating systems.  The principal components of the system are:
+@itemize
+@item The Inferno kernel which can run both native and hosted on a
+range of platforms and which presents the same interface to programs
+in both cases.
+@item The Dis virtual machine.
+@item Styx - the tiny broad-spectrum file service protocol.
+@item Limbo - a new simple, modular, concurrent programming language.
+@item Tk and Prefab - graphical user interface (GUI) primitives
+without a lot of goo.
+@item The portable cross-development suites that allow any native
+Inferno platform to be cross-compiled on any hosted system.
+@end itemize
+This package provides hosted Inferno.
+")
+      (supported-systems '("i686-linux" "x86_64-linux" "armhf-linux"
+                           "aarch64-linux"))
+      (license (list license:expat ;MIT license
+                     license:freetype
+                     ;; According to NOTICE the combined work is effectively
+                     ;; GPLv2+.
+                     license:gpl2+
+                     license:lgpl2.0+)))))
diff --git a/gnu/packages/patches/inferno-fix-crash.patch b/gnu/packages/patches/inferno-fix-crash.patch
new file mode 100644
index 0000000000..b9cde87f21
--- /dev/null
+++ b/gnu/packages/patches/inferno-fix-crash.patch
@@ -0,0 +1,16 @@
+Fixes crash.
+
+diff --git a/emu/Linux/os.c b/emu/Linux/os.c
+index 08b039d6..0d8a0cf3 100644
+--- a/emu/Linux/os.c
++++ b/emu/Linux/os.c
+@@ -18,6 +18,9 @@
+ 
+ #include	<raise.h>
+ 
++/* For dynamic linking init/fini code that needs malloc */
++void (*coherence)(void) = nofence;
++
+ /* glibc 2.3.3-NTPL messes up getpid() by trying to cache the result, so we'll do it ourselves */
+ #include	<sys/syscall.h>
+ #define	getpid()	syscall(SYS_getpid)
-- 
2.47.1





Information forwarded to guix-patches@HIDDEN:
bug#74734; Package guix-patches. Full text available.

Message received at 74734 <at> debbugs.gnu.org:


Received: (at 74734) by debbugs.gnu.org; 9 Dec 2024 04:21:52 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Dec 08 23:21:52 2024
Received: from localhost ([127.0.0.1]:52467 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tKVHJ-0003ps-1p
	for submit <at> debbugs.gnu.org; Sun, 08 Dec 2024 23:21:51 -0500
Received: from layka.disroot.org ([178.21.23.139]:52636)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <gay@HIDDEN>) id 1tKRB1-0007XQ-QP
 for 74734 <at> debbugs.gnu.org; Sun, 08 Dec 2024 18:59:05 -0500
Received: from mail01.disroot.lan (localhost [127.0.0.1])
 by disroot.org (Postfix) with ESMTP id 77F822521B;
 Mon,  9 Dec 2024 00:59:01 +0100 (CET)
X-Virus-Scanned: SPAM Filter at disroot.org
Received: from layka.disroot.org ([127.0.0.1])
 by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP
 id gVtOiXuKQ3je; Mon,  9 Dec 2024 00:58:57 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail;
 t=1733702337; bh=nYC/dfKG8zTIZPeoax7L//kes+OZHd1OZQJNdldvXag=;
 h=From:To:Cc:Subject:Date;
 b=KbtBjoHM2O7wNJQWQ2jGrz2G9bRm58xYq8LxUZzKJay0/pzVYTBJ9XF+nFGluHzgF
 QNdaQIJTvY1K6jAN0DnGBHltWFU9GL678I3tAX3hIJnYNDZmvBuMheKfwEy9Egzxfc
 03NbPC7aU2noNIPEpxC7ltr8dTezA9VZaoSbeSCRPPRx2twTAl/D1NEZyRoKuyURid
 Kj01wgeyiTQFre/LGapHfPcpcOSIJbXINT0KELqCJmNHuEmAUTGiiO/RknlJi/5pB9
 MKqN2caSOaytjW6kjA/ZhER9Ye1IAwdtnPAfvaVUwENhIxzgT3ApBCvm2WVMtRvx76
 VbU2KK3O8Fyxg==
From: Homo <gay@HIDDEN>
To: 74734 <at> debbugs.gnu.org
Subject: [PATCH v2] gnu: Add inferno
Date: Mon,  9 Dec 2024 01:52:59 +0200
Message-ID: <20241208235833.13520-1-gay@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74734
X-Mailman-Approved-At: Sun, 08 Dec 2024 23:21:44 -0500
Cc: Homo <gay@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Based on earlier work rejected for licensing reasons, code has been relicensed from LPL to MIT and all fonts are removed from distribution, instead fonts from plan9port are used.

Change-Id: I38e188b26f23db584518f168b2ff63abc8f6d46d
---
This fixes build error caused by (search-patches), also I didn't know immediately I had to run "guix style -S inputs" and "guix style -S arguments", as they are not mentioned directly in https://guix.gnu.org/manual/devel/en/html_node/Formatting-Code.html

 gnu/local.mk                                 |   1 +
 gnu/packages/inferno.scm                     | 336 +++++++++++++++++++
 gnu/packages/patches/inferno-fix-crash.patch |  14 +
 3 files changed, 351 insertions(+)
 create mode 100644 gnu/packages/inferno.scm
 create mode 100644 gnu/packages/patches/inferno-fix-crash.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index a7bd32453b..42dcf82ea3 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -375,6 +375,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/image-processing.scm	\
   %D%/packages/image-viewers.scm	\
   %D%/packages/imagemagick.scm			\
+  %D%/packages/inferno.scm			\
   %D%/packages/inklingreader.scm		\
   %D%/packages/inkscape.scm			\
   %D%/packages/installers.scm			\
diff --git a/gnu/packages/inferno.scm b/gnu/packages/inferno.scm
new file mode 100644
index 0000000000..016a3400eb
--- /dev/null
+++ b/gnu/packages/inferno.scm
@@ -0,0 +1,336 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Diego Nicola Barbato <dnbarbato@HIDDEN>
+;;; Copyright © 2024 Homo <gay@HIDDEN>
+;;;
+;;; 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 inferno)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix gexp)
+  #:use-module (guix git-download)
+  #:use-module (guix packages)
+  #:use-module ((guix licenses)
+                #:prefix license:)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages plan9)
+  #:use-module (gnu packages xorg)
+  #:use-module (ice-9 match))
+
+(define-public inferno
+  (let ((commit "67e70befb2ad0058fd7894be34c492ddb6d09988")
+        (revision "0"))
+    (package
+      (name "inferno")
+      (version (git-version "4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/inferno-os/inferno-os")
+               (commit commit)
+               ;; Inferno uses customized Freetype library with #include "lib9.h"
+               ;; TODO: use packaged Freetype library.
+               (recursive? #t)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0g3fzb991hbwa7r3vsnybw7m1v13nins5ajmygnvz4vmx5rzl405"))
+         (patches (search-patches "inferno-fix-crash.patch"))
+         ;; Remove bundled non-free and potentially non-free fonts.
+         (modules '((guix build utils)))
+         (snippet '(begin
+                     (delete-file-recursively "fonts") #t))))
+      (build-system gnu-build-system)
+      (inputs (list libx11 libxext plan9port xorgproto))
+      (arguments
+       (list
+        ;;Force a 32-bit build targeting a similar architecture, i.e.:
+        ;; armhf for armhf/aarch64, i686 for i686/x86_64.
+        #:system (match (%current-system)
+                      ((or "armhf-linux" "aarch64-linux") "armhf-linux")
+                      (_ "i686-linux"))
+        #:phases #~(let* ((bash (assoc-ref %build-inputs "bash"))
+                          (objtype #$@(match (%current-system)
+                                        ((or "armhf-linux" "aarch64-linux")
+                                         `("arm"))
+                                        (_ `("386"))))
+                          (out (assoc-ref %outputs "out"))
+                          (root (string-append out "/share/inferno"))
+                          (root/bindir (string-append root "/Linux/" objtype
+                                                      "/bin"))
+                          (root/fontdir (string-append root "/fonts"))
+                          (simulate-fonts (lambda (size targets)
+                                            (string-concatenate (map (lambda (file)
+                                                                       (string-append
+                                                                        "ramfile /fonts/"
+                                                                        file
+                                                                        ".font; "
+                                                                        "bind /fonts/fixed/unicode."
+                                                                        size
+                                                                        ".font /fonts/"
+                                                                        file
+                                                                        ".font; "))
+                                                                     targets))))
+                          (bindir (string-append out "/bin"))
+                          (emu-script (string-append bindir "/emu"))
+                          (infwm-script (string-append bindir "/infwm")))
+                     `(,(assoc 'set-paths %standard-phases) (unpack unquote
+                                                                    (lambda* (#:key
+                                                                              source
+                                                                              #:allow-other-keys)
+                                                                      ;; Extract directly to 'root' since the source
+                                                                      ;; tree doubles as Inferno's root directory
+                                                                      ;; and its path is baked into the emu binary.
+                                                                      (mkdir-p
+                                                                       root)
+                                                                      (copy-recursively
+                                                                       source
+                                                                       root)
+                                                                      (chdir
+                                                                       root)
+                                                                      #t))
+                       (patch-src-files unquote
+                                        (lambda _
+                                          ;; Substitute ocurrences of /bin/sh.
+                                          (for-each (lambda (file)
+                                                      (substitute* file
+                                                        (("/bin/sh")
+                                                         (string-append bash
+                                                          "/bin/sh"))))
+                                                    '("makemk.sh"
+                                                      "mkfiles/mkhost-Linux"
+                                                      "emu/Linux/mk-wrt"
+                                                      "utils/mk/Posix.c"))
+                                          ;; Do not pass '-m32' unconditionally
+                                          ;; when building mk.
+                                          (substitute* "makemk.sh"
+                                            (("-m32")
+                                             ""))
+                                          ;; Use the correct name for gcc.
+                                          (substitute* "mkfiles/mkfile-Linux-386"
+                                            (("cc -")
+                                             ;; Don't match yacc.
+                                             "gcc -"))
+                                          (substitute* "mkfiles/mkfile-Linux-arm"
+                                            (("arm-gcc")
+                                             "gcc"))
+                                          ;; Conflicting occurence of fsub.
+                                          (for-each (lambda (file)
+                                                      (substitute* file
+                                                        (("fsub")
+                                                         "_fsub")))
+                                                    '("utils/libmach/vcodas.c"
+                                                      "utils/libmach/vdb.c"))
+                                          ;; Fix build.
+                                          (for-each (lambda (file)
+                                                      (substitute* file
+                                                        (("^CFLAGS=")
+                                                         "CFLAGS=-D_GNU_SOURCE -fcommon")))
+                                                    '("mkfiles/mkfile-Linux-386"
+                                                      "mkfiles/mkfile-Linux-arm"
+                                                      "mkfiles/mkfile-Linux-power"
+                                                      "mkfiles/mkfile-Linux-spim"))
+                                          ;; Make build reproducible by
+                                          ;; ensuring timestamps embedded into
+                                          ;; binaries are set to 0.
+                                          (substitute* "emu/Linux/mkfile"
+                                            (("^KERNDATE=.*$")
+                                             "KERNDATE=0\n"))
+                                          #t))
+                       (configure unquote
+                                  (lambda _
+                                    (substitute* "mkconfig"
+                                      (("ROOT=/usr/inferno")
+                                       (string-append "ROOT=" root))
+                                      (("SYSHOST=Plan9")
+                                       "SYSHOST=Linux")
+                                      (("OBJTYPE=\\$objtype")
+                                       (string-append "OBJTYPE=" objtype))) #t))
+                       ;; Build mk.
+                       ;; TODO: Use mk from plan9port or 9base instead.
+                       (makemk unquote
+                               (lambda _
+                                 (invoke "./makemk.sh")))
+                       (build unquote
+                              (lambda _
+                                ;; Add mk's location to PATH.
+                                (setenv "PATH"
+                                        (string-append root/bindir ":"
+                                                       (getenv "PATH")))
+                                ;; Build emu and .dis files using mk.
+                                (invoke "mk" "-s" "nuke" "mkdirs" "install")))
+                       (install unquote
+                                (lambda* (#:key inputs #:allow-other-keys)
+                                  (mkdir-p bindir)
+                                  (mkdir-p root/fontdir)
+                                  ;; Install emu script.
+                                  (with-output-to-file emu-script
+                                    (lambda ()
+                                      (display (string-append "#!"
+                                                bash
+                                                "/bin/sh\n"
+                                                "exec "
+                                                root/bindir
+                                                "/emu "
+                                                "/dis/sh.dis -c \""
+                                                ;; Use plan9port's fonts.
+                                                "bind '#U*"
+                                                (search-input-directory inputs
+                                                 "/plan9/font")
+                                                "' /fonts; "
+                                                ;; Pretend fonts were not removed.
+                                                ;; TODO: de-hardcode.
+                                                ;; TODO: use fonts available in the host system.
+                                                ;; TODO: minitel fonts.
+                                                "memfs -b /fonts; "
+                                                (string-concatenate (map (lambda 
+                                                                                 (dir)
+                                                                           
+                                                                           (string-append
+                                                                            "mkdir /fonts/"
+                                                                            dir
+                                                                            "; "
+                                                                            "bind /fonts/fixed /fonts/"
+                                                                            dir
+                                                                            "; "))
+                                                                         '("charon"
+                                                                           "lucida"
+                                                                           "lucidasans"
+                                                                           "lucm"
+                                                                           "pelm")))
+                                                (simulate-fonts "6x9"
+                                                                '("charon/cw.tiny"
+                                                                  "charon/plain.tiny"
+                                                                  "lucida/unicode.6"
+                                                                  "lucidasans/latin1.6"
+                                                                  "lucidasans/typelatin1.6"
+                                                                  "lucidasans/unicode.6"))
+                                                (simulate-fonts "7x13"
+                                                                '("charon/cw.small"
+                                                                  "charon/plain.small"
+                                                                  "lucida/unicode.7"
+                                                                  "lucidasans/latin1.7"
+                                                                  "lucidasans/typelatin1.7"
+                                                                  "lucidasans/unicode.7"))
+                                                (simulate-fonts "8x13"
+                                                                '("charon/cw.normal"
+                                                                  "charon/plain.normal"
+                                                                  "lucida/unicode.8"
+                                                                  "lucidasans/euro.8"
+                                                                  "lucidasans/latin1.8"
+                                                                  "lucidasans/typelatin1.8"
+                                                                  "lucidasans/unicode.8"
+                                                                  "pelm/unicode.8"))
+                                                (simulate-fonts "9x15"
+                                                                '("charon/cw.large"
+                                                                  "charon/plain.large"
+                                                                  "lucida/unicode.10"
+                                                                  "lucidasans/latin1.10"
+                                                                  "lucidasans/typelatin1.10"
+                                                                  "lucidasans/unicode.10"
+                                                                  "lucm/unicode.9"
+                                                                  "pelm/ascii.12"
+                                                                  "pelm/latin1.9"
+                                                                  "pelm/unicode.9"))
+                                                (simulate-fonts "10x20"
+                                                                '("charon/cw.vlarge"
+                                                                  "charon/plain.vlarge"
+                                                                  "lucida/moo.16"
+                                                                  "lucida/unicode.13"
+                                                                  "lucidasans/latin1.13"
+                                                                  "lucidasans/typelatin1.13"
+                                                                  "lucidasans/unicode.13"
+                                                                  "pelm/ascii.16"))
+                                                (simulate-fonts "6x13O"
+                                                                '("charon/italic.tiny"
+                                                                  "charon/italic.small"
+                                                                  "lucidasans/italiclatin1.6"
+                                                                  "lucidasans/italiclatin1.7"))
+                                                (simulate-fonts "7x13O"
+                                                                '("charon/italic.normal"
+                                                                  "lucidasans/italiclatin1.8"))
+                                                (simulate-fonts "8x13O"
+                                                                '("charon/italic.large"
+                                                                  "charon/italic.vlarge"
+                                                                  "lucidasans/italiclatin1.10"
+                                                                  "lucidasans/italiclatin1.13"))
+                                                (simulate-fonts "6x13B"
+                                                                '("charon/bold.tiny"
+                                                                  "lucidasans/boldlatin1.6"))
+                                                (simulate-fonts "7x13B"
+                                                                '("charon/bold.small"
+                                                                  "lucidasans/boldlatin1.7"))
+                                                (simulate-fonts "8x13B"
+                                                                '("charon/bold.normal"
+                                                                  "lucidasans/boldlatin1.8"))
+                                                (simulate-fonts "9x15B"
+                                                                '("charon/bold.large"
+                                                                  "lucidasans/boldlatin1.10"))
+                                                (simulate-fonts "9x18B"
+                                                                '("charon/bold.vlarge"
+                                                                  "lucidasans/boldlatin1.13"))
+                                                ;; Bind the host's /tmp to Inferno's
+                                                ;; /tmp to make it writable.
+                                                "bind -bc '#U*/tmp' /tmp; "
+                                                ;; Bind the host's /home to Inferno's
+                                                ;; /usr.
+                                                "bind '#U*/home' /usr; "
+                                                "$*\"\n"))))
+                                  (chmod emu-script #o755)
+                                  ;; Install infwm script.
+                                  (with-output-to-file infwm-script
+                                    (lambda ()
+                                      (display (string-append "#!"
+                                                bash
+                                                "/bin/sh\n"
+                                                "exec "
+                                                bindir
+                                                "/emu $* wm/wm wm/logon -u $USER\n"))))
+                                  (chmod infwm-script #o755)
+                                  ;; Install a symlink to the Limbo compiler.
+                                  (symlink (string-append root/bindir "/limbo")
+                                           (string-append bindir "/limbo"))
+                                  #t))))))
+      (home-page "https://www.inferno-os.org")
+      (synopsis
+       "Compact operating system for building cross-platform distributed systems")
+      (description
+       ;; Except for the last sentence this is taken verbatim from the
+       ;; intro(1) man page (man/1/0intro in the source tree).
+       "Inferno is a virtualised operating system that can run natively across
+a wide range of processor architectures or hosted on a wide range of
+operating systems.  The principal components of the system are:
+@itemize
+@item The Inferno kernel which can run both native and hosted on a
+range of platforms and which presents the same interface to programs
+in both cases.
+@item The Dis virtual machine.
+@item Styx - the tiny broad-spectrum file service protocol.
+@item Limbo - a new simple, modular, concurrent programming language.
+@item Tk and Prefab - graphical user interface (GUI) primitives
+without a lot of goo.
+@item The portable cross-development suites that allow any native
+Inferno platform to be cross-compiled on any hosted system.
+@end itemize
+This package provides hosted Inferno.
+")
+      (supported-systems '("i686-linux" "x86_64-linux" "armhf-linux"
+                           "aarch64-linux"))
+      (license (list license:expat ;MIT license
+                     license:freetype
+                     ;; According to NOTICE the combined work is effectively
+                     ;; GPLv2+.
+                     license:gpl2+
+                     license:lgpl2.0+)))))
diff --git a/gnu/packages/patches/inferno-fix-crash.patch b/gnu/packages/patches/inferno-fix-crash.patch
new file mode 100644
index 0000000000..acf7b718b8
--- /dev/null
+++ b/gnu/packages/patches/inferno-fix-crash.patch
@@ -0,0 +1,14 @@
+diff --git a/emu/Linux/os.c b/emu/Linux/os.c
+index 08b039d6..0d8a0cf3 100644
+--- a/emu/Linux/os.c
++++ b/emu/Linux/os.c
+@@ -18,6 +18,9 @@
+ 
+ #include	<raise.h>
+ 
++/* For dynamic linking init/fini code that needs malloc */
++void (*coherence)(void) = nofence;
++
+ /* glibc 2.3.3-NTPL messes up getpid() by trying to cache the result, so we'll do it ourselves */
+ #include	<sys/syscall.h>
+ #define	getpid()	syscall(SYS_getpid)
-- 
2.46.0





Information forwarded to guix-patches@HIDDEN:
bug#74734; Package guix-patches. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 8 Dec 2024 08:28:55 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Dec 08 03:28:55 2024
Received: from localhost ([127.0.0.1]:49632 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tKCeq-0003fT-Aw
	for submit <at> debbugs.gnu.org; Sun, 08 Dec 2024 03:28:55 -0500
Received: from lists.gnu.org ([209.51.188.17]:40834)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <gay@HIDDEN>) id 1tK58Q-0004Y3-0U
 for submit <at> debbugs.gnu.org; Sat, 07 Dec 2024 19:26:56 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <gay@HIDDEN>) id 1tK56K-0006vl-7R
 for guix-patches@HIDDEN; Sat, 07 Dec 2024 19:24:44 -0500
Received: from layka.disroot.org ([178.21.23.139])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <gay@HIDDEN>) id 1tK56G-0002d9-Es
 for guix-patches@HIDDEN; Sat, 07 Dec 2024 19:24:43 -0500
Received: from mail01.disroot.lan (localhost [127.0.0.1])
 by disroot.org (Postfix) with ESMTP id 5A40C252C0;
 Sun,  8 Dec 2024 01:24:37 +0100 (CET)
X-Virus-Scanned: SPAM Filter at disroot.org
Received: from layka.disroot.org ([127.0.0.1])
 by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP
 id 9eEhnHEWURTA; Sun,  8 Dec 2024 01:24:24 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail;
 t=1733617464; bh=YMaytbtVkG3SaGqNb3/iRuLWqe8hBzGpMHxj4L1kKBY=;
 h=From:To:Cc:Subject:Date;
 b=j9sLeCbT6Njr1iI0xlSuoXjMXxNCzHa4ZS+BZ16Y5eIUf0M6dBaPO8ChYureLOdg+
 BYfuuBYfH/V/QnuWmS/XHg4I1JQCCbY3aN9x2Szpi8kwn1ZG7J5GVnYqhb/YgxI//M
 etEi7k7pIoVwUU8kBt1tegC9KosAXJhL5eK9x4gOESEdAYM2vCV4DU4ZdHPtenpw9Z
 XTFOZ+zDqJA192pK0zcH59ZU+VPgSsMGqxBi3ad0E4Cpqitjs1FB5kFcMIHVuLX3bw
 xbWxkwNJq4vR3Y7JnBAn93A2F3dZt1E4i2j9S19pnuYsDKXn1uwZUGyL5vM7zvc16P
 UlOOO+eDNEiYA==
From: Homo <gay@HIDDEN>
To: guix-patches@HIDDEN
Subject: [PATCH] gnu: Add inferno
Date: Sun,  8 Dec 2024 02:24:09 +0200
Message-ID: <20241208002411.20796-1-gay@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Received-SPF: pass client-ip=178.21.23.139; envelope-from=gay@HIDDEN;
 helo=layka.disroot.org
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: -1.4 (-)
X-Debbugs-Envelope-To: submit
X-Mailman-Approved-At: Sun, 08 Dec 2024 03:28:50 -0500
Cc: Homo <gay@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.4 (--)

Based on earlier work rejected for licensing reasons, code has been relicensed from LPL to MIT and all fonts are removed from distribution, instead fonts from plan9port are used.
---
 gnu/local.mk                                 |   1 +
 gnu/packages/inferno.scm                     | 336 +++++++++++++++++++
 gnu/packages/patches/inferno-fix-crash.patch |  14 +
 3 files changed, 351 insertions(+)
 create mode 100644 gnu/packages/inferno.scm
 create mode 100644 gnu/packages/patches/inferno-fix-crash.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index a7bd32453b..42dcf82ea3 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -375,6 +375,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/image-processing.scm	\
   %D%/packages/image-viewers.scm	\
   %D%/packages/imagemagick.scm			\
+  %D%/packages/inferno.scm			\
   %D%/packages/inklingreader.scm		\
   %D%/packages/inkscape.scm			\
   %D%/packages/installers.scm			\
diff --git a/gnu/packages/inferno.scm b/gnu/packages/inferno.scm
new file mode 100644
index 0000000000..b4a60ad34c
--- /dev/null
+++ b/gnu/packages/inferno.scm
@@ -0,0 +1,336 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Diego Nicola Barbato <dnbarbato@HIDDEN>
+;;; Copyright © 2024 Homo <gay@HIDDEN>
+;;;
+;;; 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 inferno)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix git-download)
+  #:use-module (guix packages)
+  #:use-module ((guix licenses)
+                #:prefix license:)
+  #:use-module (gnu packages plan9)
+  #:use-module (gnu packages xorg)
+  #:use-module (ice-9 match))
+
+(define-public inferno
+  (let ((commit "67e70befb2ad0058fd7894be34c492ddb6d09988")
+        (revision "0"))
+    (package
+      (name "inferno")
+      (version (git-version "4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/inferno-os/inferno-os")
+               (commit commit)
+               ;; Inferno uses customized Freetype library with #include "lib9.h"
+               ;; TODO: use packaged Freetype library.
+               (recursive? #t)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0g3fzb991hbwa7r3vsnybw7m1v13nins5ajmygnvz4vmx5rzl405"))
+         (patches (search-patches "inferno-fix-crash.patch"))
+         ;; Remove bundled non-free and potentially non-free fonts.
+         (modules '((guix build utils)))
+         (snippet '(begin
+                     (delete-file-recursively "fonts") #t))))
+      (build-system gnu-build-system)
+      (inputs `(("libx11" ,libx11)
+                ("libxext" ,libxext)
+                ("plan9port" ,plan9port)
+                ("xorgproto" ,xorgproto)))
+      (arguments
+       `( ;Force a 32-bit build targeting a similar architecture, i.e.:
+         ;; armhf for armhf/aarch64, i686 for i686/x86_64.
+         #:system ,@(match (%current-system)
+                      ((or "armhf-linux" "aarch64-linux")
+                       `("armhf-linux"))
+                      (_ `("i686-linux")))
+         #:phases (let* ((bash (assoc-ref %build-inputs "bash"))
+                         (objtype ,@(match (%current-system)
+                                      ((or "armhf-linux" "aarch64-linux")
+                                       `("arm"))
+                                      (_ `("386"))))
+                         (out (assoc-ref %outputs "out"))
+                         (root (string-append out "/share/inferno"))
+                         (root/bindir (string-append root "/Linux/" objtype
+                                                     "/bin"))
+                         (root/fontdir (string-append root "/fonts"))
+                         (simulate-fonts (lambda (size targets)
+                                           (string-concatenate (map (lambda (file)
+                                                                      (string-append
+                                                                       "ramfile /fonts/"
+                                                                       file
+                                                                       ".font; "
+                                                                       "bind /fonts/fixed/unicode."
+                                                                       size
+                                                                       ".font /fonts/"
+                                                                       file
+                                                                       ".font; "))
+                                                                    targets))))
+                         (bindir (string-append out "/bin"))
+                         (emu-script (string-append bindir "/emu"))
+                         (infwm-script (string-append bindir "/infwm")))
+                    `(,(assoc 'set-paths %standard-phases) (unpack unquote
+                                                                   (lambda* (#:key
+                                                                             source
+                                                                             #:allow-other-keys)
+                                                                     ;; Extract directly to 'root' since the source
+                                                                     ;; tree doubles as Inferno's root directory
+                                                                     ;; and its path is baked into the emu binary.
+                                                                     (mkdir-p
+                                                                      root)
+                                                                     (copy-recursively
+                                                                      source
+                                                                      root)
+                                                                     (chdir
+                                                                      root)
+                                                                     #t))
+                      (patch-src-files unquote
+                                       (lambda _
+                                         ;; Substitute ocurrences of /bin/sh.
+                                         (for-each (lambda (file)
+                                                     (substitute* file
+                                                       (("/bin/sh")
+                                                        (string-append bash
+                                                         "/bin/sh"))))
+                                                   '("makemk.sh"
+                                                     "mkfiles/mkhost-Linux"
+                                                     "emu/Linux/mk-wrt"
+                                                     "utils/mk/Posix.c"))
+                                         ;; Do not pass '-m32' unconditionally
+                                         ;; when building mk.
+                                         (substitute* "makemk.sh"
+                                           (("-m32")
+                                            ""))
+                                         ;; Use the correct name for gcc.
+                                         (substitute* "mkfiles/mkfile-Linux-386"
+                                           (("cc -")
+                                            ;; Don't match yacc.
+                                            "gcc -"))
+                                         (substitute* "mkfiles/mkfile-Linux-arm"
+                                           (("arm-gcc")
+                                            "gcc"))
+                                         ;; Conflicting occurence of fsub.
+                                         (for-each (lambda (file)
+                                                     (substitute* file
+                                                       (("fsub")
+                                                        "_fsub")))
+                                                   '("utils/libmach/vcodas.c"
+                                                     "utils/libmach/vdb.c"))
+                                         ;; Fix build.
+                                         (for-each (lambda (file)
+                                                     (substitute* file
+                                                       (("^CFLAGS=")
+                                                        "CFLAGS=-D_GNU_SOURCE -fcommon")))
+                                                   '("mkfiles/mkfile-Linux-386"
+                                                     "mkfiles/mkfile-Linux-arm"
+                                                     "mkfiles/mkfile-Linux-power"
+                                                     "mkfiles/mkfile-Linux-spim"))
+                                         ;; Make build reproducible by
+                                         ;; ensuring timestamps embedded into
+                                         ;; binaries are set to 0.
+                                         (substitute* "emu/Linux/mkfile"
+                                           (("^KERNDATE=.*$")
+                                            "KERNDATE=0\n"))
+                                         #t))
+                      (configure unquote
+                                 (lambda _
+                                   (substitute* "mkconfig"
+                                     (("ROOT=/usr/inferno")
+                                      (string-append "ROOT=" root))
+                                     (("SYSHOST=Plan9")
+                                      "SYSHOST=Linux")
+                                     (("OBJTYPE=\\$objtype")
+                                      (string-append "OBJTYPE=" objtype))) #t))
+                      ;; Build mk.
+                      ;; TODO: Use mk from plan9port or 9base instead.
+                      (makemk unquote
+                              (lambda _
+                                (invoke "./makemk.sh")))
+                      (build unquote
+                             (lambda _
+                               ;; Add mk's location to PATH.
+                               (setenv "PATH"
+                                       (string-append root/bindir ":"
+                                                      (getenv "PATH")))
+                               ;; Build emu and .dis files using mk.
+                               (invoke "mk" "-s" "nuke" "mkdirs" "install")))
+                      (install unquote
+                               (lambda* (#:key inputs #:allow-other-keys)
+                                 (mkdir-p bindir)
+                                 (mkdir-p root/fontdir)
+                                 ;; Install emu script.
+                                 (with-output-to-file emu-script
+                                   (lambda ()
+                                     (display (string-append "#!"
+                                               bash
+                                               "/bin/sh\n"
+                                               "exec "
+                                               root/bindir
+                                               "/emu "
+                                               "/dis/sh.dis -c \""
+                                               ;; Use plan9port's fonts.
+                                               "bind '#U*"
+                                               (search-input-directory inputs
+                                                "/plan9/font")
+                                               "' /fonts; "
+                                               ;; Pretend fonts were not removed.
+                                               ;; TODO: de-hardcode.
+                                               ;; TODO: use fonts available in the host system.
+                                               ;; TODO: minitel fonts.
+                                               "memfs -b /fonts; "
+                                               (string-concatenate (map (lambda
+                                                                                (dir)
+                                                                          (string-append
+                                                                           "mkdir /fonts/"
+                                                                           dir
+                                                                           "; "
+                                                                           "bind /fonts/fixed /fonts/"
+                                                                           dir
+                                                                           "; "))
+                                                                        '("charon"
+                                                                          "lucida"
+                                                                          "lucidasans"
+                                                                          "lucm"
+                                                                          "pelm")))
+                                               (simulate-fonts "6x9"
+                                                               '("charon/cw.tiny"
+                                                                 "charon/plain.tiny"
+                                                                 "lucida/unicode.6"
+                                                                 "lucidasans/latin1.6"
+                                                                 "lucidasans/typelatin1.6"
+                                                                 "lucidasans/unicode.6"))
+                                               (simulate-fonts "7x13"
+                                                               '("charon/cw.small"
+                                                                 "charon/plain.small"
+                                                                 "lucida/unicode.7"
+                                                                 "lucidasans/latin1.7"
+                                                                 "lucidasans/typelatin1.7"
+                                                                 "lucidasans/unicode.7"))
+                                               (simulate-fonts "8x13"
+                                                               '("charon/cw.normal"
+                                                                 "charon/plain.normal"
+                                                                 "lucida/unicode.8"
+                                                                 "lucidasans/euro.8"
+                                                                 "lucidasans/latin1.8"
+                                                                 "lucidasans/typelatin1.8"
+                                                                 "lucidasans/unicode.8"
+                                                                 "pelm/unicode.8"))
+                                               (simulate-fonts "9x15"
+                                                               '("charon/cw.large"
+                                                                 "charon/plain.large"
+                                                                 "lucida/unicode.10"
+                                                                 "lucidasans/latin1.10"
+                                                                 "lucidasans/typelatin1.10"
+                                                                 "lucidasans/unicode.10"
+                                                                 "lucm/unicode.9"
+                                                                 "pelm/ascii.12"
+                                                                 "pelm/latin1.9"
+                                                                 "pelm/unicode.9"))
+                                               (simulate-fonts "10x20"
+                                                               '("charon/cw.vlarge"
+                                                                 "charon/plain.vlarge"
+                                                                 "lucida/moo.16"
+                                                                 "lucida/unicode.13"
+                                                                 "lucidasans/latin1.13"
+                                                                 "lucidasans/typelatin1.13"
+                                                                 "lucidasans/unicode.13"
+                                                                 "pelm/ascii.16"))
+                                               (simulate-fonts "6x13O"
+                                                               '("charon/italic.tiny"
+                                                                 "charon/italic.small"
+                                                                 "lucidasans/italiclatin1.6"
+                                                                 "lucidasans/italiclatin1.7"))
+                                               (simulate-fonts "7x13O"
+                                                               '("charon/italic.normal"
+                                                                 "lucidasans/italiclatin1.8"))
+                                               (simulate-fonts "8x13O"
+                                                               '("charon/italic.large"
+                                                                 "charon/italic.vlarge"
+                                                                 "lucidasans/italiclatin1.10"
+                                                                 "lucidasans/italiclatin1.13"))
+                                               (simulate-fonts "6x13B"
+                                                               '("charon/bold.tiny"
+                                                                 "lucidasans/boldlatin1.6"))
+                                               (simulate-fonts "7x13B"
+                                                               '("charon/bold.small"
+                                                                 "lucidasans/boldlatin1.7"))
+                                               (simulate-fonts "8x13B"
+                                                               '("charon/bold.normal"
+                                                                 "lucidasans/boldlatin1.8"))
+                                               (simulate-fonts "9x15B"
+                                                               '("charon/bold.large"
+                                                                 "lucidasans/boldlatin1.10"))
+                                               (simulate-fonts "9x18B"
+                                                               '("charon/bold.vlarge"
+                                                                 "lucidasans/boldlatin1.13"))
+                                               ;; Bind the host's /tmp to Inferno's
+                                               ;; /tmp to make it writable.
+                                               "bind -bc '#U*/tmp' /tmp; "
+                                               ;; Bind the host's /home to Inferno's
+                                               ;; /usr.
+                                               "bind '#U*/home' /usr; "
+                                               "$*\"\n"))))
+                                 (chmod emu-script #o755)
+                                 ;; Install infwm script.
+                                 (with-output-to-file infwm-script
+                                   (lambda ()
+                                     (display (string-append "#!"
+                                               bash
+                                               "/bin/sh\n"
+                                               "exec "
+                                               bindir
+                                               "/emu $* wm/wm wm/logon -u $USER\n"))))
+                                 (chmod infwm-script #o755)
+                                 ;; Install a symlink to the Limbo compiler.
+                                 (symlink (string-append root/bindir "/limbo")
+                                          (string-append bindir "/limbo"))
+                                 #t))))))
+      (home-page "https://www.inferno-os.org")
+      (synopsis
+       "Compact operating system for building cross-platform distributed systems")
+      (description
+       ;; Except for the last sentence this is taken verbatim from the
+       ;; intro(1) man page (man/1/0intro in the source tree).
+       "Inferno is a virtualised operating system that can run natively across
+a wide range of processor architectures or hosted on a wide range of
+operating systems.  The principal components of the system are:
+@itemize
+@item The Inferno kernel which can run both native and hosted on a
+range of platforms and which presents the same interface to programs
+in both cases.
+@item The Dis virtual machine.
+@item Styx - the tiny broad-spectrum file service protocol.
+@item Limbo - a new simple, modular, concurrent programming language.
+@item Tk and Prefab - graphical user interface (GUI) primitives
+without a lot of goo.
+@item The portable cross-development suites that allow any native
+Inferno platform to be cross-compiled on any hosted system.
+@end itemize
+This package provides hosted Inferno.
+")
+      (supported-systems '("i686-linux" "x86_64-linux" "armhf-linux"
+                           "aarch64-linux"))
+      (license (list license:expat ;MIT license
+                     license:freetype
+                     ;; According to NOTICE the combined work is effectively
+                     ;; GPLv2+.
+                     license:gpl2+
+                     license:lgpl2.0+)))))
diff --git a/gnu/packages/patches/inferno-fix-crash.patch b/gnu/packages/patches/inferno-fix-crash.patch
new file mode 100644
index 0000000000..acf7b718b8
--- /dev/null
+++ b/gnu/packages/patches/inferno-fix-crash.patch
@@ -0,0 +1,14 @@
+diff --git a/emu/Linux/os.c b/emu/Linux/os.c
+index 08b039d6..0d8a0cf3 100644
+--- a/emu/Linux/os.c
++++ b/emu/Linux/os.c
+@@ -18,6 +18,9 @@
+ 
+ #include	<raise.h>
+ 
++/* For dynamic linking init/fini code that needs malloc */
++void (*coherence)(void) = nofence;
++
+ /* glibc 2.3.3-NTPL messes up getpid() by trying to cache the result, so we'll do it ourselves */
+ #include	<sys/syscall.h>
+ #define	getpid()	syscall(SYS_getpid)
-- 
2.46.0





Acknowledgement sent to Homo <gay@HIDDEN>:
New bug report received and forwarded. Copy sent to guix-patches@HIDDEN. Full text available.
Report forwarded to guix-patches@HIDDEN:
bug#74734; Package guix-patches. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Sun, 12 Jan 2025 05:45:02 UTC

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