[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
03/05: gnu: commencement: Simplify Gash and Gash-Utils.
From: |
guix-commits |
Subject: |
03/05: gnu: commencement: Simplify Gash and Gash-Utils. |
Date: |
Sat, 8 Feb 2020 12:10:52 -0500 (EST) |
samplet pushed a commit to branch wip-bootstrap
in repository guix.
commit 54e52f5eedf3fd632dbd77feae1be018b4b20466
Author: Timothy Sample <address@hidden>
AuthorDate: Mon Feb 3 10:51:07 2020 -0500
gnu: commencement: Simplify Gash and Gash-Utils.
This change does three things. First Gash-Utils is updated to
0.1.0. Then, the bootstrap Gash and Gash-Utils packages are
arranged to be built without using 'guild'. Finally, instead of
using a binary 'tar' via 'bootstrap-executable' to extract Gash and
Gash-Utils, a self-extracting Scheme implementation of 'tar' and
'gzip' is used instead.
These three changes need to happen in concert to avoid breaking the
bootstrap process.
* gnu/packages/shells.scm (gash-utils): Update to 0.1.0; remove
'autoconf' and 'automake' from 'native-inputs'; delete 'arguments';
update the home-page, synopsis, and description.
* gnu/packages/commencement.scm (bootar): New variable.
(gash-boot): Replace 'tar', and 'xz' with 'bootar'; remove 'bash'
and 'guile-source'; do not use 'guile-build-system' but rather
'gnu-build-system' with some modified phases; disable tests.
(gash-utils-boot): Likewise.
(%boot-gash-inputs): Add 'bootar'; replace '%bootstrap-guile+guild' with
'%bootstrap-guile'.
(mes-boot): In the configure phase, do not reference 'GUILE_LOAD_PATH'
as it is no longer set.
---
gnu/packages/commencement.scm | 378 +++++++++++++++++-------------------------
gnu/packages/shells.scm | 32 ++--
2 files changed, 161 insertions(+), 249 deletions(-)
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index f19c2f6..80f13b2 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -7,6 +7,7 @@
;;; Copyright © 2018 Tobias Geerinckx-Rice <address@hidden>
;;; Copyright © 2018, 2019 Jan (janneke) Nieuwenhuizen <address@hidden>
;;; Copyright © 2019 Marius Bakke <address@hidden>
+;;; Copyright © 2020 Timothy Sample <address@hidden>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -51,8 +52,8 @@
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix build-system gnu)
- #:use-module (guix build-system guile)
#:use-module (guix build-system trivial)
+ #:use-module ((guix licenses) #:prefix license:)
#:use-module (guix memoization)
#:use-module (guix utils)
#:use-module (srfi srfi-1)
@@ -140,252 +141,170 @@
(variable "GUILE_LOAD_COMPILED_PATH")
(files '("lib/guile/2.0/site-ccache")))))))
+(define bootar
+ (package
+ (name "bootar")
+ (version "1")
+ (source (origin
+ (method url-fetch)
+ (uri "https://files.ngyro.com/bootar/bootar-1.ses")
+ (sha256
+ (base32
+ "011p0nky2qp0vmyhvdx220qywxxp7a0m6pvy0lzzg4qxbpyqpf0r"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:implicit-inputs? #f
+ #:tests? #f
+ #:guile ,%bootstrap-guile
+ #:imported-modules ((guix build gnu-bootstrap)
+ ,@%gnu-build-system-modules)
+ #:phases
+ (begin
+ (use-modules (guix build gnu-bootstrap))
+ (modify-phases %standard-phases
+ (replace 'unpack
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((source (assoc-ref inputs "source"))
+ (guile-dir (assoc-ref inputs "guile"))
+ (guile (string-append guile-dir "/bin/guile")))
+ (invoke guile "--no-auto-compile" source)
+ (chdir "bootar")
+ #t)))
+ (replace 'configure (bootstrap-configure ,version "." "scripts"))
+ (replace 'build (bootstrap-build "."))
+ (replace 'install (bootstrap-install "." "scripts"))))))
+ (inputs `(("guile" ,%bootstrap-guile)))
+ (home-page "https://git.ngyro.com/bootar")
+ (synopsis "Tar decompression and extraction in Guile Scheme")
+ (description "Bootar is a simple Tar extractor written in Guile
+Scheme. It supports running 'tar xvf' on uncompressed tarballs or
+tarballs that are compressed with BZip2, GZip, or XZ. It also provides
+standalone scripts for 'bzip2', 'gzip', and 'xz' that each support
+decompression to standard output.
+
+What makes this special is that Bootar is distributed as a
+self-extracting Scheme (SES) program. That is, a little script that
+outputs the source code of Bootar. This makes it possible to go from
+pure Scheme to Tar and decompression in one easy step.")
+ (license license:gpl3+)))
+
(define gash-boot
(package
(inherit gash)
(name "gash-boot")
- (version "0.2.0")
- (source (bootstrap-origin
- (origin (inherit (package-source gash))
- (modules '((guix build utils)
- (srfi srfi-26)))
- (snippet
- '(begin
- ;; Remove Guix'y files that we cannot compile.
- (delete-file "guix.scm")
- (delete-file-recursively "tests")
- #t)))))
- (build-system guile-build-system)
- (native-inputs `(("bash" ,(bootstrap-executable "bash" (%current-system)))
- ("tar" ,(bootstrap-executable "tar" (%current-system)))
- ("xz" ,(bootstrap-executable "xz" (%current-system)))
- ("guile-source" ,(bootstrap-origin
- (package-source guile-2.0)))))
- (inputs `(("guile" ,%bootstrap-guile+guild)))
+ (source (origin
+ (inherit (package-source gash))
+ (modules '())))
(arguments
`(#:implicit-inputs? #f
- #:guile ,%bootstrap-guile+guild
+ #:tests? #f
+ #:guile ,%bootstrap-guile
+ #:imported-modules ((guix build gnu-bootstrap)
+ ,@%gnu-build-system-modules)
#:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'unpack-guile-source
- (lambda _
- (let ((guile-source (assoc-ref %build-inputs "guile-source"))
- (bin (string-append (getcwd) "/zee-bin")))
- (mkdir-p bin)
- (with-directory-excursion bin
- (invoke "tar" "--strip-components=2"
-
- "-xvf" guile-source
- (string-append "guile-"
- ,(package-version guile-2.0)
- "/meta/guild.in"))
- (copy-file "guild.in" "guild")
- (chmod "guild" #o555))
- #t)))
- (add-before 'unpack 'set-path
- (lambda _
- (let ((bash (assoc-ref %build-inputs "bash"))
- (tar (assoc-ref %build-inputs "tar"))
- (xz (assoc-ref %build-inputs "xz"))
- (bin (string-append (getcwd) "/zee-bin")))
- (mkdir-p bin)
- (setenv "PATH" (string-append bin ":" (getenv "PATH")))
- (copy-file bash (string-append bin "/bash"))
- (copy-file bash (string-append bin "/sh"))
- (copy-file tar (string-append bin "/tar"))
- (copy-file xz (string-append bin "/xz"))
- #t)))
- (add-after 'build 'build-scripts
- (lambda _
- (let* ((guile (assoc-ref %build-inputs "guile"))
- (guile (string-append guile "/bin/guile"))
- (out (assoc-ref %outputs "out"))
- (effective "2.0")
- (moddir (string-append out "/share/guile/site/" effective
"/"))
- (godir (string-append out "/lib/guile/" effective
"/site-ccache/")))
- (copy-file "scripts/gash.in" "scripts/gash")
- (chmod "scripts/gash" #o555)
- (substitute* "scripts/gash"
- (("@GUILE@") guile)
- (("@MODDIR@") moddir)
- (("@GODIR") godir))
- #t)))
- (add-after 'install 'install-scripts
- (lambda _
- (let* ((out (assoc-ref %outputs "out"))
- (bin (string-append out "/bin")))
- (install-file "scripts/gash" bin)
- (copy-file "scripts/gash" "scripts/sh")
- (install-file "scripts/sh" bin)
- (copy-file "scripts/gash" "scripts/bash")
- (install-file "scripts/bash" bin)
- #t))))))))
+ (begin
+ (use-modules (guix build gnu-bootstrap))
+ (modify-phases %standard-phases
+ (replace 'configure
+ (bootstrap-configure ,(version) "gash" "scripts"))
+ (replace 'build (bootstrap-build "gash"))
+ (replace 'install (bootstrap-install "gash" "scripts"))
+ (add-after 'install 'install-symlinks
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (symlink (string-append out "/bin/gash")
+ (string-append out "/bin/sh"))
+ (symlink (string-append out "/bin/gash")
+ (string-append out "/bin/bash"))
+ #t)))))))
+ (inputs `(("guile" ,%bootstrap-guile)))
+ (native-inputs `(("bootar" ,bootar)))))
(define gash-utils-boot
(package
(inherit gash-utils)
(name "gash-utils-boot")
- (version "0.0.214-fc1b")
- (source (bootstrap-origin
- (origin
- (method url-fetch)
- (uri (string-append "http://lilypond.org/janneke/"
- "/gash-core-utils-" version ".tar.gz"))
- (modules '((guix build utils)))
- (snippet
- '(begin
- ;; The Guile build system compiles *.scm; avoid
- ;; compiling included lalr.
- (delete-file "guix.scm")
- (delete-file-recursively "tests")
- (substitute* "system/base/lalr.scm"
- (("system/base/lalr.upstream.scm") "lalr.upstream.scm"))
- #t))
- (sha256
- (base32
- "090d8m0b165jf9381nhqpljc5zk22jd6bw03xnyf0na5snk9xp6v")))))
- (build-system guile-build-system)
- (native-inputs `(("bash" ,(bootstrap-executable "bash" (%current-system)))
- ("tar" ,(bootstrap-executable "tar" (%current-system)))
- ("xz" ,(bootstrap-executable "xz" (%current-system)))
- ("guile-source" ,(bootstrap-origin
- (package-source guile-2.0)))
- ;; We need the 2.0.9 lalr for %bootstrap-guile
- ("lalr.upstream"
- ,(origin
- (method url-fetch)
- (uri (string-append
"http://git.savannah.gnu.org/cgit/guile.git/plain/module/system/base/lalr.upstream.scm?h=v2.0.9"))
- (file-name "lalr.upstream.scm")
- (sha256
- (base32
-
"0h7gyjj8nr2qrgzwma146s7l22scp8bbcqzdy9wqf12bgyhbw7d5"))))))
- (inputs `(("guile" ,%bootstrap-guile+guild)
- ("gash" ,gash-boot)))
(arguments
`(#:implicit-inputs? #f
- #:guile ,%bootstrap-guile+guild
- #:not-compiled-file-regexp "upstream\\.scm$"
+ #:tests? #f
+ #:guile ,%bootstrap-guile
+ #:imported-modules ((guix build gnu-bootstrap)
+ ,@%gnu-build-system-modules)
#:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'unpack-guile-source
- (lambda _
- (let ((guile-source (assoc-ref %build-inputs "guile-source"))
- (bin (string-append (getcwd) "/zee-bin")))
- (mkdir-p bin)
- (with-directory-excursion bin
- (invoke "tar" "--strip-components=2"
-
- "-xvf" guile-source
- (string-append "guile-"
- ,(package-version guile-2.0)
- "/meta/guild.in"))
- (copy-file "guild.in" "guild")
- (chmod "guild" #o555))
- #t)))
- (add-before 'unpack 'set-path
- (lambda _
- (let ((bash (assoc-ref %build-inputs "bash"))
- (tar (assoc-ref %build-inputs "tar"))
- (xz (assoc-ref %build-inputs "xz"))
- (bin (string-append (getcwd) "/zee-bin")))
- (mkdir-p bin)
- (setenv "PATH" (string-append bin ":" (getenv "PATH")))
- (copy-file bash (string-append bin "/bash"))
- (copy-file bash (string-append bin "/sh"))
- (copy-file tar (string-append bin "/tar"))
- (copy-file xz (string-append bin "/xz"))
- #t)))
- (add-before 'build 'set-env
- (lambda _
- (let ((gash (assoc-ref %build-inputs "gash")))
- (setenv "LANG" "C")
- (setenv "LC_ALL" "C")
- (setenv "GUILE_LOAD_PATH"
- (string-append (getcwd)
- ":" (getcwd) "/system/base"
- ":" gash "/share/guile/2.0"))
- (setenv "GUILE_LOAD_COMPILED_PATH"
- (string-append ".:" gash "/lib/guile/2.0/site-ccache/"))
- (format (current-error-port)
- "GUILE_LOAD_PATH=~s\n" (getenv "GUILE_LOAD_PATH"))
- #t)))
- (add-before 'build 'replace-lalr.upstream
- (lambda _
- (let ((lalr.upstream (assoc-ref %build-inputs "lalr.upstream")))
- (copy-file lalr.upstream "system/base/lalr.upstream.scm")
- #t)))
- (add-after 'build 'build-scripts
- (lambda _
- (let* ((guile (assoc-ref %build-inputs "guile"))
- (guile (string-append guile "/bin/guile"))
- (gash (string-append guile "gash"))
- (out (assoc-ref %outputs "out"))
- (effective "2.0")
- (guilemoduledir (string-append gash "/share/guile/site/"
effective "/"))
- (guileobjectdir (string-append gash "/lib/guile/"
effective "/site-ccache/"))
- (gashmoduledir (string-append out "/share/guile/site/"
effective "/"))
- (gashobjectdir (string-append out "/lib/guile/" effective
"/site-ccache/"))
- (bin (string-append out "/bin")))
- (define (wrap name)
- (copy-file "command.in" name)
- (chmod name #o555)
- (substitute* name
- (("@GUILE@") guile)
- (("@guilemoduledir@") guilemoduledir)
- (("@guileobjectdir") guileobjectdir)
- (("@gashmoduledir@") gashmoduledir)
- (("@gashobjectdir") gashobjectdir)
- (("@command@") name))
- (install-file name bin))
- (mkdir-p bin)
- (with-directory-excursion "bin"
- (for-each wrap '("awk"
- "basename"
- "cat"
- "chmod"
- "cmp"
- "compress"
- "cp"
- "cut"
- "diff"
- "dirname"
- "expr"
- "false"
- "find"
- "grep"
- "gzip"
- "head"
- "ln"
- "ls"
- "mkdir"
- "mv"
- "pwd"
- "reboot"
- "rm"
- "rmdir"
- "sed"
- "sleep"
- "sort"
- "tar"
- "test"
- "touch"
- "tr"
- "true"
- "uname"
- "uniq"
- "wc"
- "which")))
- (with-directory-excursion bin
- (copy-file "grep" "fgrep")
- (copy-file "grep" "egrep")
- (copy-file "test" "["))
- #t))))))))
+ (begin
+ (use-modules (guix build gnu-bootstrap))
+ (modify-phases %standard-phases
+ (add-after 'unpack 'set-load-path
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((gash (assoc-ref inputs "gash")))
+ (add-to-load-path (string-append gash "/share/guile/site/"
+ (effective-version))))
+ #t))
+ (add-before 'configure 'pre-configure
+ (lambda _
+ (format #t "Creating gash/commands/testb.scm~%")
+ (copy-file "gash/commands/test.scm"
+ "gash/commands/testb.scm")
+ (substitute* "gash/commands/testb.scm"
+ (("gash commands test") "gash commands testb")
+ (("apply test [(]cdr") "apply test/bracket (cdr"))
+ (for-each (lambda (script)
+ (let ((target (string-append "scripts/"
+ script ".in")))
+ (format #t "Creating scripts/~a~%" target)
+ (copy-file "scripts/template.in" target)
+ (substitute* target
+ (("@UTILITY@") script))))
+ '("awk" "basename" "cat" "chmod" "cmp" "command"
+ "compress" "cp" "cut" "diff" "dirname" "expr"
+ "false" "find" "grep" "head" "ln" "ls" "mkdir"
+ "mv" "printf" "pwd" "reboot" "rm" "rmdir"
+ "sed" "sleep" "sort" "tar" "test" "touch" "tr"
+ "true" "uname" "uniq" "wc" "which"))
+ (format #t "Creating scripts/[.in~%")
+ (copy-file "scripts/template.in" "scripts/[.in")
+ (substitute* "scripts/[.in"
+ (("@UTILITY@") "testb"))
+ (delete-file "scripts/template.in")
+ #t))
+ (replace 'configure
+ (bootstrap-configure ,(version) "gash" "scripts"))
+ (replace 'build (bootstrap-build "gash"))
+ (replace 'install (bootstrap-install "gash" "scripts"))
+ ;; XXX: The scripts should add Gash to their load paths and
+ ;; this phase should not exist.
+ (add-after 'install 'copy-gash
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (moddir (string-append out "/share/guile/site/"
+ (effective-version)))
+ (godir (string-append out "/lib/guile/"
+ (effective-version)
+ "/site-ccache"))
+ (gash (assoc-ref inputs "gash"))
+ (gash-moddir (string-append gash "/share/guile/site/"
+ (effective-version)))
+ (gash-godir (string-append gash "/lib/guile/"
+ (effective-version)
+ "/site-ccache")))
+ (copy-file (string-append gash-moddir "/gash/compat.scm")
+ (string-append moddir "/gash/compat.scm"))
+ (copy-recursively (string-append gash-moddir "/gash/compat")
+ (string-append moddir "/gash/compat"))
+ (copy-file (string-append gash-godir "/gash/compat.go")
+ (string-append godir "/gash/compat.go"))
+ (copy-recursively (string-append gash-godir "/gash/compat")
+ (string-append godir "/gash/compat"))
+ #t)))))))
+ (inputs `(("gash" ,gash-boot)
+ ("guile" ,%bootstrap-guile)))
+ (native-inputs `(("bootar" ,bootar)))))
(define (%boot-gash-inputs)
`(("bash" , gash-boot) ; gnu-build-system wants "bash"
("coreutils" , gash-utils-boot)
- ("guile" ,%bootstrap-guile)
- ("guile+guild" ,%bootstrap-guile+guild)))
+ ("bootar" ,bootar)
+ ("guile" ,%bootstrap-guile)))
(define %bootstrap-mes-rewired
(package
@@ -538,8 +457,7 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
(setenv "GUILE_LOAD_PATH"
(string-append
mes "/share/mes/module"
- ":" dir "/nyacc-0.99.0/module"
- ":" (getenv "GUILE_LOAD_PATH")))
+ ":" dir "/nyacc-0.99.0/module"))
(invoke "gash" "configure.sh"
(string-append "--prefix=" out)
(string-append "--host=i686-linux-gnu")))))
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index cff3cc1..1b8a0e6 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -830,32 +830,26 @@ as part of the Guix bootstrap process.")
(define-public gash-utils
(package
(name "gash-utils")
- (version "0.0.211-789c3")
+ (version "0.1.0")
(source (origin
(method url-fetch)
- (uri (string-append "http://lilypond.org/janneke/guix/20191123/"
- "/gash-core-utils-" version ".tar.gz"))
+ (uri (string-append "mirror://savannah/gash/gash-utils-"
+ version ".tar.gz"))
(sha256
(base32
- "1ycf0ivyn9q3lc9hwq8vxg6wkwpsykvh48a5lrzsmganh0ma8wrr"))))
+ "0ib2p52qmbac5n0s5bys4fiwim461ps546976l1n7pwbs0avh7fk"))))
(build-system gnu-build-system)
(native-inputs
- `(("autoconf" ,autoconf)
- ("automake" ,automake)
- ("pkg-config" ,pkg-config)))
+ `(("pkg-config" ,pkg-config)))
(inputs
`(("guile" ,guile-2.2)
("gash" ,gash)))
- (arguments
- `(#:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'patch-test
- (lambda _
- (substitute* "tests/core-utils.org"
- (("ls \\(GASH\\) UNKNOWN") "ls (GASH) 0.0.211-789c3"))
- #t)))))
- (home-page "https://gitlab.com/janneke/gash-core-utils")
- (synopsis "Bootstrappable replacement of core GNU utilities in Guile
Scheme")
- (description "Gash Core Utils provides core GNU utilities in Guile
-Scheme as bootstrappable replacement for GNU coreutils&co.")
+ (home-page "https://savannah.nongnu.org/projects/gash/")
+ (synopsis "Core POSIX utilities written in Guile Scheme")
+ (description "Gash-Utils provides Scheme implementations of many
+common POSIX utilities (there are about 40 of them, ranging in
+complexity from @command{false} to @command{awk}). The utilities are
+designed to be capable of bootstrapping their standard GNU counterparts.
+Underpinning these utilities are many Scheme interfaces for manipulating
+files and text.")
(license gpl3+)))