From: Homo via Guix-patches via <guix-patches@gnu.org>
To: 74734@debbugs.gnu.org
Cc: Homo <gay@disroot.org>
Subject: [bug#74734] [PATCH v3] gnu: Add inferno.
Date: Wed, 25 Dec 2024 23:23:30 +0200 [thread overview]
Message-ID: <20241225212804.26266-1-gay@disroot.org> (raw)
In-Reply-To: <20241208002411.20796-1-gay@disroot.org>
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@posteo.de>
+;;; Copyright © 2024 Homo <gay@disroot.org>
+;;;
+;;; 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
prev parent reply other threads:[~2024-12-25 21:29 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-08 0:24 [bug#74734] [PATCH] gnu: Add inferno Homo via Guix-patches via
2024-12-08 23:52 ` [bug#74734] [PATCH v2] " Homo via Guix-patches via
2024-12-25 21:23 ` Homo via Guix-patches via [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241225212804.26266-1-gay@disroot.org \
--to=guix-patches@gnu.org \
--cc=74734@debbugs.gnu.org \
--cc=gay@disroot.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).