diff options
author | Ludovic Courtès <ludo@gnu.org> | 2017-05-25 14:21:04 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2017-05-25 14:25:17 +0200 |
commit | 20ed093977cc80ba1729c38e05ae7955a38069a6 (patch) | |
tree | 2cbda1766f47080f98995e9419efa70e46d03750 | |
parent | bfe5264aa10c1af64adc5c24d0cf091562e3e09c (diff) | |
download | guix-20ed093977cc80ba1729c38e05ae7955a38069a6.tar.gz |
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.scm | 25 |
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) |