summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2019-10-12 11:35:43 +0200
committerLudovic Courtès <ludo@gnu.org>2019-10-12 12:25:08 +0200
commit99b73d0f0ce9fdb397fdf211839d73f98e3ddec2 (patch)
treec30983fb7b1c957d08d1e2d986d1f74c2236a3f3
parent9a45a24f7f3172750d8ea8a877527f219b4ed94b (diff)
gnu: commencement: Reduce the graph of package objects.
The graph returned by: guix graph -e '(@@ (gnu packages commencement) guile-final)' now contains 94 nodes (664 edges) instead of 394 (2674 edges). Likewise, this command: GUIX_PROFILING=add-data-to-store-cache guix build coreutils -nd shows that the number of lookups to the 'add-data-to-store' caches goes from 8935 to 5303. Overall, "guix build libreoffice -nd" goes from 3.17s to 2.60s (-18%). * gnu/packages/commencement.scm (diffutils-boot0): Remove call to 'package-with-bootstrap-guile' and 'package-with-explicit-inputs', and adjust accordingly. (findutils-boot0, file-boot0, binutils-boot0, libstdc++-boot0) (gcc-boot0, perl-boot0, m4-boot0, bison-boot0, flex-boot0) (linux-libre-headers-boot0, texinfo-boot0, python-boot0) (ld-wrapper-boot0, glibc-final-with-bootstrap-bash) (static-bash-for-glibc, gettext-boot0, glibc-final, binutils-final) (libstdc++, zlib-final, bash-final): Likewise. (expat-sans-tests)[inputs]: New field. [arguments]: Add #:implicit-inputs? and #:guile. (m4-boot0*): New variable.
-rw-r--r--gnu/packages/commencement.scm1020
1 files changed, 519 insertions, 501 deletions
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index f5f610c67c..5bd139f30d 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -1425,43 +1425,46 @@ exec " gcc "/bin/" program
(inputs (%bootstrap-inputs+toolchain))))
(define diffutils-boot0
- (package-with-bootstrap-guile
- (let ((p (package-with-explicit-inputs diffutils
- (lambda _
- `(("make" ,gnu-make-boot0)
- ,@(%bootstrap-inputs+toolchain)))
- #:guile %bootstrap-guile)))
- (package (inherit p)
- (name "diffutils-boot0")
- (native-inputs `())
- (arguments `(#:tests? #f ; the test suite needs diffutils
- ,@(package-arguments p)))))))
+ (package
+ (inherit diffutils)
+ (name "diffutils-boot0")
+ (native-inputs `())
+ (inputs
+ `(("make" ,gnu-make-boot0)
+ ,@(%bootstrap-inputs+toolchain)))
+ (arguments
+ `(#:tests? #f ; the test suite needs diffutils
+ #:guile ,%bootstrap-guile
+ #:implicit-inputs? #f
+ ,@(package-arguments diffutils)))))
(define findutils-boot0
- (package-with-bootstrap-guile
- (package-with-explicit-inputs (package
- (inherit findutils)
- (name "findutils-boot0"))
- (lambda _
- `(("make" ,gnu-make-boot0)
- ("diffutils" ,diffutils-boot0) ; for tests
- ,@(%bootstrap-inputs+toolchain)))
- (current-source-location)
- #:guile %bootstrap-guile)))
+ (package
+ (inherit findutils)
+ (name "findutils-boot0")
+ (source (bootstrap-origin (package-source findutils)))
+ (inputs
+ `(("make" ,gnu-make-boot0)
+ ("diffutils" ,diffutils-boot0) ; for tests
+ ,@(%bootstrap-inputs+toolchain)))
+ (arguments
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+ ,@(package-arguments findutils)))))
(define file-boot0
- (package-with-bootstrap-guile
- (package-with-explicit-inputs (package
- (inherit file)
- (name "file-boot0")
- (arguments
- '(#:strip-binaries? #f
- #:validate-runpath? #f)))
- (lambda _
- `(("make" ,gnu-make-boot0)
- ,@(%bootstrap-inputs+toolchain)))
- (current-source-location)
- #:guile %bootstrap-guile)))
+ (package
+ (inherit file)
+ (source (bootstrap-origin (package-source file)))
+ (name "file-boot0")
+ (inputs
+ `(("make" ,gnu-make-boot0)
+ ,@(%bootstrap-inputs+toolchain)))
+ (arguments
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+ #:strip-binaries? #f
+ #:validate-runpath? #f))))
(define (%boot0-inputs)
`(("make" ,gnu-make-boot0)
@@ -1482,47 +1485,49 @@ exec " gcc "/bin/" program
;; reference to the target libc.
(define binutils-boot0
- (package-with-bootstrap-guile
- (package (inherit binutils)
- (name "binutils-cross-boot0")
- (arguments
- `(#:guile ,%bootstrap-guile
- #:implicit-inputs? #f
-
- #:modules ((guix build gnu-build-system)
- (guix build utils)
- (ice-9 ftw)) ; for 'scandir'
- #:phases (modify-phases %standard-phases
- (add-after 'install 'add-symlinks
- (lambda* (#:key outputs #:allow-other-keys)
- ;; The cross-gcc invokes 'as', 'ld', etc, without the
- ;; triplet prefix, so add symlinks.
- (let ((out (assoc-ref outputs "out"))
- (triplet-prefix (string-append ,(boot-triplet) "-")))
- (define (has-triplet-prefix? name)
- (string-prefix? triplet-prefix name))
- (define (remove-triplet-prefix name)
- (substring name (string-length triplet-prefix)))
- (with-directory-excursion (string-append out "/bin")
- (for-each (lambda (name)
- (symlink name (remove-triplet-prefix name)))
- (scandir "." has-triplet-prefix?)))
- #t))))
-
- ,@(substitute-keyword-arguments (package-arguments binutils)
- ((#:configure-flags cf)
- `(cons ,(string-append "--target=" (boot-triplet))
- ,cf)))))
- (inputs (%boot0-inputs)))))
+ (package
+ (inherit binutils)
+ (source (bootstrap-origin (package-source binutils)))
+ (name "binutils-cross-boot0")
+ (arguments
+ `(#:guile ,%bootstrap-guile
+ #:implicit-inputs? #f
+
+ #:modules ((guix build gnu-build-system)
+ (guix build utils)
+ (ice-9 ftw)) ; for 'scandir'
+ #:phases (modify-phases %standard-phases
+ (add-after 'install 'add-symlinks
+ (lambda* (#:key outputs #:allow-other-keys)
+ ;; The cross-gcc invokes 'as', 'ld', etc, without the
+ ;; triplet prefix, so add symlinks.
+ (let ((out (assoc-ref outputs "out"))
+ (triplet-prefix (string-append ,(boot-triplet) "-")))
+ (define (has-triplet-prefix? name)
+ (string-prefix? triplet-prefix name))
+ (define (remove-triplet-prefix name)
+ (substring name (string-length triplet-prefix)))
+ (with-directory-excursion (string-append out "/bin")
+ (for-each (lambda (name)
+ (symlink name (remove-triplet-prefix name)))
+ (scandir "." has-triplet-prefix?)))
+ #t))))
+
+ ,@(substitute-keyword-arguments (package-arguments binutils)
+ ((#:configure-flags cf)
+ `(cons ,(string-append "--target=" (boot-triplet))
+ ,cf)))))
+ (inputs (%boot0-inputs))))
(define libstdc++-boot0
;; GCC's libcc1 is always built as a shared library (the top-level
;; 'Makefile.def' forcefully adds --enable-shared) and thus needs to refer
;; to libstdc++.so. We cannot build libstdc++-5.3 because it relies on
;; C++14 features missing in some of our bootstrap compilers.
- (let ((lib (package-with-bootstrap-guile (make-libstdc++ gcc-4.9))))
+ (let ((lib (make-libstdc++ gcc-4.9)))
(package
(inherit lib)
+ (source (bootstrap-origin (package-source lib)))
(name "libstdc++-boot0")
(arguments
`(#:guile ,%bootstrap-guile
@@ -1548,86 +1553,87 @@ exec " gcc "/bin/" program
(native-inputs '()))))
(define gcc-boot0
- (package-with-bootstrap-guile
- (package (inherit gcc)
- (name "gcc-cross-boot0")
- (arguments
- `(#:guile ,%bootstrap-guile
- #:implicit-inputs? #f
- #:modules ((guix build gnu-build-system)
- (guix build utils)
- (ice-9 regex)
- (srfi srfi-1)
- (srfi srfi-26))
- ,@(substitute-keyword-arguments (package-arguments gcc)
- ((#:configure-flags flags)
- `(append (list ,(string-append "--target=" (boot-triplet))
-
- ;; No libc yet.
- "--without-headers"
-
- ;; Disable features not needed at this stage.
- "--disable-shared"
- "--enable-languages=c,c++"
-
- ;; libstdc++ cannot be built at this stage
- ;; ("Link tests are not allowed after
- ;; GCC_NO_EXECUTABLES.").
- "--disable-libstdc++-v3"
-
- "--disable-threads"
- "--disable-libmudflap"
- "--disable-libatomic"
- "--disable-libsanitizer"
- "--disable-libitm"
- "--disable-libgomp"
- "--disable-libmpx"
- "--disable-libcilkrts"
- "--disable-libvtv"
- "--disable-libssp"
- "--disable-libquadmath"
- "--disable-decimal-float")
- (remove (cut string-match
- "--(with-system-zlib|enable-languages.*)" <>)
- ,flags)))
- ((#:make-flags flags)
- `(let* ((libc (assoc-ref %build-inputs "libc"))
- (libc-native (or (assoc-ref %build-inputs "libc-native")
- libc)))
- `(,(string-append "LDFLAGS="
- "-Wl,-rpath=" libc-native "/lib "
- "-Wl,-dynamic-linker "
- "-Wl," libc-native ,(glibc-dynamic-linker
- (match (%current-system)
- ("x86_64-linux" "i686-linux")
- (_ (%current-system))))))))
- ((#:phases phases)
- `(modify-phases ,phases
- (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)
- (invoke "tar" "xvf" 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-6.0 mpfr mpc))
- #t)))
- ,(match (%current-system)
- ((or "i686-linux" "x86_64-linux")
- '(add-before 'configure 'fix-libcc1
+ (package
+ (inherit gcc)
+ (name "gcc-cross-boot0")
+ (source (bootstrap-origin (package-source gcc)))
+ (arguments
+ `(#:guile ,%bootstrap-guile
+ #:implicit-inputs? #f
+ #:modules ((guix build gnu-build-system)
+ (guix build utils)
+ (ice-9 regex)
+ (srfi srfi-1)
+ (srfi srfi-26))
+ ,@(substitute-keyword-arguments (package-arguments gcc)
+ ((#:configure-flags flags)
+ `(append (list ,(string-append "--target=" (boot-triplet))
+
+ ;; No libc yet.
+ "--without-headers"
+
+ ;; Disable features not needed at this stage.
+ "--disable-shared"
+ "--enable-languages=c,c++"
+
+ ;; libstdc++ cannot be built at this stage
+ ;; ("Link tests are not allowed after
+ ;; GCC_NO_EXECUTABLES.").
+ "--disable-libstdc++-v3"
+
+ "--disable-threads"
+ "--disable-libmudflap"
+ "--disable-libatomic"
+ "--disable-libsanitizer"
+ "--disable-libitm"
+ "--disable-libgomp"
+ "--disable-libmpx"
+ "--disable-libcilkrts"
+ "--disable-libvtv"
+ "--disable-libssp"
+ "--disable-libquadmath"
+ "--disable-decimal-float")
+ (remove (cut string-match
+ "--(with-system-zlib|enable-languages.*)" <>)
+ ,flags)))
+ ((#:make-flags flags)
+ `(let* ((libc (assoc-ref %build-inputs "libc"))
+ (libc-native (or (assoc-ref %build-inputs "libc-native")
+ libc)))
+ `(,(string-append "LDFLAGS="
+ "-Wl,-rpath=" libc-native "/lib "
+ "-Wl,-dynamic-linker "
+ "-Wl," libc-native ,(glibc-dynamic-linker
+ (match (%current-system)
+ ("x86_64-linux" "i686-linux")
+ (_ (%current-system))))))))
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (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)
+ (invoke "tar" "xvf" 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-6.0 mpfr mpc))
+ #t)))
+ ,(match (%current-system)
+ ((or "i686-linux" "x86_64-linux")
+ '(add-before 'configure 'fix-libcc1
(lambda* (#:key inputs #:allow-other-keys)
;; libcc1.so NEEDs libgcc_s.so, so provide one here
;; to placate the 'validate-runpath' phase.
@@ -1639,127 +1645,137 @@ exec " gcc "/bin/" program
(substitute* "libcc1/configure"
(("g\\+\\+ -v") "true"))
#t)))
- (_ '(add-before 'configure 'return-true
- (lambda _ #t))))
- (add-after 'install 'symlink-libgcc_eh
- (lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "lib")))
- ;; Glibc wants to link against libgcc_eh, so provide
- ;; it.
- (with-directory-excursion
- (string-append out "/lib/gcc/"
- ,(boot-triplet)
- "/" ,(package-version gcc))
- (symlink "libgcc.a" "libgcc_eh.a"))
- #t))))))))
+ (_ '(add-before 'configure 'return-true
+ (lambda _ #t))))
+ (add-after 'install 'symlink-libgcc_eh
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "lib")))
+ ;; Glibc wants to link against libgcc_eh, so provide
+ ;; it.
+ (with-directory-excursion
+ (string-append out "/lib/gcc/"
+ ,(boot-triplet)
+ "/" ,(package-version gcc))
+ (symlink "libgcc.a" "libgcc_eh.a"))
+ #t))))))))
- (inputs `(("gmp-source" ,(package-source gmp-6.0))
- ("mpfr-source" ,(package-source mpfr))
- ("mpc-source" ,(package-source mpc))
- ("binutils-cross" ,binutils-boot0)
+ (inputs `(("gmp-source" ,(bootstrap-origin (package-source gmp-6.0)))
+ ("mpfr-source" ,(bootstrap-origin (package-source mpfr)))
+ ("mpc-source" ,(bootstrap-origin (package-source mpc)))
+ ("binutils-cross" ,binutils-boot0)
- ;; The libstdc++ that libcc1 links against.
- ("libstdc++" ,libstdc++-boot0)
+ ;; The libstdc++ that libcc1 links against.
+ ("libstdc++" ,libstdc++-boot0)
- ;; Call it differently so that the builder can check whether
- ;; the "libc" input is #f.
- ("libc-native" ,@(assoc-ref (%boot0-inputs) "libc"))
- ,@(alist-delete "libc" (%boot0-inputs))))
+ ;; Call it differently so that the builder can check whether
+ ;; the "libc" input is #f.
+ ("libc-native" ,@(assoc-ref (%boot0-inputs) "libc"))
+ ,@(alist-delete "libc" (%boot0-inputs))))
- ;; No need for the native-inputs to build the documentation at this stage.
- (native-inputs `()))))
+ ;; No need for the native-inputs to build the documentation at this stage.
+ (native-inputs `())))
(define perl-boot0
- (let ((perl (package
- (inherit perl)
- (name "perl-boot0")
- (arguments
- ;; At the very least, this must not depend on GCC & co.
- (let ((args `(#:validate-runpath? #f
- #:disallowed-references
- ,(list %bootstrap-binutils))))
- `(,@args
- ,@(substitute-keyword-arguments (package-arguments perl)
- ((#:phases phases)
- `(modify-phases ,phases
- ;; Pthread support is missing in the bootstrap compiler
- ;; (broken spec file), so disable it.
- (add-before 'configure 'disable-pthreads
- (lambda _
- (substitute* "Configure"
- (("^libswanted=(.*)pthread" _ before)
- (string-append "libswanted=" before)))
- #t))))
- ;; Do not configure with '-Dusethreads' since pthread
- ;; support is missing.
- ((#:configure-flags configure-flags)
- `(delete "-Dusethreads" ,configure-flags)))))))))
- (package-with-bootstrap-guile
- (package-with-explicit-inputs perl
- %boot0-inputs
- (current-source-location)
- #:guile %bootstrap-guile))))
+ (package
+ (inherit perl)
+ (name "perl-boot0")
+ (source (bootstrap-origin (package-source perl)))
+ (inputs (%boot0-inputs))
+ (arguments
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+ #:validate-runpath? #f
+
+ ;; At the very least, this must not depend on GCC & co.
+ #:disallowed-references ,(list %bootstrap-binutils)
+
+ ,@(substitute-keyword-arguments (package-arguments perl)
+ ((#:phases phases)
+ `(modify-phases ,phases
+ ;; Pthread support is missing in the bootstrap compiler
+ ;; (broken spec file), so disable it.
+ (add-before 'configure 'disable-pthreads
+ (lambda _
+ (substitute* "Configure"
+ (("^libswanted=(.*)pthread" _ before)
+ (string-append "libswanted=" before)))
+ #t))))
+ ;; Do not configure with '-Dusethreads' since pthread
+ ;; support is missing.
+ ((#:configure-flags configure-flags)
+ `(delete "-Dusethreads" ,configure-flags)))))))
(define m4-boot0
- (package-with-bootstrap-guile
- (package
- (inherit m4)
- (name "m4-boot0")
- (inputs (%boot0-inputs))
- (arguments
- `(#:guile ,%bootstrap-guile
- #:implicit-inputs? #f
- ,@(package-arguments m4))))))
+ (package
+ (inherit m4)
+ (name "m4-boot0")
+ (source (bootstrap-origin (package-source m4)))
+ (inputs (%boot0-inputs))
+ (arguments
+ `(#:guile ,%bootstrap-guile
+ #:implicit-inputs? #f
+ ,@(package-arguments m4)))))
+
+(define m4-boot0*
+ (package
+ ;; TODO: On the next rebuild cycle, use M4-BOOT0 as is.
+ (inherit m4-boot0)
+ (name "m4")))
(define bison-boot0
;; This Bison is needed to build MiG so we need it early in the process.
;; Recent versions of Linux-Libre headers also depend on this.
- (let* ((bison (package (inherit bison)
- (propagated-inputs `(("m4" ,m4)))
- (inputs '()) ;remove Flex...
- (arguments
- `(#:tests? #f ;... and thus disable tests
-
- ;; XXX: These flags should be unconditional, but for now
- ;; we just add them on x86 to avoid a full rebuild.
- ;; TODO: On the next core-updates, use
- ;; 'substitute-keyword-arguments' to inherit them from
- ;; BISON.
- ,@(if (member (%current-system)
- '("x86_64-linux" "i686-linux"))
- '(#:parallel-build? #f
- #:parallel-tests? #f)
- '())
-
- ;; Zero timestamps in liby.a; this must be done
- ;; explicitly here because the bootstrap Binutils don't
- ;; do that (default is "cru".)
- #:make-flags `("ARFLAGS=crD"
- ,,(match (%current-system)
- ;; ranlib: '-D': No such file
- ((or "i686-linux" "x86_64-linux")
- "RANLIB=ranlib")
- (_
- "RANLIB=ranlib -D"))
- "V=1"))))))
- (package
- (inherit (package-with-bootstrap-guile
- (package-with-explicit-inputs bison %boot0-inputs
- (current-source-location)
- #:guile %bootstrap-guile)))
- (native-inputs `(("perl" ,perl-boot0))))))
+ (package
+ (inherit bison)
+ ;; TODO: On the next build cycle, do:
+ ;;(name "bison-boot0")
+ (propagated-inputs `(("m4" ,m4-boot0*)))
+ (native-inputs `(("perl" ,perl-boot0)))
+ (inputs (%boot0-inputs)) ;remove Flex...
+ (arguments
+ `(#:tests? #f ;... and thus disable tests
+ #:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+
+ ;; XXX: These flags should be unconditional, but for now
+ ;; we just add them on x86 to avoid a full rebuild.
+ ;; TODO: On the next core-updates, use
+ ;; 'substitute-keyword-arguments' to inherit them from
+ ;; BISON.
+ ,@(if (member (%current-system)
+ '("x86_64-linux" "i686-linux"))
+ '(#:parallel-build? #f
+ #:parallel-tests? #f)
+ '())
+
+ ;; Zero timestamps in liby.a; this must be done
+ ;; explicitly here because the bootstrap Binutils don't
+ ;; do that (default is "cru".)
+ #:make-flags `("ARFLAGS=crD"
+ ,,(match (%current-system)
+ ;; ranlib: '-D': No such file
+ ((or "i686-linux" "x86_64-linux")
+ "RANLIB=ranlib")
+ (_
+ "RANLIB=ranlib -D"))
+ "V=1")))))
(define flex-boot0
;; This Flex is needed to build MiG as well as Linux-Libre headers.
- (let* ((flex (package (inherit flex)
- (native-inputs `(("bison" ,bison-boot0)))
- (propagated-inputs `(("m4" ,m4)))
- (inputs '())
- (arguments '(#:tests? #f)))))
- (package-with-bootstrap-guile
- (package-with-explicit-inputs flex %boot0-inputs
- (current-source-location)
- #:guile %bootstrap-guile))))
+ (package
+ (inherit flex)
+ (native-inputs `(("bison" ,bison-boot0)))
+ (propagated-inputs
+ ;; XXX: Here we use an 'm4-boot0' package that's not eq? so that it
+ ;; appears twice in '%build-inputs', like when we were using
+ ;; 'package-with-explicit-inputs'.
+ ;; TODO: Remove this hack on the next rebuild cycle.
+ `(("m4" ,(package (inherit m4-boot0*)))))
+ (inputs (%boot0-inputs))
+ (arguments
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+ #:tests? #f))))
(define linux-libre-headers-boot0
(mlambda ()
@@ -1768,18 +1784,19 @@ exec " gcc "/bin/" program
;; 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-with-bootstrap-guile
- (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)
- ,@(%boot0-inputs)))))))
+ (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)
+ ,@(%boot0-inputs))))))
(define gnumach-headers-boot0
(package-with-bootstrap-guile
@@ -1844,81 +1861,86 @@ the bootstrap environment."
;; We build without ncurses because it fails to build at this stage, and
;; because we don't need the stand-alone Info reader.
;; Also, use (%BOOT0-INPUTS) to avoid building Perl once more.
- (let ((texinfo (package (inherit texinfo)
- (native-inputs '())
- (inputs `(("perl" ,perl-boot0)))
-
- ;; Some of Texinfo 6.1's tests would fail with "Couldn't
- ;; set UTF-8 character type in locale" but we don't have a
- ;; UTF-8 locale at this stage, so skip them.
- (arguments '(#:tests? #f)))))
- (package-with-bootstrap-guile
- (package-with-explicit-inputs texinfo %boot0-inputs
- (current-source-location)
- #:guile %bootstrap-guile))))
+ (package
+ (inherit texinfo)
+ (native-inputs '())
+ (inputs `(,@(%boot0-inputs)
+ ("perl" ,perl-boot0)))
+ (arguments
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+
+ ;; Some of Texinfo 6.1's tests would fail with "Couldn't set UTF-8
+ ;; character type in locale" but we don't have a UTF-8 locale at this
+ ;; stage, so skip them.
+ #:tests? #f))))
(define expat-sans-tests
(package
(inherit expat)
+ (inputs (%boot0-inputs))
(arguments
;; XXX: Linking 'runtestscpp' fails with things like:
;;
;; ld: Dwarf Error: found dwarf version '3789', this reader only handles version 2 and 3 information.
;;
;; Skip tests altogether.
- (substitute-keyword-arguments (package-arguments expat)
- ((#:configure-flags flags ''())
- ;; Since we're not passing the right -Wl,-rpath flags, build the
- ;; static library to avoid RUNPATH validation failure.
- `(cons "--disable-shared" ,flags))
- ((#:tests? _ #f) #f)))))
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+
+ ,@(substitute-keyword-arguments (package-arguments expat)
+ ((#:configure-flags flags ''())
+ ;; Since we're not passing the right -Wl,-rpath flags, build the
+ ;; static library to avoid RUNPATH validation failure.
+ `(cons "--disable-shared" ,flags))
+ ((#:tests? _ #f) #f))))))
(define python-boot0
- (let ((python (package
- (inherit python-minimal)
- ;; We cannot use Python 3.7 and later here, because they require
- ;; pthreads, which is missing on non-x86 platforms at this stage.
- ;; Python 3.6 technically supports being built without threading
- ;; support, but requires additional patches.
- (version "3.5.7")
- (source (origin
- (inherit (package-source python))
- (uri (string-append "https://www.python.org/ftp/python/"
- version "/Python-" version ".tar.xz"))
- (patches '())
- (sha256
- (base32
- "1p67pnp2ca5przx2s45r8m55dcn6f5hsm0l4s1zp7mglkf4r4n18"))))
- (inputs
- `(("expat" ,expat-sans-tests))) ;remove OpenSSL, zlib, etc.
- (native-inputs '()) ;and pkg-config
- (arguments
- (substitute-keyword-arguments (package-arguments
- python-minimal)
- ;; Disable features that cannot be built at this stage.
- ((#:configure-flags _ ''())
- `(list "--without-ensurepip"
- "--without-threads"))
- ;; Clear #:make-flags, such that changes to the regular
- ;; Python package won't interfere with this one.
- ((#:make-flags _ ''()) ''())
- ((#:phases phases)
- `(modify-phases ,phases
- (add-before 'configure 'disable-modules
- (lambda _
- (substitute* "setup.py"
- ;; Disable ctypes, since it requires libffi.
- (("extensions\\.append\\(ctypes\\)") "")
- ;; Prevent the 'ossaudiodev' extension from being
- ;; built, since it requires Linux headers.
- (("'linux', ") ""))
- #t))
- (delete 'set-TZDIR)))
- ((#:tests? _ #f) #f))))))
- (package-with-bootstrap-guile
- (package-with-explicit-inputs python %boot0-inputs
- (current-source-location)
- #:guile %bootstrap-guile))))
+ (package
+ (inherit python-minimal)
+ ;; We cannot use Python 3.7 and later here, because they require
+ ;; pthreads, which is missing on non-x86 platforms at this stage.
+ ;; Python 3.6 technically supports being built without threading
+ ;; support, but requires additional patches.
+ (version "3.5.7")
+ (source (bootstrap-origin
+ (origin
+ (inherit (package-source python))
+ (uri (string-append "https://www.python.org/ftp/python/"
+ version "/Python-" version ".tar.xz"))
+ (patches '())
+ (sha256
+ (base32
+ "1p67pnp2ca5przx2s45r8m55dcn6f5hsm0l4s1zp7mglkf4r4n18")))))
+ (inputs
+ `(,@(%boot0-inputs)
+ ("expat" ,expat-sans-tests))) ;remove OpenSSL, zlib, etc.
+ (native-inputs '()) ;and pkg-config
+ (arguments
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+
+ ,@(substitute-keyword-arguments (package-arguments python-minimal)
+ ;; Disable features that cannot be built at this stage.
+ ((#:configure-flags _ ''())
+ `(list "--without-ensurepip"
+ "--without-threads"))
+ ;; Clear #:make-flags, such that changes to the regular
+ ;; Python package won't interfere with this one.
+ ((#:make-flags _ ''()) ''())
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (add-before 'configure 'disable-modules
+ (lambda _
+ (substitute* "setup.py"
+ ;; Disable ctypes, since it requires libffi.
+ (("extensions\\.append\\(ctypes\\)") "")
+ ;; Prevent the 'ossaudiodev' extension from being
+ ;; built, since it requires Linux headers.
+ (("'linux', ") ""))
+ #t))
+ (delete 'set-TZDIR)))
+ ((#:tests? _ #f) #f))))))
(define (ld-wrapper-boot0)
;; We need this so binaries on Hurd will have libmachuser and libhurduser
@@ -1942,65 +1964,66 @@ the bootstrap environment."
;; store path has no dependencies. Actually, the really-final libc is
;; built just below; the only difference is that this one uses the
;; bootstrap Bash.
- (package-with-bootstrap-guile
- (package (inherit glibc)
- (name "glibc-intermediate")
- (arguments
- `(#:guile ,%bootstrap-guile
- #:implicit-inputs? #f
-
- ,@(substitute-keyword-arguments (package-arguments glibc)
- ((#:configure-flags flags)
- `(append (list ,(string-append "--host=" (boot-triplet))
- ,(string-append "--build="
- (nix-system->gnu-triplet)))
- ,flags))
- ((#:phases phases)
- `(modify-phases ,phases
- (add-before 'configure 'pre-configure
- (lambda* (#:key inputs #:allow-other-keys)
- ;; Don't clobber CPATH with the bootstrap libc.
- (setenv "NATIVE_CPATH" (getenv "CPATH"))
- (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"))))
- '())
-
- ;; 'rpcgen' needs native libc headers to be built.
- (substitute* "sunrpc/Makefile"
- (("sunrpc-CPPFLAGS =.*" all)
- (string-append "CPATH = $(NATIVE_CPATH)\n"
- "export CPATH\n"
- all "\n")))
- #t)))))))
- (propagated-inputs `(("kernel-headers" ,(kernel-headers-boot0))))
- (native-inputs
- `(("bison" ,bison-boot0)
- ("texinfo" ,texinfo-boot0)
- ("perl" ,perl-boot0)
- ("python" ,python-boot0)))
- (inputs
- `(;; The boot inputs. That includes the bootstrap libc. We don't want
- ;; it in $CPATH, hence the 'pre-configure' phase above.
- ,@(%boot1-inputs)
-
- ;; A native MiG is needed to build Glibc on Hurd.
- ,@(if (hurd-triplet? (%current-system))
- `(("mig" ,mig-boot0))
- '())
-
- ;; A native GCC is needed to build `cross-rpcgen'.
- ("native-gcc" ,@(assoc-ref (%boot0-inputs) "gcc"))
-
- ;; Here, we use the bootstrap Bash, which is not satisfactory
- ;; because we don't want to depend on bootstrap tools.
- ("static-bash" ,@(assoc-ref (%boot0-inputs) "bash")))))))
+ (package
+ (inherit glibc)
+ (name "glibc-intermediate")
+ (source (bootstrap-origin (package-source glibc)))
+ (arguments
+ `(#:guile ,%bootstrap-guile
+ #:implicit-inputs? #f
+
+ ,@(substitute-keyword-arguments (package-arguments glibc)
+ ((#:configure-flags flags)
+ `(append (list ,(string-append "--host=" (boot-triplet))
+ ,(string-append "--build="
+ (nix-system->gnu-triplet)))
+ ,flags))
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (add-before 'configure 'pre-configure
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; Don't clobber CPATH with the bootstrap libc.
+ (setenv "NATIVE_CPATH" (getenv "CPATH"))
+ (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"))))
+ '())
+
+ ;; 'rpcgen' needs native libc headers to be built.
+ (substitute* "sunrpc/Makefile"
+ (("sunrpc-CPPFLAGS =.*" all)
+ (string-append "CPATH = $(NATIVE_CPATH)\n"
+ "export CPATH\n"
+ all "\n")))
+ #t)))))))
+ (propagated-inputs `(("kernel-headers" ,(kernel-headers-boot0))))
+ (native-inputs
+ `(("bison" ,bison-boot0)
+ ("texinfo" ,texinfo-boot0)
+ ("perl" ,perl-boot0)
+ ("python" ,python-boot0)))
+ (inputs
+ `( ;; The boot inputs. That includes the bootstrap libc. We don't want
+ ;; it in $CPATH, hence the 'pre-configure' phase above.
+ ,@(%boot1-inputs)
+
+ ;; A native MiG is needed to build Glibc on Hurd.
+ ,@(if (hurd-triplet? (%current-system))
+ `(("mig" ,mig-boot0))
+ '())
+
+ ;; A native GCC is needed to build `cross-rpcgen'.
+ ("native-gcc" ,@(assoc-ref (%boot0-inputs) "gcc"))
+
+ ;; Here, we use the bootstrap Bash, which is not satisfactory
+ ;; because we don't want to depend on bootstrap tools.
+ ("static-bash" ,@(assoc-ref (%boot0-inputs) "bash"))))))
(define (cross-gcc-wrapper gcc binutils glibc bash)
"Return a wrapper for the pseudo-cross toolchain GCC/BINUTILS/GLIBC
@@ -2064,99 +2087,92 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
(define static-bash-for-glibc
;; A statically-linked Bash to be used by GLIBC-FINAL in system(3) & co.
- (let ((bash (package
- (inherit static-bash)
- (arguments
- (substitute-keyword-arguments
- (package-arguments static-bash)
- ((#:guile _ #f)
- '%bootstrap-guile)
- ((#:configure-flags flags '())
- ;; Add a '-L' flag so that the pseudo-cross-ld of
- ;; BINUTILS-BOOT0 can find libc.a.
- `(append ,flags
- (list (string-append "LDFLAGS=-static -L"
- (assoc-ref %build-inputs
- "libc:static")
- "/lib")))))))))
- (package-with-bootstrap-guile
- (package-with-explicit-inputs
- bash
- (lambda _
- `(("gcc" ,(gcc-boot0-intermediate-wrapped))
- ("libc" ,glibc-final-with-bootstrap-bash)
- ("libc:static" ,glibc-final-with-bootstrap-bash "static")
- ,@(fold alist-delete (%boot1-inputs)
- '("gcc" "libc"))))
- (current-source-location)
- #:guile %bootstrap-guile))))
+ (package
+ (inherit static-bash)
+ (source (bootstrap-origin (package-source static-bash)))
+ (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)
+ '("gcc" "libc"))))
+ (arguments
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+
+ ,@(substitute-keyword-arguments (package-arguments static-bash)
+ ((#:configure-flags flags '())
+ ;; Add a '-L' flag so that the pseudo-cross-ld of
+ ;; BINUTILS-BOOT0 can find libc.a.
+ `(append ,flags
+ (list (string-append "LDFLAGS=-static -L"
+ (assoc-ref %build-inputs
+ "libc:static")
+ "/lib")))))))))
(define gettext-boot0
;; A minimal gettext used during bootstrap.
- (let ((gettext-minimal
- (package (inherit gettext-minimal)
- (name "gettext-boot0")
- ;; Newer versions of GNU gettext depends on libxml2 and ncurses. To
- ;; simplify the dependency chain, we stick to this version here.
- (version "0.19.8.1")
- (source (origin
- (method url-fetch)
- (uri (string-append "mirror://gnu/gettext/gettext-"
- version ".tar.gz"))
- (sha256
- (base32
- "0hsw28f9q9xaggjlsdp2qmbp2rbd1mp0njzan2ld9kiqwkq2m57z"))))
- (inputs '()) ;zero dependencies
- (arguments
- `(#:tests? #f
- #:phases (modify-phases %standard-phases
- ;; Build only the tools.
- (add-after 'unpack 'chdir
- (lambda _
- (chdir "gettext-tools")
- #t))
-
- ;; Some test programs require pthreads, which we don't have.
- (add-before 'configure 'no-test-programs
- (lambda _
- (substitute* "tests/Makefile.in"
- (("^PROGRAMS =.*$")
- "PROGRAMS =\n"))
- #t))))))))
- (package-with-bootstrap-guile
- (package-with-explicit-inputs gettext-minimal
- %boot1-inputs
- (current-source-location)
- #:guile %bootstrap-guile))))
+ (package
+ (inherit gettext-minimal)
+ (name "gettext-boot0")
+ ;; Newer versions of GNU gettext depends on libxml2 and ncurses. To
+ ;; simplify the dependency chain, we stick to this version here.
+ (version "0.19.8.1")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://gnu/gettext/gettext-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "0hsw28f9q9xaggjlsdp2qmbp2rbd1mp0njzan2ld9kiqwkq2m57z"))))
+ (inputs (%boot1-inputs)) ;zero dependencies
+ (arguments
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+ #:tests? #f
+ #:phases (modify-phases %standard-phases
+ ;; Build only the tools.
+ (add-after 'unpack 'chdir
+ (lambda _
+ (chdir "gettext-tools")
+ #t))
+
+ ;; Some test programs require pthreads, which we don't have.
+ (add-before 'configure 'no-test-programs
+ (lambda _
+ (substitute* "tests/Makefile.in"
+ (("^PROGRAMS =.*$")
+ "PROGRAMS =\n"))
+ #t)))))))
(define glibc-final
;; The final glibc, which embeds the statically-linked Bash built above.
;; Use 'package/inherit' so we get the 'replacement' of 'glibc', if any.
- (let ((glibc (package-with-bootstrap-guile glibc)))
- (package/inherit glibc
- (name "glibc")
- (inputs `(("static-bash" ,static-bash-for-glibc)
- ,@(alist-delete
- "static-bash"
- (package-inputs glibc-final-with-bootstrap-bash))))
-
- ;; This time we need 'msgfmt' to install all the libc.mo files.
- (native-inputs `(,@(package-native-inputs glibc-final-with-bootstrap-bash)
- ("gettext" ,gettext-boot0)))
-
- (propagated-inputs
- (package-propagated-inputs glibc-final-with-bootstrap-bash))
-
- ;; The final libc only refers to itself, but the 'debug' output contains
- ;; references to GCC-BOOT0 and to the Linux headers. XXX: Would be great
- ;; 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))
-
- ,@(package-arguments glibc-final-with-bootstrap-bash))))))
+ (package/inherit
+ glibc
+ (name "glibc")
+ (source (bootstrap-origin (package-source glibc)))
+ (inputs `(("static-bash" ,static-bash-for-glibc)
+ ,@(alist-delete
+ "static-bash"
+ (package-inputs glibc-final-with-bootstrap-bash))))
+
+ ;; This time we need 'msgfmt' to install all the libc.mo files.
+ (native-inputs `(,@(package-native-inputs glibc-final-with-bootstrap-bash)
+ ("gettext" ,gettext-boot0)))
+
+ (propagated-inputs
+ (package-propagated-inputs glibc-final-with-bootstrap-bash))
+
+ ;; The final libc only refers to itself, but the 'debug' output contains
+ ;; references to GCC-BOOT0 and to the Linux headers. XXX: Would be great
+ ;; 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))
+
+ ,@(package-arguments glibc-final-with-bootstrap-bash)))))
(define (gcc-boot0-wrapped)
;; Make the cross-tools GCC-BOOT0 and BINUTILS-BOOT0 available under the
@@ -2172,21 +2188,23 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
,@(fold alist-delete (%boot1-inputs) '("libc" "gcc" "linux-libre-headers"))))
(define binutils-final
- (package-with-bootstrap-guile
- (package (inherit binutils)
- (arguments
- `(#:guile ,%bootstrap-guile
- #:implicit-inputs? #f
- #:allowed-references ("out" ,glibc-final)
- ,@(package-arguments binutils)))
- (inputs (%boot2-inputs)))))
+ (package
+ (inherit binutils)
+ (source (bootstrap-origin (package-source binutils)))
+ (arguments
+ `(#:guile ,%bootstrap-guile
+ #:implicit-inputs? #f
+ #:allowed-references ("out" ,glibc-final)
+ ,@(package-arguments binutils)))
+ (inputs (%boot2-inputs))))
(define libstdc++
;; Intermediate libstdc++ that will allow us to build the final GCC
;; (remember that GCC-BOOT0 cannot build libstdc++.)
- (let ((lib (package-with-bootstrap-guile (make-libstdc++ gcc))))
+ (let ((lib (make-libstdc++ gcc)))
(package
(inherit lib)
+ (source (bootstrap-origin (package-source lib)))
(arguments
`(#:guile ,%bootstrap-guile
#:implicit-inputs? #f
@@ -2211,15 +2229,14 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
(define zlib-final
;; Zlib used by GCC-FINAL.
- (package-with-bootstrap-guile
- (package
- (inherit zlib)
- (arguments
- `(#:guile ,%bootstrap-guile
- #:implicit-inputs? #f
- #:allowed-references ("out" ,glibc-final)
- ,@(package-arguments zlib)))
- (inputs (%boot2-inputs)))))
+ (package
+ (inherit zlib)
+ (arguments
+ `(#:guile ,%bootstrap-guile
+ #:implicit-inputs? #f
+ #:allowed-references ("out" ,glibc-final)
+ ,@(package-arguments zlib)))
+ (inputs (%boot2-inputs))))
(define (ld-wrapper-boot3)
;; A linker wrapper that uses the bootstrap Guile.
@@ -2328,17 +2345,18 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
;; Link with `-static-libgcc' to make sure we don't retain a reference
;; to the bootstrap GCC. Use "bash-minimal" to avoid an extra dependency
;; on Readline and ncurses.
- (let ((bash (package
- (inherit bash-minimal)
- (arguments
- `(#:disallowed-references
- ,(assoc-ref (%boot3-inputs) "coreutils&co")
- ,@(package-arguments bash-minimal))))))
- (package-with-bootstrap-guile
- (package-with-explicit-inputs (static-libgcc-package bash)
- %boot3-inputs
- (current-source-location)
- #:guile %bootstrap-guile))))
+ (let ((bash (static-libgcc-package bash-minimal)))
+ (package
+ (inherit bash)
+ (source (bootstrap-origin (package-source bash)))
+ (inputs (%boot3-inputs))
+ (arguments
+ `(#:implicit-inputs? #f
+ #:guile ,%bootstrap-guile
+
+ #:disallowed-references ,(assoc-ref (%boot3-inputs) "coreutils&co")
+
+ ,@(package-arguments bash))))))
(define (%boot4-inputs)
;; Now use the final Bash.