system: Prefer packages from %FINAL-INPUTS.

* gnu/packages/base.scm (canonical-package): New procedure.
* gnu/system.scm (%base-packages): Pass BASH, COREUTILS, FINDUTILS,
  GREP, and SED through 'canonical-package'.
This commit is contained in:
Ludovic Courtès 2014-06-18 23:28:54 +02:00
parent eef4096c14
commit 9b762b8d7c
2 changed files with 45 additions and 6 deletions

View File

@ -42,6 +42,7 @@
#:use-module (guix utils) #:use-module (guix utils)
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
#:use-module (srfi srfi-26) #:use-module (srfi srfi-26)
#:use-module (ice-9 vlist)
#:use-module (ice-9 match)) #:use-module (ice-9 match))
;;; Commentary: ;;; Commentary:
@ -1204,6 +1205,40 @@ store.")
("gcc" ,gcc-final) ("gcc" ,gcc-final)
("libc" ,glibc-final)))) ("libc" ,glibc-final))))
(define-public canonical-package
(let ((name->package (fold (lambda (input result)
(match input
((_ package)
(vhash-cons (package-full-name package)
package result))))
vlist-null
`(("guile" ,guile-final)
,@%final-inputs))))
(lambda (package)
"Return the 'canonical' variant of PACKAGE---i.e., if PACKAGE is one of
the implicit inputs of 'gnu-build-system', return that one, otherwise return
PACKAGE.
The goal is to avoid duplication in cases like GUILE-FINAL vs. GUILE-2.0,
COREUTILS-FINAL vs. COREUTILS, etc."
;; XXX: This doesn't handle dependencies of the final inputs, such as
;; libunistring, GMP, etc.
(match (vhash-assoc (package-full-name package) name->package)
((_ . canon)
;; In general we want CANON, except if we're cross-compiling: CANON
;; uses explicit inputs, so it is "anchored" in the bootstrapped
;; process, with dependencies on things that cannot be
;; cross-compiled.
(if (%current-target-system)
package
canon))
(_ package)))))
;;;
;;; GCC toolchain.
;;;
(define (gcc-toolchain gcc) (define (gcc-toolchain gcc)
"Return a complete toolchain for GCC." "Return a complete toolchain for GCC."
(package (package

View File

@ -216,12 +216,16 @@ explicitly appear in OS."
(define %base-packages (define %base-packages
;; Default set of packages globally visible. It should include anything ;; Default set of packages globally visible. It should include anything
;; required for basic administrator tasks. ;; required for basic administrator tasks.
(list bash coreutils findutils grep sed (cons* procps psmisc less zile
procps psmisc less zile guile-final (@ (gnu packages admin) dmd) guix
guile-final (@ (gnu packages admin) dmd) guix util-linux inetutils isc-dhcp
util-linux inetutils isc-dhcp net-tools ; XXX: remove when Inetutils suffices
net-tools ; XXX: remove when Inetutils suffices module-init-tools kbd
module-init-tools kbd))
;; The packages below are also in %FINAL-INPUTS, so take them from
;; there to avoid duplication.
(map canonical-package
(list bash coreutils findutils grep sed))))
(define %default-issue (define %default-issue
;; Default contents for /etc/issue. ;; Default contents for /etc/issue.