summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2017-05-25 14:21:04 +0200
committerLudovic Courtès <ludo@gnu.org>2017-05-25 14:25:17 +0200
commit20ed093977cc80ba1729c38e05ae7955a38069a6 (patch)
tree2cbda1766f47080f98995e9419efa70e46d03750
parentbfe5264aa10c1af64adc5c24d0cf091562e3e09c (diff)
pull: Catch '&missing-dependency-error' raised by 'source-module-closure'.
Fixes <http://bugs.gnu.org/26987>. Reported by Mathieu Othacehe <m.othacehe@gmail.com>. * guix/build/pull.scm (depends-on-guile-ssh?): Remove. (has-all-its-dependencies?): New procedure. (build-guix): Use it to filter source files.
-rw-r--r--guix/build/pull.scm25
1 files changed, 14 insertions, 11 deletions
diff --git a/guix/build/pull.scm b/guix/build/pull.scm
index d2e0404b14..03b0f925a7 100644
--- a/guix/build/pull.scm
+++ b/guix/build/pull.scm
@@ -28,6 +28,7 @@
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-11)
#:use-module (srfi srfi-26)
+ #:use-module (srfi srfi-34)
#:export (build-guix))
;;; Commentary:
@@ -36,13 +37,18 @@
;;;
;;; Code:
-(define (depends-on-guile-ssh? file)
- "Return true if FILE is a Scheme source file that depends, directly or
-indirectly, on Guile-SSH."
- (find (match-lambda
- (('ssh _ ...) #t)
- (_ #f))
- (source-module-closure file #:select? (const #t))))
+(define (has-all-its-dependencies? file)
+ "Return true if the dependencies of the module defined in FILE are
+available, false otherwise."
+ (let ((module (call-with-input-file file
+ (lambda (port)
+ (match (read port)
+ (('define-module name _ ...)
+ name))))))
+ ;; If one of the dependencies of MODULE is missing, we get a
+ ;; '&missing-dependency-error'.
+ (guard (c ((missing-dependency-error? c) #f))
+ (source-module-closure (list module) #:select? (const #t)))))
(define (all-scheme-files directory)
"Return a sorted list of Scheme files found in DIRECTORY."
@@ -145,10 +151,7 @@ containing the source code. Write any debugging output to DEBUG-PORT."
;; Compile the .scm files. Load all the files before compiling them to
;; work around <http://bugs.gnu.org/15602> (FIXME).
;; Filter out files depending on Guile-SSH when Guile-SSH is missing.
- (let* ((files (remove (if (false-if-exception
- (resolve-interface '(ssh session)))
- (const #f)
- depends-on-guile-ssh?)
+ (let* ((files (filter has-all-its-dependencies?
(all-scheme-files out)))
(total (length files)))
(let loop ((files files)