gexp: 'compiled-modules' no longer overrides (guix build utils).
Until now 'compiled-modules' would override (guix build utils) with its own. Thus, when asked to build a different (guix build utils), via #:module-path, it would fail badly because a (guix build utils) module was already loaded and possibly incompatible with the new one. This happened when running 'guix pull --branch=core-updates' from current master: in 'core-updates', (guix build utils) exports 'ignore-error?' but in 'master' it does not. Thus, 'guix pull' would fail with: no binding `invoke-error?' in module (guix build utils) builder for `/gnu/store/…-module-import-compiled.drv' failed with exit code 1 cannot build derivation `/gnu/store/…-compute-guix-derivation.drv': 1 dependencies couldn't be built This patch fixes it. * guix/gexp.scm (compiled-modules)[build-utils-hack?]: New variable. [build]: Load MODULES/build/utils.scm when it exists.
This commit is contained in:
parent
514026d7de
commit
5d669883ec
|
@ -1075,6 +1075,14 @@ last one is created from the given <scheme-file> object."
|
||||||
"Return a derivation that builds a tree containing the `.go' files
|
"Return a derivation that builds a tree containing the `.go' files
|
||||||
corresponding to MODULES. All the MODULES are built in a context where
|
corresponding to MODULES. All the MODULES are built in a context where
|
||||||
they can refer to each other."
|
they can refer to each other."
|
||||||
|
(define build-utils-hack?
|
||||||
|
;; To avoid a full rebuild, we limit the fix below to the case where
|
||||||
|
;; MODULE-PATH is different from %LOAD-PATH. This happens when building
|
||||||
|
;; modules for 'compute-guix-derivation' upon 'guix pull'. TODO: Make
|
||||||
|
;; this unconditional on the next rebuild cycle.
|
||||||
|
(and (member '(guix build utils) modules)
|
||||||
|
(not (equal? module-path %load-path))))
|
||||||
|
|
||||||
(mlet %store-monad ((modules (imported-modules modules
|
(mlet %store-monad ((modules (imported-modules modules
|
||||||
#:system system
|
#:system system
|
||||||
#:guile guile
|
#:guile guile
|
||||||
|
@ -1114,7 +1122,27 @@ they can refer to each other."
|
||||||
%auto-compilation-options))))
|
%auto-compilation-options))))
|
||||||
entries)))
|
entries)))
|
||||||
|
|
||||||
|
(ungexp-splicing
|
||||||
|
(if build-utils-hack?
|
||||||
|
(gexp ((define mkdir-p
|
||||||
|
;; Capture 'mkdir-p'.
|
||||||
|
(@ (guix build utils) mkdir-p))))
|
||||||
|
'()))
|
||||||
|
|
||||||
(set! %load-path (cons (ungexp modules) %load-path))
|
(set! %load-path (cons (ungexp modules) %load-path))
|
||||||
|
|
||||||
|
(ungexp-splicing
|
||||||
|
(if build-utils-hack?
|
||||||
|
;; Above we loaded our own (guix build utils) but now we may
|
||||||
|
;; need to load a compile a different one. Thus, force a
|
||||||
|
;; reload.
|
||||||
|
(gexp ((let ((utils (ungexp
|
||||||
|
(file-append modules
|
||||||
|
"/guix/build/utils.scm"))))
|
||||||
|
(when (file-exists? utils)
|
||||||
|
(load utils)))))
|
||||||
|
'()))
|
||||||
|
|
||||||
(mkdir (ungexp output))
|
(mkdir (ungexp output))
|
||||||
(chdir (ungexp modules))
|
(chdir (ungexp modules))
|
||||||
(process-directory "." (ungexp output)))))
|
(process-directory "." (ungexp output)))))
|
||||||
|
|
Loading…
Reference in New Issue