Toggle diff (173 lines)
diff --git a/guix/self.scm b/guix/self.scm
index 93019e1c64..c5de3ab8fc 100644
--- a/guix/self.scm
+++ b/guix/self.scm
@@ -44,34 +44,42 @@ (define-module (guix self)
;;; Dependency handling.
;;;
-(define specification->package
+(define %packages
+ (let ((ref (lambda (module variable)
+ (delay
+ (module-ref (resolve-interface
+ `(gnu packages ,module))
+ variable)))))
+ `(("guile" . ,(ref 'guile 'guile-3.0-latest))
+ ("guile-avahi" . ,(ref 'guile-xyz 'guile-avahi))
+ ("guile-json" . ,(ref 'guile 'guile-json-4))
+ ("guile-ssh" . ,(ref 'ssh 'guile-ssh))
+ ("guile-git" . ,(ref 'guile 'guile-git))
+ ("guile-semver" . ,(ref 'guile-xyz 'guile-semver))
+ ("guile-lib" . ,(ref 'guile-xyz 'guile-lib))
+ ("guile-sqlite3" . ,(ref 'guile 'guile-sqlite3))
+ ("guile-zlib" . ,(ref 'guile 'guile-zlib))
+ ("guile-lzlib" . ,(ref 'guile 'guile-lzlib))
+ ("guile-zstd" . ,(ref 'guile 'guile-zstd))
+ ("guile-gcrypt" . ,(ref 'gnupg 'guile-gcrypt))
+ ("guile-gnutls" . ,(ref 'tls 'guile-gnutls))
+ ("guix-daemon" . ,(ref 'package-management 'guix-daemon))
+ ("disarchive" . ,(ref 'backup 'disarchive))
+ ("guile-lzma" . ,(ref 'guile 'guile-lzma))
+ ("gzip" . ,(ref 'compression 'gzip))
+ ("bzip2" . ,(ref 'compression 'bzip2))
+ ("xz" . ,(ref 'compression 'xz))
+ ("po4a" . ,(ref 'gettext 'po4a))
+ ("gettext-minimal" . ,(ref 'gettext 'gettext-minimal))
+ ("gcc-toolchain" . ,(ref 'commencement 'gcc-toolchain))
+ ("glibc-utf8-locales" . ,(ref 'base 'glibc-utf8-locales))
+ ("graphviz" . ,(ref 'graphviz 'graphviz))
+ ("texinfo" . ,(ref 'texinfo 'texinfo)))))
+
+(define (specification->package name)
;; Use our own variant of that procedure because that of (gnu packages)
;; would traverse all the .scm files, which is wasteful.
- (let ((ref (lambda (module variable)
- (module-ref (resolve-interface module) variable))))
- (match-lambda
- ("guile" (ref '(gnu packages guile) 'guile-3.0-latest))
- ("guile-avahi" (ref '(gnu packages guile-xyz) 'guile-avahi))
- ("guile-json" (ref '(gnu packages guile) 'guile-json-4))
- ("guile-ssh" (ref '(gnu packages ssh) 'guile-ssh))
- ("guile-git" (ref '(gnu packages guile) 'guile-git))
- ("guile-semver" (ref '(gnu packages guile-xyz) 'guile-semver))
- ("guile-lib" (ref '(gnu packages guile-xyz) 'guile-lib))
- ("guile-sqlite3" (ref '(gnu packages guile) 'guile-sqlite3))
- ("guile-zlib" (ref '(gnu packages guile) 'guile-zlib))
- ("guile-lzlib" (ref '(gnu packages guile) 'guile-lzlib))
- ("guile-zstd" (ref '(gnu packages guile) 'guile-zstd))
- ("guile-gcrypt" (ref '(gnu packages gnupg) 'guile-gcrypt))
- ("guile-gnutls" (ref '(gnu packages tls) 'guile-gnutls))
- ("disarchive" (ref '(gnu packages backup) 'disarchive))
- ("guile-lzma" (ref '(gnu packages guile) 'guile-lzma))
- ("gzip" (ref '(gnu packages compression) 'gzip))
- ("bzip2" (ref '(gnu packages compression) 'bzip2))
- ("xz" (ref '(gnu packages compression) 'xz))
- ("po4a" (ref '(gnu packages gettext) 'po4a))
- ("gettext" (ref '(gnu packages gettext) 'gettext-minimal))
- ("gcc-toolchain" (ref '(gnu packages commencement) 'gcc-toolchain))
- (_ #f)))) ;no such package
+ (and=> (assoc-ref %packages name) force))
;;;
@@ -240,9 +248,8 @@ (define* (locale-data source domain
#:optional (directory domain))
"Return the locale data from 'po/DIRECTORY' in SOURCE, corresponding to
DOMAIN, a gettext domain."
- (define gettext
- (module-ref (resolve-interface '(gnu packages gettext))
- 'gettext-minimal))
+ (define gettext-minimal
+ (specification->package "gettext-minimal"))
(define build
(with-imported-modules '((guix build utils))
@@ -258,7 +265,7 @@ (define (compile language)
(let ((gmo (string-append #$output "/" language "/LC_MESSAGES/"
#$domain ".mo")))
(mkdir-p (dirname gmo))
- (invoke #+(file-append gettext "/bin/msgfmt")
+ (invoke #+(file-append gettext-minimal "/bin/msgfmt")
"-c" "--statistics" "--verbose"
"-o" gmo
(string-append po-directory "/" language ".po"))))
@@ -280,20 +287,19 @@ (define (translate-texi-manuals source)
"Return the translated texinfo manuals built from SOURCE."
(define po4a
(specification->package "po4a"))
-
- (define gettext
- (specification->package "gettext"))
+
+ (define gettext-minimal
+ (specification->package "gettext-minimal"))
(define glibc-utf8-locales
- (module-ref (resolve-interface '(gnu packages base))
- 'glibc-utf8-locales))
+ (specification->package "glibc-utf8-locales"))
(define documentation
(file-append* source "doc"))
(define documentation-po
(file-append* source "po/doc"))
-
+
(define build
(with-imported-modules '((guix build utils) (guix build po))
#~(begin
@@ -365,7 +371,7 @@ (define parallel-jobs
(setenv "GUIX_LOCPATH"
#+(file-append glibc-utf8-locales "/lib/locale"))
- (setenv "PATH" #+(file-append gettext "/bin"))
+ (setenv "PATH" #+(file-append gettext-minimal "/bin"))
(setenv "LC_ALL" "en_US.UTF-8")
(setlocale LC_ALL "en_US.UTF-8")
@@ -394,16 +400,13 @@ (define parallel-jobs
(define (info-manual source)
"Return the Info manual built from SOURCE."
(define texinfo
- (module-ref (resolve-interface '(gnu packages texinfo))
- 'texinfo))
+ (specification->package "texinfo"))
(define graphviz
- (module-ref (resolve-interface '(gnu packages graphviz))
- 'graphviz))
+ (specification->package "graphviz"))
(define glibc-utf8-locales
- (module-ref (resolve-interface '(gnu packages base))
- 'glibc-utf8-locales))
+ (specification->package "glibc-utf8-locales"))
(define documentation
(file-append* source "doc"))
@@ -586,8 +589,7 @@ (define* (guix-command modules
"Return the 'guix' command such that it adds MODULES and DEPENDENCIES in its
load path."
(define glibc-utf8-locales
- (module-ref (resolve-interface '(gnu packages base))
- 'glibc-utf8-locales))
+ (specification->package "glibc-utf8-locales"))
(define module-directory
;; To minimize the number of 'stat' calls needed to locate a module,
@@ -1030,10 +1032,7 @@ (define (built-modules node-subset)
;; Include 'guix-daemon'. XXX: Here we inject an
;; older snapshot of guix-daemon, but that's a good
;; enough approximation for now.
- #:daemon (module-ref (resolve-interface
- '(gnu packages
- package-management))
- 'guix-daemon)
+ #:daemon (specification->package "guix-daemon")
#:info (info-manual source)
#:miscellany (miscellaneous-files source)
--
2.39.1