distro: Reduce the bootstrap set.

* distro/base.scm (%bootstrap-inputs): Remove `gnumake', `diffutils',
  and `findutils'.
  (gnu-make-boot0, diffutils-boot0, findutils-boot0, %boot0-inputs): New
  variables.
  (binutils-boot0, gcc-boot0, linux-headers-boot0, %boot1-inputs):
  Replace %BOOTSTRAP-INPUTS by %BOOT0-INPUTS.

  (final-inputs): Remove now unneeded call to
  `source-properties->location'.
This commit is contained in:
Ludovic Courtès 2012-09-07 15:49:48 +02:00
parent 2d14ef0f2c
commit 3c0670e686

@ -1273,15 +1273,10 @@ with the Linux kernel.")
`(("libc" ,(nixpkgs-derivation "glibc"))
,@(map (lambda (name)
(list name (nixpkgs-derivation name)))
;; TODO: Reduce the bootstrap set. For instance, GNU Make can be
;; built without a `make' instance; Findutils, bzip2, and xz can
;; be built later.
'("gnutar" "gzip" "bzip2" "xz" "diffutils" "patch"
'("gnutar" "gzip" "bzip2" "xz" "patch"
"coreutils" "gnused" "gnugrep" "bash"
"findutils" ; used by `libtool'
"gawk" ; used by `config.status'
"gcc" "binutils" "gnumake")))))
"gcc" "binutils")))))
(define-syntax substitute-keyword-arguments
(syntax-rules ()
@ -1300,6 +1295,50 @@ previous value of the keyword argument."
(()
(reverse before)))))))
(define gnu-make-boot0
(package (inherit gnu-make)
(name "make-boot0")
(location (source-properties->location (current-source-location)))
(arguments `(#:implicit-inputs? #f
#:tests? #f ; cannot run "make check"
#:phases
(alist-replace
'build (lambda _
(zero? (system* "./build.sh")))
(alist-replace
'install (lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin")))
(mkdir out)
(mkdir bin)
(copy-file "make"
(string-append bin "/make"))))
%standard-phases))))
(inputs %bootstrap-inputs)))
(define diffutils-boot0
(let ((p (package-with-explicit-inputs diffutils
`(("make" ,gnu-make-boot0)
,@%bootstrap-inputs))))
(package (inherit p)
(location (source-properties->location (current-source-location)))
(arguments `(#:tests? #f ; the test suite needs diffutils
,@(package-arguments p))))))
(define findutils-boot0
(package-with-explicit-inputs findutils
`(("make" ,gnu-make-boot0)
("diffutils" ,diffutils-boot0) ; for tests
,@%bootstrap-inputs)
(current-source-location)))
(define %boot0-inputs
`(("make" ,gnu-make-boot0)
("diffutils" ,diffutils-boot0)
("findutils" ,findutils-boot0)
,@%bootstrap-inputs))
(define gcc-boot0
(package (inherit gcc-4.7)
(name "gcc-boot0")
@ -1370,7 +1409,7 @@ previous value of the keyword argument."
("gmp-source" ,(package-source gmp))
("mpfr-source" ,(package-source mpfr))
("mpc-source" ,(package-source mpc))
,@%bootstrap-inputs))))
,@%boot0-inputs))))
(define binutils-boot0
;; Since Binutils in GCC-BOOT0 does not get installed, we need another one
@ -1381,20 +1420,20 @@ previous value of the keyword argument."
`(#:implicit-inputs? #f
,@(package-arguments binutils)))
(inputs `(("gcc" ,gcc-boot0)
,@(alist-delete "gcc" %bootstrap-inputs)))))
,@(alist-delete "gcc" %boot0-inputs)))))
(define linux-headers-boot0
(package (inherit linux-headers)
(arguments `(#:implicit-inputs? #f
,@(package-arguments linux-headers)))
(native-inputs `(("perl" ,(nixpkgs-derivation* "perl"))
,@%bootstrap-inputs))))
,@%boot0-inputs))))
(define %boot1-inputs
;; 2nd stage inputs.
`(("gcc" ,gcc-boot0)
("binutils" ,binutils-boot0)
,@(fold alist-delete %bootstrap-inputs
,@(fold alist-delete %boot0-inputs
'("gcc" "binutils"))))
(define-public glibc-final
@ -1483,8 +1522,7 @@ previous value of the keyword argument."
(define-public %final-inputs
;; Final derivations used as implicit inputs by `gnu-build-system'.
(let ((finalize (cut package-with-explicit-inputs <> %boot4-inputs
(source-properties->location
(current-source-location)))))
(current-source-location))))
`(,@(map (match-lambda
((name package)
(list name (finalize package))))