;;; Copyright © 2014, 2015, 2017 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2018, 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2018, 2019, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020 Timothy Sample <samplet@ngyro.com>
+;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
;;;
;;; This file is part of GNU Guix.
;;;
#:use-module (gnu packages c)
#:use-module (gnu packages gcc)
#:use-module (gnu packages m4)
- #:use-module (gnu packages file)
#:use-module (gnu packages gawk)
#:use-module (gnu packages bison)
#:use-module (gnu packages flex)
#: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)
;;;
;;; Code:
-(define %bootstrap-guile+guild
- ;; This package combines %bootstrap-guile with guild, which is not included
- ;; in %bootstrap-guile. Guild is needed to build gash-boot and
- ;; gash-core-utils-boot because it is dependency of the Guile build system.
+(define bootar
(package
- (name "guile-bootstrap+guild")
- (version "2.0")
- (source (bootstrap-origin (package-source guile-2.0)))
- (native-inputs `(("bash" ,(bootstrap-executable "bash" (%current-system)))
- ("tar" ,(bootstrap-executable "tar" (%current-system)))
- ("xz" ,(bootstrap-executable "xz" (%current-system)))
- ("guile" ,%bootstrap-guile)))
- (build-system trivial-build-system)
+ (name "bootar")
+ (version "1a")
+ (source (origin
+ (method url-fetch)
+ (uri (list (string-append
+ "mirror://gnu/guix/mirror/bootar-" version ".ses")
+ (string-append
+ "https://files.ngyro.com/bootar/bootar-"
+ version ".ses")))
+ (sha256
+ (base32
+ "0mvp6vgx0q316fvy3z2lddlc5xgq5np3bm1fypgvj6dnayibg9np"))))
+ (build-system gnu-build-system)
(arguments
- `(#:guile ,%bootstrap-guile
- #:modules ((guix build utils))
- #:builder (begin
- (use-modules (guix build utils))
- (let ((guile-source (assoc-ref %build-inputs "source"))
- (bin (string-append (getcwd) "/bin"))
- (tar (assoc-ref %build-inputs "tar"))
- (xz (assoc-ref %build-inputs "xz")))
- (mkdir-p bin)
- (setenv "PATH" bin)
- (with-directory-excursion bin
- (copy-file tar "tar")
- (copy-file xz "xz")
- (setenv "PATH" bin))
- (let* ((out (assoc-ref %outputs "out"))
- (out-bin (string-append out "/bin"))
- (guile (assoc-ref %build-inputs "guile"))
- (bash (assoc-ref %build-inputs "bash")))
- (mkdir-p out-bin)
- (with-directory-excursion out-bin
- (symlink (string-append guile "/bin/guile")
- "guile")
- (invoke "tar" "--strip-components=2"
- "-xvf" guile-source
- (string-append "guile-"
- ,(package-version guile-2.0)
- "/meta/guild.in"))
- (copy-file "guild.in" "guild")
- (substitute* "guild"
- (("#!/bin/sh") (string-append "#! " bash))
- (("@installed_guile@") (string-append out-bin "/guile")))
- (chmod "guild" #o555)))))))
- (synopsis "Bootstrap Guile plus Guild")
- (description "Bootstrap Guile with added Guild")
- (home-page #f)
- (license (package-license guile-2.0))
- (native-search-paths
- (list (search-path-specification
- (variable "GUILE_LOAD_PATH")
- (files '("share/guile/site/2.0")))
- (search-path-specification
- (variable "GUILE_LOAD_COMPILED_PATH")
- (files '("lib/guile/2.0/site-ccache")))))))
+ `(#: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))
+ (snippet #f))) ;discard snippet for Guile 3.0 support
(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))))))))
-
-(define gash-core-utils-boot
+ (begin
+ (use-modules (guix build gnu-bootstrap))
+ (modify-phases %standard-phases
+ (replace 'configure
+ (bootstrap-configure ,(package-version gash) "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-core-utils)
- (name "gash-core-utils-boot")
- (version "0.0.213-3f6eb")
- (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
- "0601c9hqbjrjjsllr2m3zmkglkd53d97in7a5c22ikd8islddp76")))))
- (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)))
+ (inherit gash-utils)
+ (name "gash-utils-boot")
+ (source (origin
+ (inherit (package-source gash-utils))
+ (patches '())
+ (snippet #f))) ;discard snippet for Guile 3.0 support
(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 ,(package-version gash-utils)
+ "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-core-utils-boot)
- ("guile" ,%bootstrap-guile)
- ("guile+guild" ,%bootstrap-guile+guild)))
+ ("coreutils" , gash-utils-boot)
+ ("bootar" ,bootar)
+ ("guile" ,%bootstrap-guile)))
(define %bootstrap-mes-rewired
(package
(name "bootstrap-mes-rewired")
(version "0.19")
(source #f)
- (native-inputs `(("mes" ,(@ (gnu packages bootstrap) %bootstrap-mes))
+ (native-inputs `(("mes" ,%bootstrap-mes)
("gash" ,gash-boot)))
(inputs '())
(propagated-inputs '())
(build-system trivial-build-system)
(arguments
`(#:guile ,%bootstrap-guile
- #:modules ((guix build utils)
- (srfi srfi-26))
+ #:modules ((guix build utils))
+
#:builder (begin
(use-modules (guix build utils)
(srfi srfi-26))
+
(let* ((mes (assoc-ref %build-inputs "mes"))
(gash (assoc-ref %build-inputs "gash"))
(mes-bin (string-append mes "/bin"))
(package
(inherit mes)
(name "mes-boot")
- (version "0.21-33-g6d493b90d")
+ (version "0.22")
(source (origin
(method url-fetch)
- (uri (string-append "http://lilypond.org/janneke/mes/"
+ (uri (string-append "mirror://gnu/mes/"
"mes-" version ".tar.gz"))
(sha256
(base32
- "0nr74zyam5n82svjwfbcz2mycj88vvsqab12x0mxv1lm6yqxqmmj"))))
+ "0p1jsrrmcbc0zrvbvnjbb6iyxr0in71km293q8qj6gnar6bw09av"))))
(inputs '())
(propagated-inputs '())
(native-inputs
(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")))))
;; no gzip yet
(delete 'compress-documentation))))))
-(define make-mesboot0
+(define gnu-make-mesboot0
;; The initial make
(package
(inherit gnu-make)
(install-file "make" bin)))))))))
(define (%boot-tcc0-inputs)
- `(("make" ,make-mesboot0)
+ `(("make" ,gnu-make-mesboot0)
("tcc" ,tcc-boot0)
,@(%boot-gash-inputs)))
(substitute* "config.h"
(("#define GETCWD_BROKEN 1") "#undef GETCWD_BROKEN"))
(let ((config.h (open-file "config.h" "a")))
- (display (string-append "
+ (display (string-append
+ ;; XXX TODO: remove nested ,(string-append ...) and
+ ;; store file name on next rebuild cycle
+ ,(string-append "
// tcc: error: undefined symbol 'enable_hostname_completion'
#define enable_hostname_completion(on_or_off) 0
-// /gnu/store/cq0cmv35s9dhilx14zaghlc08gpc0hwr-tcc-boot0-0.9.26-6.c004e9a/lib/libc.a: error: 'sigprocmask' defined twice
+// /gnu/store/" "cq0cmv35s9dhilx14zaghlc08gpc0hwr-tcc-boot0-0.9.26-6.c004e9a/lib/libc.a: error: 'sigprocmask' defined twice
#define HAVE_POSIX_SIGNALS 1
#define endpwent(x) 0
-")
+"))
config.h)
(close config.h))
#t))
(native-inputs `(("boot-patch" ,(search-patch "glibc-boot-2.2.5.patch"))
("system-patch" ,(search-patch "glibc-bootstrap-system-2.2.5.patch"))
("headers" ,mesboot-headers)
- ,@(%boot-mesboot-core-inputs)
- ("gash" ,gash-boot)))
+ ,@(%boot-mesboot-core-inputs)))
(outputs '("out"))
(arguments
`(#:implicit-inputs? #f
(format (current-error-port)
"running ./configure ~a\n" (string-join configure-flags))
(apply invoke "./configure" configure-flags)))
- (add-after 'configure 'fixup-configure
- (lambda _
- (let* ((out (assoc-ref %outputs "out"))
- (bash (assoc-ref %build-inputs "bash"))
- (shell (string-append bash "/bin/bash"))
- (gash (assoc-ref %build-inputs "gash"))
- (gash (string-append gash "/bin/gash")))
- (substitute* "config.make"
- (("INSTALL = scripts/") "INSTALL = $(..)./scripts/"))
- (substitute* "config.make"
- (("INSTALL = scripts/") "INSTALL = $(..)./scripts/")
- (("BASH = ") (string-append
- "SHELL = " shell "
-BASH = ")))
- ;; XXX: make-syscalls.sh does not run correctly with
- ;; bash-mesboot0, producing a wrong sysd-syscalls.
-
- ;; This leads to posix/uname.c getting compiled where it
- ;; shouldn't:
-
- ;; ../sysdeps/generic/uname.c:25: config-name.h: error 02
- (substitute* "sysdeps/unix/make-syscalls.sh"
- (("#!/gnu/store.*/bin/bash") (string-append "#! " gash)))
-
- (substitute* "sysdeps/unix/Makefile"
- ((" [{] [$][(]SHELL[)]") (string-append " { " gash))))
- #t)))))))
+ (add-after 'configure 'fixup-configure
+ (lambda _
+ (let* ((out (assoc-ref %outputs "out"))
+ (bash (assoc-ref %build-inputs "bash"))
+ (shell (string-append bash "/bin/bash")))
+ (substitute* "config.make"
+ (("INSTALL = scripts/") "INSTALL = $(..)./scripts/"))
+ (substitute* "config.make"
+ (("INSTALL = scripts/") "INSTALL = $(..)./scripts/")
+ (("BASH = ") (string-append
+ "SHELL = " shell "
+ BASH = ")))
+ #t))))))))
(define gcc-mesboot0
(package
"ac_cv_func_gethostbyname=no"
"gl_cv_func_rename_dest_works=yes")))))
-(define binutils-mesboot
- (package
- (inherit binutils-mesboot0)
- (name "binutils-mesboot")
- (native-inputs `(("binutils" ,binutils-mesboot0)
- ("libc" ,glibc-mesboot0)
- ("gcc" ,gcc-mesboot0)
-
- ("bash" ,%bootstrap-coreutils&co)
- ("coreutils" ,%bootstrap-coreutils&co)
- ("diffutils" ,diffutils-mesboot)
- ("kernel-headers" ,%bootstrap-linux-libre-headers)
- ("make" ,make-mesboot0)))
- (arguments
- (substitute-keyword-arguments (package-arguments binutils-mesboot0)
- ((#:configure-flags configure-flags)
- '(list "--disable-nls"
- "--disable-shared"
- "--disable-werror"
- "--build=i686-unknown-linux-gnu"
- "--host=i686-unknown-linux-gnu"
- "--with-sysroot=/"))))))
-
-(define make-mesboot
+(define gnu-make-mesboot
(package
- (inherit make-mesboot0)
+ (inherit gnu-make)
(name "make-mesboot")
(version "3.82")
(source (origin
(sha256
(base32
"1rs2f9hmvy3q6zkl15jnlmnpgffm0bhw5ax0h5c7q604wqrip69x"))))
- (native-inputs `(("binutils" ,binutils-mesboot0)
- ("libc" ,glibc-mesboot0)
- ("gcc" ,gcc-mesboot0)
- ("make" ,make-mesboot0)
+ (native-inputs (%boot-mesboot0-inputs))
+ (supported-systems '("i686-linux" "x86_64-linux"))
+ (inputs '())
+ (propagated-inputs '())
+ (arguments
+ `(#:implicit-inputs? #f
+ #:parallel-build? #f
+ #:guile ,%bootstrap-guile
+ #:configure-flags '("LIBS=-lc -lnss_files -lnss_dns -lresolv")
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ (invoke "./make" "--version")))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin")))
+ (install-file "make" bin)
+ #t))))))))
+
+(define gawk-mesboot
+ (package
+ (inherit gawk)
+ (name "gawk-mesboot")
+ (version "3.1.8")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/gawk/gawk-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "03d5y7jabq7p2s7ys9alay9446mm7i5g2wvy8nlicardgb6b6ii1"))))
+ (native-inputs `(,@(%boot-mesboot0-inputs)
+ ("mesboot-headers" ,mesboot-headers)))
+ (supported-systems '("i686-linux" "x86_64-linux"))
+ (inputs '())
+ (propagated-inputs '())
+ (arguments
+ `(#:implicit-inputs? #f
+ #:parallel-build? #f
+ #:guile ,%bootstrap-guile
+ #:configure-flags '("ac_cv_func_connect=no")
+ #:make-flags '("gawk")
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ (invoke "./gawk" "--version")))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin")))
+ (install-file "gawk" bin)
+ (symlink "gawk" (string-append bin "/awk"))
+ #t))))))))
- ("bash" ,%bootstrap-coreutils&co)
- ("coreutils" ,%bootstrap-coreutils&co)
- ("kernel-headers" ,%bootstrap-linux-libre-headers)))
+(define sed-mesboot
+ (package
+ (inherit sed)
+ (name "sed-mesboot")
+ (version "4.0.6") ; 2003-04
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/sed/sed-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "0861ij94cqc4vaaki6r2wlapwcmhpx4ggp4r70f46mb21a8fkvf1"))))
+ (native-inputs (%boot-mesboot0-inputs))
+ (supported-systems '("i686-linux" "x86_64-linux"))
+ (inputs '())
+ (propagated-inputs '())
(arguments
- (substitute-keyword-arguments (package-arguments make-mesboot0)
- ((#:configure-flags configure-flags)
- `(let ((out (assoc-ref %outputs "out")))
- `(,(string-append "--prefix=" out))))
- ((#:phases phases)
- `(modify-phases ,phases
- (delete 'configure-fixup)
- (add-before 'configure 'setenv
- (lambda _
- (setenv "LIBS" "-lc -lnss_files -lnss_dns -lresolv")
+ `(#:implicit-inputs? #f
+ #:parallel-build? #f
+ #:guile ,%bootstrap-guile
+ #:tests? #f ; 8to7 fails
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack '/bin/sh
+ (lambda _
+ (let* ((bash (assoc-ref %build-inputs "bash"))
+ (shell (string-append bash "/bin/bash")))
+ (substitute* "testsuite/Makefile.tests"
+ (("^SHELL = /bin/sh")
+ (string-append "SHELL = " shell)))
+ #t))))))))
+
+(define bash-mesboot
+ (package
+ (inherit bash-mesboot0)
+ (version "4.4")
+ (name "bash-mesboot")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/bash/bash-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1jyz6snd63xjn6skk7za6psgidsd53k05cr3lksqybi0q6936syq"))))
+ (inputs '())
+ (propagated-inputs '())
+ (native-inputs (%boot-mesboot0-inputs))
+ (outputs '("out"))
+ (arguments
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+ #:parallel-build? #f
+ #:configure-flags
+ '("--build=i686-unknown-linux-gnu"
+ "--host=i686-unknown-linux-gnu"
+
+ "--without-bash-malloc"
+ "--disable-readline"
+ "--disable-history"
+ "--disable-help-builtin"
+ "--disable-progcomp"
+ "--disable-net-redirections"
+ "--disable-nls"
+
+ ;; Pretend 'dlopen' is missing so we don't build loadable
+ ;; modules and related code.
+ "ac_cv_func_dlopen=no")
+ #:make-flags '("bash")
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'scripted-patch
+ (lambda _
+ (substitute* "shell.c"
+ ((";;") ";"))
+ #t))
+ (add-before 'configure 'setenv
+ (lambda _
+ (setenv "AWK" "gawk")
+ (setenv "LIBS" "-lc -lnss_files -lnss_dns -lresolv")
+ (setenv "gl_cv_func_rename_dest_works" "yes")
+ #t))
+ (add-after 'configure 'configure-fixups
+ (lambda _
+ (let ((config.h (open-file "config.h" "a")))
+ (display (string-append "
+#define enable_hostname_completion(on_or_off) 0
+")
+ config.h)
+ (close config.h))
+ #t))
+ (replace 'check
+ (lambda _
+ (invoke "./bash" "--version")))
+ (replace 'install
+ (lambda _
+ (let* ((out (assoc-ref %outputs "out"))
+ (bin (string-append out "/bin")))
+ (mkdir-p bin)
+ (copy-file "bash" (string-append bin "/bash"))
+ (copy-file "bash" (string-append bin "/sh"))
#t))))))))
+(define (%boot-mesboot1-inputs)
+ `(("bash" ,bash-mesboot)
+ ("binutils" ,binutils-mesboot1)
+ ("coreutils" ,coreutils-mesboot0)
+ ("gawk" ,gawk-mesboot)
+ ("grep" ,grep-mesboot)
+ ("make" ,gnu-make-mesboot)
+ ("sed" ,sed-mesboot)
+ ("tar" ,tar-mesboot)
+ ,@(fold alist-delete (%boot-mesboot0-inputs)
+ '("bash" "binutils" "bootar" "coreutils" "gash"
+ "gawk" "grep" "guile" "make" "sed" "tar"))))
+
(define gmp-boot
(package
(inherit gmp)
(base32
"1hzci2zrrd7v3g1jk35qindq05hbl0bhjcyyisq9z209xb3fqzb1"))))))
-(define gcc-mesboot1
+(define gcc-core-mesboot1
+ ;; GCC 4.6.4 is the latest modular distribution. This package is not
+ ;; stricly needed, but very helpful for development because it builds
+ ;; relatively fast. If this configures and builds then gcc-mesboot1 also
+ ;; builds.
(package
(inherit gcc-mesboot0)
- (name "gcc-mesboot1")
- (version (package-version gcc-4.7))
- (source (bootstrap-origin
- (origin (inherit (package-source gcc-4.7))
- (patches (search-patches "gcc-boot-4.7.4.patch")))))
+ (name "gcc-core-mesboot1")
+ (version "4.6.4")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/gcc/gcc-"
+ version "/gcc-core-" version ".tar.gz"))
+ (sha256
+ (base32
+ "173kdb188qg79pcz073cj9967rs2vzanyjdjyxy9v0xb0p5sad75"))
+ ;; Patch needs XZ
+ ;; (patches (search-patches "gcc-boot-4.6.4.patch"))
+ ))
(inputs `(("gmp-source" ,(package-source gmp-boot))
("mpfr-source" ,(package-source mpfr-boot))
("mpc-source" ,(package-source mpc-boot))))
- (native-inputs `(("binutils" ,binutils-mesboot)
-
- ("libc" ,glibc-mesboot0)
- ("kernel-headers" ,%bootstrap-linux-libre-headers)
- ("gcc" ,gcc-mesboot0)
-
- ("bash" ,%bootstrap-coreutils&co)
- ("coreutils" ,%bootstrap-coreutils&co)
- ("diffutils" ,diffutils-mesboot)
- ("make" ,make-mesboot)))
+ (native-inputs `(("boot-patch" ,(search-patch "gcc-boot-4.6.4.patch"))
+ ,@(%boot-mesboot1-inputs)))
(arguments
- (substitute-keyword-arguments (package-arguments gcc-core-mesboot0)
- ((#:make-flags make-flags)
- `(let* ((libc (assoc-ref %build-inputs "libc"))
- (ldflags (string-append
- "-B" libc "/lib "
- "-Wl,-dynamic-linker "
- "-Wl," libc
- ,(glibc-dynamic-linker "i686-linux"))))
- (list (string-append "LDFLAGS=" ldflags)
- (string-append "LDFLAGS_FOR_TARGET=" ldflags))))
- ((#:phases phases)
- `(modify-phases ,phases
- ;; c&p from commencement.scm:gcc-boot0
- (add-after 'unpack 'unpack-gmp&co
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((gmp (assoc-ref %build-inputs "gmp-source"))
- (mpfr (assoc-ref %build-inputs "mpfr-source"))
- (mpc (assoc-ref %build-inputs "mpc-source")))
-
- ;; To reduce the set of pre-built bootstrap inputs, build
- ;; GMP & co. from GCC.
- (for-each (lambda (source)
- (or (invoke "tar" "xvf" source)
- (error "failed to unpack tarball"
- source)))
- (list gmp mpfr mpc))
-
- ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
- ,@(map (lambda (lib)
- ;; Drop trailing letters, as gmp-6.0.0a unpacks
- ;; into gmp-6.0.0.
- `(symlink ,(string-trim-right
- (package-full-name lib "-")
- char-set:letter)
- ,(package-name lib)))
- (list gmp-boot mpfr-boot mpc-boot))
- #t)))
- (delete 'remove-info)
- (replace 'setenv
- (lambda _
- (setenv "CONFIG_SHELL" (which "sh"))
-
- ;; Allow MPFR headers to be found.
- (setenv "C_INCLUDE_PATH"
- (string-append (getcwd) "/mpfr/src:"
- (getenv "C_INCLUDE_PATH")))
-
- ;; Set the C++ search path so that C headers can be found as
- ;; libstdc++ is being compiled.
- (setenv "CPLUS_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
- #t))
- (delete 'install2)))
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+ #:tests? #f
+ #:modules ((guix build gnu-build-system)
+ (guix build utils)
+ (srfi srfi-1))
+ #:parallel-build? #f ; for debugging
+ #:make-flags
+ (let* ((libc (assoc-ref %build-inputs "libc"))
+ (ldflags (string-append
+ "-B" libc "/lib "
+ "-Wl,-dynamic-linker "
+ "-Wl," libc
+ ,(glibc-dynamic-linker "i686-linux"))))
+ (list (string-append "LDFLAGS=" ldflags)
+ (string-append "LDFLAGS_FOR_TARGET=" ldflags)))
+ #:configure-flags
+ (let ((out (assoc-ref %outputs "out"))
+ (glibc (assoc-ref %build-inputs "libc")))
+ (list (string-append "--prefix=" out)
+ "--build=i686-unknown-linux-gnu"
+ "--host=i686-unknown-linux-gnu"
+ (string-append "--with-native-system-header-dir=" glibc "/include")
+ (string-append "--with-build-sysroot=" glibc "/include")
+ "--disable-bootstrap"
+ "--disable-decimal-float"
+ "--disable-libatomic"
+ "--disable-libcilkrts"
+ "--disable-libgomp"
+ "--disable-libitm"
+ "--disable-libmudflap"
+ "--disable-libquadmath"
+ "--disable-libsanitizer"
+ "--disable-libssp"
+ "--disable-libvtv"
+ "--disable-lto"
+ "--disable-lto-plugin"
+ "--disable-multilib"
+ "--disable-plugin"
+ "--disable-threads"
+ "--enable-languages=c"
+ "--enable-static"
+ "--disable-shared"
+ "--enable-threads=single"
+ "--disable-libstdcxx-pch"
+ "--disable-build-with-cxx"))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'apply-boot-patch
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((patch-file (assoc-ref inputs "boot-patch")))
+ (format (current-error-port) "patch file=~s\n" patch-file)
+ (system* "patch" "--force" "-p1" "-i" patch-file))
+ #t))
+ ;; c&p from commencement.scm:gcc-boot0
+ (add-after 'unpack 'unpack-gmp&co
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((gmp (assoc-ref %build-inputs "gmp-source"))
+ (mpfr (assoc-ref %build-inputs "mpfr-source"))
+ (mpc (assoc-ref %build-inputs "mpc-source")))
+
+ ;; To reduce the set of pre-built bootstrap inputs, build
+ ;; GMP & co. from GCC.
+ (for-each (lambda (source)
+ (or (invoke "tar" "xvf" source)
+ (error "failed to unpack tarball"
+ source)))
+ (list gmp mpfr mpc))
+
+ ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
+ ,@(map (lambda (lib)
+ ;; Drop trailing letters, as gmp-6.0.0a unpacks
+ ;; into gmp-6.0.0.
+ `(symlink ,(string-trim-right
+ (package-full-name lib "-")
+ char-set:letter)
+ ,(package-name lib)))
+ (list gmp-boot mpfr-boot mpc-boot))
+ #t)))
+ (add-before 'configure 'setenv
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (binutils (assoc-ref %build-inputs "binutils"))
+ (bash (assoc-ref %build-inputs "bash"))
+ (gcc (assoc-ref %build-inputs "gcc"))
+ (glibc (assoc-ref %build-inputs "libc"))
+ (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
+ (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
+ (setenv "C_INCLUDE_PATH" (string-append
+ gcc "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include"
+ ":" kernel-headers "/include"
+ ":" glibc "/include"
+ ":" (getcwd) "/mpfr/src"))
+ (setenv "LIBRARY_PATH" (string-append glibc "/lib"
+ ":" gcc "/lib"))
+ (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
+ (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
+ #t))))))))
+
+(define gcc-mesboot1
+ (package
+ (inherit gcc-core-mesboot1)
+ (name "gcc-mesboot1")
+ (version "4.6.4")
+ (native-inputs
+ `(("gcc-g++"
+ ,(origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/gcc/gcc-"
+ version "/gcc-g++-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1fqqk5zkmdg4vmqzdmip9i42q6b82i3f6yc0n86n9021cr7ms2k9"))))
+ ,@(package-native-inputs gcc-core-mesboot1)))
+ (arguments
+ (substitute-keyword-arguments (package-arguments gcc-core-mesboot1)
((#:configure-flags configure-flags)
- `(let ((out (assoc-ref %outputs "out"))
- (glibc (assoc-ref %build-inputs "libc")))
- (list (string-append "--prefix=" out)
- "--build=i686-unknown-linux-gnu"
- "--host=i686-unknown-linux-gnu"
-
- (string-append "--with-native-system-header-dir=" glibc "/include")
- (string-append "--with-build-sysroot=" glibc "/include")
-
- "--disable-bootstrap"
- "--disable-decimal-float"
- "--disable-libatomic"
- "--disable-libcilkrts"
- "--disable-libgomp"
- "--disable-libitm"
- "--disable-libmudflap"
- "--disable-libquadmath"
- "--disable-libsanitizer"
- "--disable-libssp"
- "--disable-libvtv"
- "--disable-lto"
- "--disable-lto-plugin"
- "--disable-multilib"
- "--disable-plugin"
- "--disable-threads"
- "--enable-languages=c,c++"
-
- "--enable-static"
- ;; libstdc++.so: error: depends on 'libgcc_s.so.1', which cannot be found in RUNPATH ()
- "--disable-shared"
- "--enable-threads=single"
-
- ;; No pre-compiled libstdc++ headers, to save space.
- "--disable-libstdcxx-pch"
-
- ;; for libcpp ...
- "--disable-build-with-cxx")))))))
+ `(let ((out (assoc-ref %outputs "out")))
+ `("--enable-languages=c,c++"
+ ,@(filter
+ (negate (lambda (x) (string-prefix? "--enable-languages=" x)))
+ ,configure-flags))))
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (add-before 'unpack 'unpack-g++
+ (lambda _
+ (let ((source-g++ (assoc-ref %build-inputs "gcc-g++")))
+ (invoke "tar" "xvf" source-g++))
+ #t))
+ (replace 'setenv
+ (lambda _
+ (setenv "CONFIG_SHELL" (which "sh"))
-(define gcc-mesboot1-wrapper
- ;; We need this so gcc-mesboot1 can be used to create shared binaries that
- ;; have the correct interpreter, otherwise configuring gcc-mesboot using
- ;; --enable-shared will fail.
+ ;; Allow MPFR headers to be found.
+ (setenv "C_INCLUDE_PATH"
+ (string-append (getcwd) "/mpfr/src:"
+ (getenv "C_INCLUDE_PATH")))
+
+ ;; Set the C++ search path so that C headers can be found as
+ ;; libstdc++ is being compiled.
+ (setenv "CPLUS_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
+ #t))))))))
+
+(define (%boot-mesboot2-inputs)
+ `(("gcc" ,gcc-mesboot1)
+ ,@(alist-delete "gcc" (%boot-mesboot1-inputs))))
+
+(define xz-mesboot
+ ;; Finally, we can build xz.
(package
- (inherit gcc-mesboot1)
- (name "gcc-mesboot1-wrapper")
- (source #f)
+ (inherit xz)
+ (name "xz-mesboot")
+ (version "5.0.0")
+ (source (bootstrap-origin
+ (origin
+ (method url-fetch)
+ (uri (list (string-append "http://tukaani.org/xz/xz-" version
+ ".tar.gz")
+ (string-append "http://multiprecision.org/guix/xz-"
+ version ".tar.gz")))
+ (sha256
+ (base32
+ "0kf40ggbs1vaaj5s9k4csycahzqcf65n20pa6lngqhm6j0cj3agb")))))
+ (supported-systems '("i686-linux" "x86_64-linux"))
(inputs '())
- (native-inputs `(("bash" ,%bootstrap-coreutils&co)
- ("libc" ,glibc-mesboot)
- ("gcc" ,gcc-mesboot1)))
+ (outputs '("out"))
+ (propagated-inputs '())
+ (native-inputs (%boot-mesboot2-inputs))
(arguments
`(#:implicit-inputs? #f
#:guile ,%bootstrap-guile
+ #:parallel-build? #f
+ #:configure-flags
+ `("--disable-assembler"
+ "--disable-shared"
+ "--enable-small"
+ "--disable-threads"
+ "--disable-xzdec"
+ "--disable-lzmadec"
+ "--disable-lzmainfo"
+ "--disable-lzma-links"
+ "--disable-scripts"
+ "--disable-doc"
+ "--disable-nls"
+ "--disable-symbol-versions"
+ ;; configure disqualifies BASH, CPP, GCC and GREP
+ ;; all of which seem fine for the build
+ "ac_cv_prog_cc_c99=-std=gnu9x"
+ "ac_cv_path_GREP=grep"
+ "gl_cv_posix_shell=bash"
+ "ac_cv_have_decl_optreset=no"
+ "CPPFLAGS=-D__GNUC__=1")))))
+
+(define hello-mesboot
+ ;; Check for Scheme-only bootstrap.
+ (package
+ (inherit hello)
+ (name "hello-mesboot")
+ (supported-systems '("i686-linux" "x86_64-linux"))
+ (inputs '())
+ (propagated-inputs '())
+ (native-inputs (%boot-mesboot2-inputs))
+ (arguments
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+ #:parallel-build? #f
+ ;; checking for grep that handles long lines and -e...
+ ;; configure: error: no acceptable grep could be found
+ #:configure-flags '("ac_cv_path_GREP=grep")
#:phases
(modify-phases %standard-phases
- (delete 'unpack)
- (delete 'configure)
- (delete 'install)
- (replace 'build
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (bash (assoc-ref %build-inputs "bash"))
- (libc (assoc-ref %build-inputs "libc"))
- (gcc (assoc-ref %build-inputs "gcc"))
- (bin (string-append out "/bin")))
- (mkdir-p bin)
- (for-each
- (lambda (program)
- (let ((wrapper (string-append bin "/" program)))
- (with-output-to-file wrapper
- (lambda _
- (display (string-append "#! " bash "/bin/bash
-exec " gcc "/bin/" program
-" -Wl,--dynamic-linker"
-;; also for x86_64-linux, we are still on i686-linux
-" -Wl," libc ,(glibc-dynamic-linker "i686-linux")
-" -Wl,--rpath"
-" -Wl," libc "/lib"
-" \"$@\"
-"))
- (chmod wrapper #o555)))))
- '(
- "gcc"
- "g++"
- "i686-unknown-linux-gnu-gcc"
- "i686-unknown-linux-gnu-g++"
- ))
- #t)))
(replace 'check
- (lambda* (#:key outputs #:allow-other-keys)
- (let* ((out (assoc-ref outputs "out"))
- (bin (string-append out "/bin"))
- (program (string-append bin "/gcc")))
- (invoke program "--help")))))))))
+ (lambda _
+ (invoke "./hello"))))))))
+
+(define binutils-mesboot
+ (package
+ (inherit binutils)
+ (name "binutils-mesboot")
+ (version "2.20.1a")
+ (source (bootstrap-origin
+ (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/binutils/binutils-"
+ version ".tar.bz2"))
+ (patches (search-patches "binutils-boot-2.20.1a.patch"))
+ (sha256
+ (base32
+ "0r7dr0brfpchh5ic0z9r4yxqn4ybzmlh25sbp30cacqk8nb7rlvi")))))
+ (inputs '())
+ (propagated-inputs '())
+ (native-inputs `(("xz" ,xz-mesboot)
+ ,@(%boot-mesboot2-inputs)))
+ (supported-systems '("i686-linux" "x86_64-linux"))
+ (arguments
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+ #:tests? #f ; runtest: command not found
+ #:parallel-build? #f
+ #:strip-binaries? #f ; no strip yet
+ #:configure-flags
+ `("CC=gcc"
+ "CXX=false"
+ "RANLIB=true"
+ "--disable-doc"
+ "--disable-nls"
+ "--disable-shared"
+ "--disable-werror"
+ "--build=i686-unknown-linux-gnu"
+ "--host=i686-unknown-linux-gnu"
+ "--with-sysroot=/"
+ ;; checking for grep that handles long lines and -e
+ "ac_cv_path_GREP=grep")
+ ;; FIXME: ac_cv_path_GREP=grep doesn't seem to be forwarded to
+ ;; cascading configure's?
+ #:make-flags '("ac_cv_path_GREP=grep")
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'scripted-patch
+ (lambda _
+ ;; sed-mesboot0 cannot build these
+ (copy-file "binutils/Makefile.in" "binutils/Makefile.in.orig")
+ (substitute* "binutils/Makefile.in"
+ ;; binutils/binutils uses an amazingly complex install
+ ;; command, using FOR, SED, READ, IF, ECHO, SED, SED, AWK,
+ ;; READ, and then LIBTOOL (to do something like
+ ;; `mkdir $DESTDIR$bindir; cp readline $DESTDIR$bindir ...')
+
+ ;; Some tool [debugme!] cannot handle two escaped newlines
+ ;; (bash?), and the install stops after $(am__EXEEXT_11)
+ ;; ("objcopy"), so $(am__EXEEXT_13) ("readelf") and others do
+ ;; not get installed. Remove the stray newline:
+ (("^\t@BUILD_NLMCONV@ @BUILD_SRCONV@ @BUILD_DLLTOOL@ @BUILD_WINDRES@ .*") ""))
+ (substitute* "opcodes/Makefile.in"
+ (("^SUBDIRS = [.] po") "SUBDIRS = ."))
+ (substitute* "binutils/Makefile.in"
+ (("^SUBDIRS = doc po") "SUBDIRS ="))
+ (substitute* "gas/Makefile.in"
+ (("^SUBDIRS = doc po") "SUBDIRS ="))
+ (substitute* "gprof/Makefile.in"
+ (("^SUBDIRS = po") "SUBDIRS ="))
+ (substitute* "ld/Makefile.in"
+ (("^SUBDIRS = po") "SUBDIRS ="))
+ #t)))))))
+
+(define (%boot-mesboot3-inputs)
+ `(("binutils" ,binutils-mesboot)
+ ("xz" ,xz-mesboot)
+ ,@(alist-delete "binutils" (%boot-mesboot2-inputs))))
(define glibc-headers-mesboot
(package
(sha256
(base32
"0vlz4x6cgz7h54qq4528q526qlhnsjzbsvgc4iizn76cb0bfanx7")))))
- (native-inputs `(("binutils" ,binutils-mesboot)
- ("libc" ,glibc-mesboot0)
- ("gcc" ,gcc-mesboot1)
- ("headers" ,mesboot-headers)
-
- ("bash" ,%bootstrap-coreutils&co)
- ("coreutils" ,%bootstrap-coreutils&co)
- ("diffutils" ,diffutils-mesboot)
- ("kernel-headers" ,%bootstrap-linux-libre-headers)
- ("make" ,make-mesboot)))
-
+ (native-inputs `(("headers" ,mesboot-headers)
+ ,@(%boot-mesboot3-inputs)))
(arguments
(substitute-keyword-arguments (package-arguments glibc-mesboot0)
((#:configure-flags configure-flags)
"--with-pthread"
"--without-cvs"
"--without-gd"
- "--enable-add-ons=nptl")))
+ "--enable-add-ons=nptl"
+ ;; avoid: configure: error: confusing output from nm -u
+ "libc_cv_predef_stack_protector=no")))
((#:make-flags make-flags)
- `(let ((bash (assoc-ref %build-inputs "bash")))
- (list (string-append "SHELL=" bash "/bin/sh")
- "install-bootstrap-headers=yes" "install-headers")))
+ '(list "install-bootstrap-headers=yes" "install-headers"))
((#:phases phases)
`(modify-phases ,phases
+ (delete 'apply-boot-patch)
+ (delete 'fixup-configure)
+ (delete 'set-path)
+ (replace 'unpack
+ (lambda* (#:key source #:allow-other-keys)
+ (invoke "tar" "xvf" source)
+ (chdir (string-append "glibc-" ,version))
+ #t))
(replace 'setenv
(lambda* (#:key inputs #:allow-other-keys)
(let* ((headers (assoc-ref inputs "headers"))
(setenv "CPP" (string-append gcc "/bin/gcc -E " cppflags))
(setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags))
+ (setenv "LD" "gcc")
;; avoid -fstack-protector
(setenv "libc_cv_ssp" "false")
(lambda* (#:key outputs make-flags #:allow-other-keys)
(let ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
(out (assoc-ref outputs "out")))
- (apply invoke "make" make-flags)
- (copy-recursively kernel-headers out)
- #t)))
+ (and (apply invoke "make" make-flags)
+ (copy-recursively kernel-headers out)
+ #t))))
(replace 'configure
(lambda* (#:key configure-flags #:allow-other-keys)
(format (current-error-port) "running ../configure ~a\n" (string-join configure-flags))
(apply invoke "../configure" configure-flags)))
(add-after 'configure 'remove-sunrpc
(lambda _
- (invoke "make" (string-append (getcwd) "/sysd-sorted" )
- (string-append "SHELL=" (getenv "CONFIG_SHELL")))
- (substitute* "sysd-sorted"
- ((" sunrpc") " ")
- ((" nis") " "))
- ;; 'rpcgen' needs native libc headers to be built.
- (substitute* "../Makefile"
- (("^SHELL := /bin/sh") (string-append "SHELL := " (getenv "CONFIG_SHELL"))))
- (substitute* "../Makeconfig"
- (("^SHELL := /bin/sh") (string-append "SHELL := " (getenv "CONFIG_SHELL"))))
- (substitute* "../elf/Makefile"
- (("^SHELL := /bin/sh") (string-append "SHELL := " (getenv "CONFIG_SHELL"))))))))))))
+ (let* ((out (assoc-ref %outputs "out"))
+ (bash (assoc-ref %build-inputs "bash"))
+ (shell (string-append bash "/bin/bash")))
+
+ (let ((Makefile (open-file "Makefile" "a")))
+ (display (string-append "
+
+SHELL := " shell "
+")
+ Makefile)
+ (close Makefile))
+ (substitute* "../Makefile"
+ (("^SHELL := /bin/sh") (string-append "SHELL := " shell)))
+ (substitute* "../Makeconfig"
+ (("^SHELL := /bin/sh") (string-append "SHELL := " shell)))
+ (substitute* "../elf/Makefile"
+ (("^SHELL := /bin/sh") (string-append "SHELL := " shell)))
+ (invoke "make" (string-append (getcwd) "/sysd-sorted" ))
+ (substitute* "sysd-sorted"
+ ((" sunrpc") " ")
+ ((" nis") " "))
+ #t)))))))))
(define glibc-mesboot
(package
(inherit glibc-headers-mesboot)
(name "glibc-mesboot")
- (native-inputs `(("binutils" ,binutils-mesboot)
- ("libc" ,glibc-mesboot0)
- ("headers" ,glibc-headers-mesboot)
- ("gcc" ,gcc-mesboot1)
-
- ("bash" ,%bootstrap-coreutils&co)
- ("coreutils" ,%bootstrap-coreutils&co)
- ("diffutils" ,diffutils-mesboot)
- ("kernel-headers" ,%bootstrap-linux-libre-headers)
- ("make" ,make-mesboot)))
-
+ (native-inputs `(("headers" ,glibc-headers-mesboot)
+ ,@(%boot-mesboot3-inputs)))
(arguments
- `(#:validate-runpath? #f ; fails when using --enable-shared
+ `(#:validate-runpath? #f ; fails when using --enable-shared
,@(substitute-keyword-arguments (package-arguments glibc-headers-mesboot)
((#:make-flags make-flags)
`(let ((bash (assoc-ref %build-inputs "bash")))
(let* ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
(out (assoc-ref outputs "out"))
(install-flags (cons "install" make-flags)))
- (apply invoke "make" install-flags)
- (copy-recursively kernel-headers out)
- #t))))))))))
+ (and (apply invoke "make" install-flags)
+ (copy-recursively kernel-headers out)
+ #t)))))))))))
+
+(define (%boot-mesboot4-inputs)
+ `(("libc" ,glibc-mesboot)
+ ,@(alist-delete "libc" (%boot-mesboot3-inputs))))
+
+(define gcc-mesboot1-wrapper
+ ;; We need this so gcc-mesboot1 can be used to create shared binaries that
+ ;; have the correct interpreter, otherwise configuring gcc-mesboot using
+ ;; --enable-shared will fail.
+ (package
+ (inherit gcc-mesboot1)
+ (name "gcc-mesboot1-wrapper")
+ (source #f)
+ (inputs '())
+ (native-inputs `(("bash" ,bash-mesboot)
+ ("coreutils" ,coreutils-mesboot0)
+ ("libc" ,glibc-mesboot)
+ ("gcc" ,gcc-mesboot1)))
+ (arguments
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'unpack)
+ (delete 'configure)
+ (delete 'install)
+ (replace 'build
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (bash (assoc-ref %build-inputs "bash"))
+ (libc (assoc-ref %build-inputs "libc"))
+ (gcc (assoc-ref %build-inputs "gcc"))
+ (bin (string-append out "/bin")))
+ (mkdir-p bin)
+ (for-each
+ (lambda (program)
+ (let ((wrapper (string-append bin "/" program)))
+ (with-output-to-file wrapper
+ (lambda _
+ (display (string-append "#! " bash "/bin/bash
+exec " gcc "/bin/" program
+" -Wl,--dynamic-linker"
+;; also for x86_64-linux, we are still on i686-linux
+" -Wl," libc ,(glibc-dynamic-linker "i686-linux")
+" -Wl,--rpath"
+" -Wl," libc "/lib"
+" \"$@\"
+"))
+ (chmod wrapper #o555)))))
+ '("cpp"
+ "gcc"
+ "g++"
+ "i686-unknown-linux-gnu-cpp"
+ "i686-unknown-linux-gnu-gcc"
+ "i686-unknown-linux-gnu-g++"))
+ #t)))
+ (replace 'check
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin"))
+ (program (string-append bin "/gcc")))
+ (invoke program "--help")))))))))
(define gcc-mesboot
(package
(name "gcc-mesboot")
(version (package-version gcc-4.9))
(source (bootstrap-origin (package-source gcc-4.9)))
- (native-inputs `(("binutils" ,binutils-mesboot)
-
- ("libc" ,glibc-mesboot)
- ("kernel-headers" ,%bootstrap-linux-libre-headers)
- ("gcc-wrapper" ,gcc-mesboot1-wrapper)
+ (native-inputs `(("gcc-wrapper" ,gcc-mesboot1-wrapper)
("gcc" ,gcc-mesboot1)
-
- ("bash" ,%bootstrap-coreutils&co)
- ("coreutils" ,%bootstrap-coreutils&co)
- ("diffutils" ,diffutils-mesboot)
- ("make" ,make-mesboot)))
+ ("headers" ,glibc-headers-mesboot)
+ ,@(%boot-mesboot4-inputs)))
(arguments
`(#:validate-runpath? #f
,@(substitute-keyword-arguments (package-arguments gcc-mesboot1)
"--disable-libstdcxx-pch"
;; for libcpp ...
- "--disable-build-with-cxx"))))))))
+ "--disable-build-with-cxx")))
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (delete 'apply-boot-patch)
+ (delete 'unpack-g++) ; sadly, gcc-4.9.4 does not provide
+ ; modular core/language downloads
+ (replace 'setenv
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (binutils (assoc-ref %build-inputs "binutils"))
+ (bash (assoc-ref %build-inputs "bash"))
+ (gcc (assoc-ref %build-inputs "gcc"))
+ (glibc (assoc-ref %build-inputs "libc"))
+ (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
+ (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
+ (setenv "C_INCLUDE_PATH" (string-append
+ gcc "/lib/gcc-lib/i686-unknown-linux-gnu/4.6.4/include"
+ ":" kernel-headers "/include"
+ ":" glibc "/include"
+ ":" (getcwd) "/mpfr/src"))
+ (setenv "CPLUS_INCLUDE_PATH" (string-append
+ gcc "/lib/gcc-lib/i686-unknown-linux-gnu/4.6.4/include"
+ ":" kernel-headers "/include"
+ ":" glibc "/include"
+ ":" (getcwd) "/mpfr/src"))
+ (setenv "LIBRARY_PATH" (string-append glibc "/lib"
+ ":" gcc "/lib"))
+ (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
+ (format (current-error-port) "CPLUS_INCLUDE_PATH=~a\n" (getenv "CPLUS_INCLUDE_PATH"))
+ (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
+ #t))))))))))
(define gcc-mesboot-wrapper
;; We need this so gcc-mesboot can be used to create shared binaries that
(version (package-version gcc-mesboot))
(source #f)
(inputs '())
- (native-inputs `(("bash" ,%bootstrap-coreutils&co)
+ (native-inputs `(("bash" ,bash-mesboot)
+ ("coreutils" ,coreutils-mesboot0)
("libc" ,glibc-mesboot)
("gcc" ,gcc-mesboot)))))
-(define m4-mesboot
+(define (%boot-mesboot5-inputs)
+ `(("gcc-wrapper" ,gcc-mesboot-wrapper)
+ ("gcc" ,gcc-mesboot)
+ ,@(fold alist-delete (%boot-mesboot4-inputs) '("gcc" "gcc-wrapper"))))
+
+(define coreutils-mesboot
(package
- (inherit m4)
- (name "m4-mesboot")
- (version "1.4")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/m4/m4-"
- version ".tar.gz"))
- (sha256
- (base32
- "1f9bxj176kf3pvs350w2dfs8jgwhminywri5pyn01b11yc4yhsjw"))))
+ (inherit coreutils)
+ (name "coreutils-mesboot")
+ (source (bootstrap-origin (package-source coreutils)))
+ (native-inputs (%boot-mesboot5-inputs))
(supported-systems '("i686-linux" "x86_64-linux"))
- (native-inputs `(("mes" ,mes-boot)
- ("tcc" ,tcc-boot)))
+ (inputs '())
+ (propagated-inputs '())
(arguments
- `(#:phases
- (modify-phases %standard-phases
- (replace 'configure
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- (setenv "CONFIG_SHELL" (string-append
- (assoc-ref %build-inputs "bash")
- "/bin/sh"))
- (setenv "CC" "tcc -static")
- (setenv "CPP" "tcc -E")
- (invoke "./configure" (string-append "--prefix=" out))))))))))
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+ #:tests? #f))))
+
+(define (%boot-mesboot6-inputs)
+ `(("coreutils" ,coreutils-mesboot)
+ ,@(fold alist-delete (%boot-mesboot5-inputs)
+ '("coreutils" "kernel-headers"))))
(define (%bootstrap-inputs+toolchain)
- ;; The traditional bootstrap-inputs. For the i686-linux Reduced Binary Seed
- ;; the actual reduced set with bootstrapped toolchain.
+ ;; The traditional bootstrap-inputs. For the i686-linux, x86_64-linux
+ ;; Scheme-only bootstrap the actual reduced set with bootstrapped toolchain.
(match (%current-system)
((or "i686-linux" "x86_64-linux")
- `(("libc" ,glibc-mesboot)
- ("binutils" ,binutils-mesboot)
- ("gcc-wrapper" ,gcc-mesboot-wrapper)
- ("gcc" ,gcc-mesboot)
- ,@(fold alist-delete (%bootstrap-inputs)
- '("bootstrap-mescc-tools" "mes"))))
+ (%boot-mesboot6-inputs))
(_
(%bootstrap-inputs))))
(native-inputs '()) ; no need for 'pkg-config'
(inputs (%bootstrap-inputs+toolchain))))
+(define bzip2-boot0
+ (package
+ (inherit bzip2)
+ (name "bzip2-boot0")
+ (native-inputs `())
+ (inputs
+ `(("diffutils" ,diffutils-boot0)
+ ("make" ,gnu-make-boot0)
+ ,@(%bootstrap-inputs+toolchain)))
+ (arguments
+ `(#:guile ,%bootstrap-guile
+ #:implicit-inputs? #f
+ ,@(package-arguments bzip2)))))
+
+(define coreutils-boot0
+ (package
+ (inherit coreutils)
+ (source (bootstrap-origin (package-source coreutils)))
+ (name "coreutils-boot0")
+ (native-inputs `())
+ (inputs
+ `(("make" ,gnu-make-boot0)
+ ,@(%bootstrap-inputs+toolchain)))
+ (arguments
+ `(#:tests? #f
+ #:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+ ,@(package-arguments coreutils)))))
+
(define diffutils-boot0
(package
(inherit diffutils)
`(#:tests? #f ; the test suite needs diffutils
#:guile ,%bootstrap-guile
#:implicit-inputs? #f
- ,@(package-arguments diffutils)))))
+ ,@(match (%current-system)
+ ((or "arm-linux" "aarch64-linux")
+ (substitute-keyword-arguments (package-arguments diffutils)
+ ((#:configure-flags flags ''())
+ ;; The generated config.status has some problems due to the
+ ;; bootstrap environment. Disable dependency tracking to work
+ ;; around it.
+ `(cons "--disable-dependency-tracking" ,flags))))
+ (_ '()))))))
(define findutils-boot0
(package
;; The build system assumes we have done a mistake when time_t is 32-bit
;; on a 64-bit system. Ignore that for our bootstrap toolchain.
- ,@(if (target-64bit?)
- (substitute-keyword-arguments (package-arguments findutils)
- ((#:configure-flags flags ''())
- `(cons "TIME_T_32_BIT_OK=yes"
- ,flags)))
- (package-arguments findutils))))))
+ ,@(substitute-keyword-arguments (package-arguments findutils)
+ ((#:configure-flags flags ''())
+ `(append
+ ,(if (target-64bit?)
+ ''("TIME_T_32_BIT_OK=yes")
+ ''())
+ ,(match (%current-system)
+ ((or "arm-linux" "aarch64-linux")
+ ''("--disable-dependency-tracking"))
+ (_ ''()))
+ ,flags)))))))
+
+(define file
+ (package
+ (inherit (@ (gnu packages file) file))
+ (arguments
+ `(#:configure-flags
+ `("--disable-bzlib"
+ ,,@(match (%current-system)
+ ((or "arm-linux" "aarch64-linux")
+ '("--disable-dependency-tracking"))
+ (_ '())))))))
(define file-boot0
(package
`(("make" ,gnu-make-boot0)
,@(%bootstrap-inputs+toolchain)))
(arguments
- `(#:implicit-inputs? #f
+ `(#:tests? #f ; merge test fails
+ #:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+ #:configure-flags '("--disable-bzlib")
+ #:strip-binaries? #f
+ #:validate-runpath? #f
+ ,@(package-arguments file)))))
+
+(define gawk-boot0
+ (package
+ (inherit patch)
+ (source (bootstrap-origin (package-source gawk)))
+ (name "gawk-boot0")
+ (native-inputs '())
+ (inputs
+ `(("make" ,gnu-make-boot0)
+ ,@(%bootstrap-inputs+toolchain)))
+ (arguments
+ `(#:tests? #f
+ #:implicit-inputs? #f
#:guile ,%bootstrap-guile
#:strip-binaries? #f
#:validate-runpath? #f))))
+(define patch-boot0
+ (package
+ (inherit patch)
+ (source (bootstrap-origin (package-source patch)))
+ (name "patch-boot0")
+ (native-inputs '())
+ (inputs
+ `(("make" ,gnu-make-boot0)
+ ,@(%bootstrap-inputs+toolchain)))
+ (arguments
+ `(#:tests? #f ; merge test fails
+ #:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+ #:strip-binaries? #f
+ #:validate-runpath? #f))))
+
+(define sed-boot0
+ (package
+ (inherit sed)
+ (name "sed-boot0")
+ (source (bootstrap-origin (package-source sed)))
+ (native-inputs '())
+ (inputs
+ `(("make" ,gnu-make-boot0)
+ ,@(%bootstrap-inputs+toolchain)))
+ (arguments
+ `(#:implicit-inputs? #f
+ #:tests? #f
+ #:guile ,%bootstrap-guile
+ ,@(package-arguments sed)))))
+
+(define tar-boot0
+ (package
+ (inherit tar)
+ (name "tar-boot0")
+ (source (bootstrap-origin (package-source tar)))
+ (native-inputs '())
+ (inputs
+ `(("make" ,gnu-make-boot0)
+ ,@(%bootstrap-inputs+toolchain)))
+ (arguments
+ `(#:implicit-inputs? #f
+ #:tests? #f
+ #:guile ,%bootstrap-guile
+ ,@(package-arguments tar)))))
+
(define (%boot0-inputs)
- `(("make" ,gnu-make-boot0)
+ `(,@(match (%current-system)
+ ((or "i686-linux" "x86_64-linux")
+ `(("bzip2" ,bzip2-boot0)
+ ("coreutils" ,coreutils-boot0)
+ ("gawk" ,gawk-boot0)
+ ("patch" ,patch-boot0)
+ ("sed" ,sed-boot0)
+ ("tar" ,tar-boot0)))
+ (_ '()))
+ ("make" ,gnu-make-boot0)
("diffutils" ,diffutils-boot0)
("findutils" ,findutils-boot0)
("file" ,file-boot0)
`(#:implicit-inputs? #f
#:guile ,%bootstrap-guile))))
-(define linux-libre-headers-boot0
- (mlambda ()
- "Return Linux-Libre header files for the bootstrap environment."
- ;; Note: this is wrapped in a thunk to nicely handle circular dependencies
- ;; between (gnu packages linux) and this module. Additionally, memoize
- ;; the result to play well with further memoization and code that relies
- ;; on pointer identity; see <https://bugs.gnu.org/30155>.
- (package
- (inherit linux-libre-headers)
- (arguments
- `(#:guile ,%bootstrap-guile
- #:implicit-inputs? #f
- ,@(package-arguments linux-libre-headers)))
- (native-inputs
- `(("perl" ,perl-boot0)
+(define-syntax define/system-dependent
+ (lambda (s)
+ "Bind IDENTIFIER to EXP, where the value of EXP is known to depend on
+'%current-system'. The definition ensures that (1) EXP is \"thunked\" so that
+it sees the right value of '%current-system', and (2) that its result is
+memoized as a function of '%current-system'."
+ (syntax-case s ()
+ ((_ identifier exp)
+ (with-syntax ((memoized (datum->syntax #'identifier
+ (symbol-append
+ (syntax->datum #'identifier)
+ '/memoized))))
+ #'(begin
+ (define memoized
+ (mlambda (system) exp))
+ (define-syntax identifier
+ (identifier-syntax (memoized (%current-system))))))))))
+
+(define/system-dependent linux-libre-headers-boot0
+ ;; Note: this is wrapped in a thunk to nicely handle circular dependencies
+ ;; between (gnu packages linux) and this module. Additionally, memoize
+ ;; the result to play well with further memoization and code that relies
+ ;; on pointer identity; see <https://bugs.gnu.org/30155>.
+ (package
+ (inherit linux-libre-headers)
+ (arguments
+ `(#:guile ,%bootstrap-guile
+ #:implicit-inputs? #f
+ ,@(package-arguments linux-libre-headers)))
+ (native-inputs
+ `(("perl" ,perl-boot0)
- ;; Flex and Bison are required since version 4.16.
- ("flex" ,flex-boot0)
- ("bison" ,bison-boot0)
+ ;; Flex and Bison are required since version 4.16.
+ ("flex" ,flex-boot0)
+ ("bison" ,bison-boot0)
- ;; Rsync is required since version 5.3.
- ("rsync" ,rsync-boot0)
- ,@(%boot0-inputs))))))
+ ;; Rsync is required since version 5.3.
+ ("rsync" ,rsync-boot0)
+ ,@(%boot0-inputs)))))
(define with-boot0
(package-with-explicit-inputs %boot0-inputs
%bootstrap-guile))
(define gnumach-headers-boot0
- (with-boot0 (package-with-bootstrap-guile gnumach-headers)))
+ (with-boot0
+ (package-with-bootstrap-guile
+ (package
+ (inherit gnumach-headers)
+ (version "1.8-116-g28b53508")
+ (source (bootstrap-origin
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://lilypond.org/janneke/hurd/"
+ "gnumach-" version ".tar.gz"))
+ (sha256
+ (base32
+ "006i0zgwy81vxarpfm12vip4q6i5mgmi5mmy5ldvxp5hx9h3l0zg")))))
+ (native-inputs '())))))
(define mig-boot0
(let* ((mig (package
(assoc-ref %build-inputs "flex") "/lib/")))))))
(with-boot0 mig)))
+(define hurd-version-boot0 "0.9-229-ga1efcee8")
+(define hurd-source-boot0
+ (let ((version hurd-version-boot0))
+ (bootstrap-origin
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://lilypond.org/janneke/hurd/"
+ "hurd-v" version ".tar.gz"))
+ (sha256
+ (base32
+ "0bq2q2jisxcy0kgcm6rz0z2fddwxxm7azsama7li28a2m08kdpzy"))))))
+
(define hurd-headers-boot0
(let ((hurd-headers (package (inherit hurd-headers)
- (native-inputs `(("mig" ,mig-boot0)))
- (inputs '()))))
+ (version hurd-version-boot0)
+ (source hurd-source-boot0)
+ (native-inputs `(("mig" ,mig-boot0)))
+ (inputs '()))))
(with-boot0 (package-with-bootstrap-guile hurd-headers))))
(define hurd-minimal-boot0
(let ((hurd-minimal (package (inherit hurd-minimal)
- (native-inputs `(("mig" ,mig-boot0)))
- (inputs '()))))
+ (version hurd-version-boot0)
+ (source hurd-source-boot0)
+ (native-inputs `(("mig" ,mig-boot0)))
+ (inputs '()))))
(with-boot0 (package-with-bootstrap-guile hurd-minimal))))
-(define hurd-core-headers-boot0
- (mlambda ()
- "Return the Hurd and Mach headers as well as initial Hurd libraries for
-the bootstrap environment."
- (package (inherit (package-with-bootstrap-guile hurd-core-headers))
- (arguments `(#:guile ,%bootstrap-guile
- ,@(package-arguments hurd-core-headers)))
- (inputs
- `(("gnumach-headers" ,gnumach-headers-boot0)
- ("hurd-headers" ,hurd-headers-boot0)
- ("hurd-minimal" ,hurd-minimal-boot0)
- ,@(%boot0-inputs))))))
+(define/system-dependent hurd-core-headers-boot0
+ ;; Return the Hurd and Mach headers as well as initial Hurd libraries for
+ ;; the bootstrap environment.
+ (package (inherit (package-with-bootstrap-guile hurd-core-headers))
+ (arguments `(#:guile ,%bootstrap-guile
+ ,@(package-arguments hurd-core-headers)))
+ (inputs
+ `(("gnumach-headers" ,gnumach-headers-boot0)
+ ("hurd-headers" ,hurd-headers-boot0)
+ ("hurd-minimal" ,hurd-minimal-boot0)
+ ,@(%boot0-inputs)))))
(define* (kernel-headers-boot0 #:optional (system (%current-system)))
(match system
- ("i586-gnu" (hurd-core-headers-boot0))
- (_ (linux-libre-headers-boot0))))
+ ("i586-gnu" hurd-core-headers-boot0)
+ (_ linux-libre-headers-boot0)))
(define texinfo-boot0
;; Texinfo used to build libc's manual.
;; Python package won't interfere with this one.
((#:make-flags _ ''()) ''())
((#:phases phases)
- `(modify-phases ,phases
+ ;; Remove the 'apply-alignment-patch' phase if present to avoid
+ ;; rebuilding this package. TODO: for the next rebuild cycle,
+ ;; consider inlining all the arguments instead of inheriting to
+ ;; make it easier to patch Python without risking a full rebuild.
+ ;; Or better yet, change to 'python-on-guile'.
+ `(modify-phases ,@(list (match phases
+ (('modify-phases original-phases
+ changes ...
+ ('add-after unpack apply-alignment-patch _))
+ `(modify-phases ,original-phases ,@changes))
+ (_ phases)))
(add-before 'configure 'disable-modules
(lambda _
(substitute* "setup.py"
;; built, since it requires Linux headers.
(("'linux', ") ""))
#t))
- (delete 'set-TZDIR)))
+ (delete 'set-TZDIR)
+ ,@(if (hurd-system?)
+ `((add-before 'build 'fix-regen
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((libc (assoc-ref inputs "libc")))
+ (substitute* "Lib/plat-generic/regen"
+ (("/usr/include/") (string-append libc "/include/")))
+ #t))))
+ '())))
((#:tests? _ #f) #f))))))
-(define ld-wrapper-boot0
- (mlambda ()
- ;; We need this so binaries on Hurd will have libmachuser and libhurduser
- ;; in their RUNPATH, otherwise validate-runpath will fail.
- (make-ld-wrapper "ld-wrapper-boot0"
- #:target boot-triplet
- #:binutils binutils-boot0
- #:guile %bootstrap-guile
- #:bash (car (assoc-ref (%boot0-inputs) "bash"))
- #:guile-for-build %bootstrap-guile)))
+(define/system-dependent ld-wrapper-boot0
+ ;; The first 'ld' wrapper, defined with 'define/system-dependent' because
+ ;; its calls '%boot0-inputs', whose result depends on (%current-system)
+ ;;
+ ;; We need this so binaries on Hurd will have libmachuser and libhurduser
+ ;; in their RUNPATH, otherwise validate-runpath will fail.
+ (make-ld-wrapper "ld-wrapper-boot0"
+ #:target boot-triplet
+ #:binutils binutils-boot0
+ #:guile %bootstrap-guile
+ #:bash (car (assoc-ref (%boot0-inputs) "bash"))
+ #:guile-for-build %bootstrap-guile))
(define (%boot1-inputs)
;; 2nd stage inputs.
`(("gcc" ,gcc-boot0)
- ("ld-wrapper-cross" ,(ld-wrapper-boot0))
+ ("ld-wrapper-cross" ,ld-wrapper-boot0)
("binutils-cross" ,binutils-boot0)
,@(alist-delete "binutils" (%boot0-inputs))))
((#:configure-flags flags)
`(append (list ,(string-append "--host=" (boot-triplet))
,(string-append "--build="
- (nix-system->gnu-triplet)))
+ (nix-system->gnu-triplet))
+ ,(if (hurd-system?) "--disable-werror"
+ ""))
,flags))
((#:phases phases)
`(modify-phases ,phases
(unsetenv "CPATH")
;; Tell 'libpthread' where to find 'libihash' on Hurd systems.
- ,@(if (hurd-triplet? (%current-system))
- `((substitute* "libpthread/Makefile"
- (("LDLIBS-pthread.so =.*")
- (string-append "LDLIBS-pthread.so = "
- (assoc-ref %build-inputs "kernel-headers")
- "/lib/libihash.a\n"))))
- '())
+ ,@(if (hurd-system?)
+ '((substitute* '("sysdeps/mach/Makefile"
+ "sysdeps/mach/hurd/Makefile")
+ (("LDLIBS-pthread.so =.*")
+ (string-append "LDLIBS-pthread.so = "
+ (assoc-ref %build-inputs "kernel-headers")
+ "/lib/libihash.a\n"))))
+ '())
;; 'rpcgen' needs native libc headers to be built.
(substitute* "sunrpc/Makefile"
,@(%boot1-inputs)
;; A native MiG is needed to build Glibc on Hurd.
- ,@(if (hurd-triplet? (%current-system))
+ ,@(if (hurd-system?)
`(("mig" ,mig-boot0))
'())
("bash" ,bash)))
(inputs '())))
-(define gcc-boot0-intermediate-wrapped
- (mlambda ()
- ;; Make the cross-tools GCC-BOOT0 and BINUTILS-BOOT0 available under the
- ;; non-cross names.
- (cross-gcc-wrapper gcc-boot0 binutils-boot0
- glibc-final-with-bootstrap-bash
- (car (assoc-ref (%boot1-inputs) "bash")))))
+(define/system-dependent gcc-boot0-intermediate-wrapped
+ ;; Make the cross-tools GCC-BOOT0 and BINUTILS-BOOT0 available under the
+ ;; non-cross names.
+ (cross-gcc-wrapper gcc-boot0 binutils-boot0
+ glibc-final-with-bootstrap-bash
+ (car (assoc-ref (%boot1-inputs) "bash"))))
(define static-bash-for-glibc
;; A statically-linked Bash to be used by GLIBC-FINAL in system(3) & co.
(package
(inherit static-bash)
(source (bootstrap-origin (package-source static-bash)))
- (inputs `(("gcc" ,(gcc-boot0-intermediate-wrapped))
+ (inputs `(("gcc" ,gcc-boot0-intermediate-wrapped)
("libc" ,glibc-final-with-bootstrap-bash)
("libc:static" ,glibc-final-with-bootstrap-bash "static")
,@(fold alist-delete (%boot1-inputs)
;; if 'allowed-references' were per-output.
(arguments
`(#:allowed-references
- ,(cons* `(,gcc-boot0 "lib") (kernel-headers-boot0)
- static-bash-for-glibc
- (package-outputs glibc-final-with-bootstrap-bash))
-
+ ((,gcc-boot0 "lib")
+ ,(kernel-headers-boot0)
+ ,static-bash-for-glibc
+ ,@(if (hurd-system?)
+ `(,gnumach-headers-boot0
+ ,hurd-headers-boot0)
+ '())
+ ,@(package-outputs glibc-final-with-bootstrap-bash))
,@(package-arguments glibc-final-with-bootstrap-bash)))))
-(define gcc-boot0-wrapped
- (mlambda ()
- ;; Make the cross-tools GCC-BOOT0 and BINUTILS-BOOT0 available under the
- ;; non-cross names.
- (cross-gcc-wrapper gcc-boot0 binutils-boot0 glibc-final
- (car (assoc-ref (%boot1-inputs) "bash")))))
+(define/system-dependent gcc-boot0-wrapped
+ ;; Make the cross-tools GCC-BOOT0 and BINUTILS-BOOT0 available under the
+ ;; non-cross names.
+ (cross-gcc-wrapper gcc-boot0 binutils-boot0 glibc-final
+ (car (assoc-ref (%boot1-inputs) "bash"))))
(define (%boot2-inputs)
;; 3rd stage inputs.
`(("libc" ,glibc-final)
("libc:static" ,glibc-final "static")
- ("gcc" ,(gcc-boot0-wrapped))
+ ("gcc" ,gcc-boot0-wrapped)
,@(fold alist-delete (%boot1-inputs) '("libc" "gcc" "linux-libre-headers"))))
(define binutils-final
,@(package-arguments zlib)))
(inputs (%boot2-inputs))))
-(define ld-wrapper-boot3
- (mlambda ()
- ;; A linker wrapper that uses the bootstrap Guile.
- (make-ld-wrapper "ld-wrapper-boot3"
- #:binutils binutils-final
- #:guile %bootstrap-guile
- #:bash (car (assoc-ref (%boot2-inputs) "bash"))
- #:guile-for-build %bootstrap-guile)))
+(define/system-dependent ld-wrapper-boot3
+ ;; A linker wrapper that uses the bootstrap Guile.
+ (make-ld-wrapper "ld-wrapper-boot3"
+ #:binutils binutils-final
+ #:guile %bootstrap-guile
+ #:bash (car (assoc-ref (%boot2-inputs) "bash"))
+ #:guile-for-build %bootstrap-guile))
(define gcc-final
;; The final GCC.
(inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp-6.0)))
("mpfr-source" ,(package-source mpfr))
("mpc-source" ,(package-source mpc))
- ("ld-wrapper" ,(ld-wrapper-boot3))
+ ("ld-wrapper" ,ld-wrapper-boot3)
("binutils" ,binutils-final)
("libstdc++" ,libstdc++)
("zlib" ,zlib-final)
(define (%boot3-inputs)
;; 4th stage inputs.
`(("gcc" ,gcc-final)
- ("ld-wrapper" ,(ld-wrapper-boot3))
+ ("ld-wrapper" ,ld-wrapper-boot3)
,@(alist-delete "gcc" (%boot2-inputs))))
(define bash-final
;; This package must be public because other modules refer to it. However,
;; mark it as hidden so that 'fold-packages' ignores it.
(with-boot4 (hidden-package
- (package-with-bootstrap-guile guile-2.2/fixed))))
+ (package-with-bootstrap-guile guile-3.0/fixed))))
(define glibc-utf8-locales-final
;; Now that we have GUILE-FINAL, build the UTF-8 locales. They are needed
(define coreutils-final
;; The final Coreutils. Treat them specially because some packages, such as
;; Findutils, keep a reference to the Coreutils they were built with.
- (with-boot5 (package-with-bootstrap-guile coreutils)
+ (with-boot5 (package-with-bootstrap-guile
+ (package
+ (inherit coreutils-minimal)
+ (name "coreutils")))
;; Use the final Guile, linked against the
;; final libc with working iconv, so that
;; 'substitute*' works well when touching
'(#:modules ((guix build union))
#:builder (begin
(use-modules (ice-9 match)
+ (srfi srfi-1)
(srfi srfi-26)
(guix build union))
(let ((out (assoc-ref %outputs "out")))
-
- (match %build-inputs
- (((names . directories) ...)
- (union-build out directories)))
+ (union-build out
+ (filter-map (match-lambda
+ (("libc-debug" . _) #f)
+ (("libc-static" . _) #f)
+ ((_ . directory) directory))
+ %build-inputs))
(union-build (assoc-ref %outputs "debug")
(list (assoc-ref %build-inputs
(description
"This package provides a complete GCC tool chain for C/C++ development to
be installed in user profiles. This includes GCC, as well as libc (headers and
-binaries, plus debugging symbols in the @code{debug} output), and Binutils.")
+binaries, plus debugging symbols in the @code{debug} output), and Binutils. GCC
+is the GNU Compiler Collection.")
(home-page "https://gcc.gnu.org/")
(outputs '("out" "debug" "static"))
(define-public gcc-toolchain-9
(make-gcc-toolchain gcc-9))
+(define-public gcc-toolchain-10
+ (make-gcc-toolchain gcc-10))
+
+(define-public gcc-toolchain-aka-gcc
+ ;; It's natural for users to try "guix install gcc". This package
+ ;; automatically "redirects" them to 'gcc-toolchain'.
+ (deprecated-package "gcc" gcc-toolchain-10))
+
+
+(define-public gdc-toolchain-10
+ (package (inherit (make-gcc-toolchain gdc-10))
+ (synopsis "Complete GCC tool chain for D lang development")
+ (description "This package provides a complete GCC tool chain for
+D lang development to be installed in user profiles. This includes
+gdc, as well as libc (headers and binaries, plus debugging symbols
+in the @code{debug} output), and binutils.")))
+
;; Provide the Fortran toolchain package only for the version of gfortran that
;; is used by Guix internally to build Fortran libraries, because combining
;; code compiled with different versions can cause problems.