From 17e5a56569c7b13d513ac867d1951ca527d11ce4 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 9 Mar 2019 08:42:54 -0700 Subject: [PATCH] raco setup: allow dependency checking to continue after error When reading a bytecode file fails, record the error and continue. --- racket/collects/setup/private/pkg-deps.rkt | 58 ++++++++++++---------- racket/collects/setup/setup-core.rkt | 3 ++ 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/racket/collects/setup/private/pkg-deps.rkt b/racket/collects/setup/private/pkg-deps.rkt index 7a0e17b2d7..1978dcb909 100644 --- a/racket/collects/setup/private/pkg-deps.rkt +++ b/racket/collects/setup/private/pkg-deps.rkt @@ -28,7 +28,7 @@ coll-paths coll-main?s coll-modes - setup-printf setup-fprintf + setup-printf setup-fprintf report-error check-unused? fix? verbose? all-pkgs-lazily? must-declare-deps?) @@ -369,32 +369,36 @@ (append (map path-element->string coll-path) (list base)) "/"))) (define zo-path (build-path dir zo-f)) - (define mod-code (call-with-input-file* - zo-path - (lambda (i) - (parameterize ([read-accept-compiled #t] - [read-on-demand-source zo-path]) - (read i))))) - ;; Recur to cover submodules: - (let loop ([mod-code mod-code]) - (define name (module-compiled-name mod-code)) - (unless (and (list? name) - (memq (last name) build-only-submod-names)) - ;; Check the module's imports: - (for* ([imports (in-list (module-compiled-imports mod-code))] - [import (cdr imports)]) - (define mod (let ([m (collapse-module-path-index import in-mod)]) - (if (and (pair? m) - (eq? (car m) 'submod)) - (cadr m) - m))) - (when (and (pair? mod) (eq? 'lib (car mod))) - (check-mod! mod 'run pkg zo-f dir))) - ;; Recur for submodules: - (for-each loop - (append - (module-compiled-submodules mod-code #t) - (module-compiled-submodules mod-code #f))))))) + (let/ec esc + (define mod-code (with-handlers ([exn:fail? (lambda (exn) + (report-error exn) + (esc (void)))]) + (call-with-input-file* + zo-path + (lambda (i) + (parameterize ([read-accept-compiled #t] + [read-on-demand-source zo-path]) + (read i)))))) + ;; Recur to cover submodules: + (let loop ([mod-code mod-code]) + (define name (module-compiled-name mod-code)) + (unless (and (list? name) + (memq (last name) build-only-submod-names)) + ;; Check the module's imports: + (for* ([imports (in-list (module-compiled-imports mod-code))] + [import (cdr imports)]) + (define mod (let ([m (collapse-module-path-index import in-mod)]) + (if (and (pair? m) + (eq? (car m) 'submod)) + (cadr m) + m))) + (when (and (pair? mod) (eq? 'lib (car mod))) + (check-mod! mod 'run pkg zo-f dir))) + ;; Recur for submodules: + (for-each loop + (append + (module-compiled-submodules mod-code #t) + (module-compiled-submodules mod-code #f)))))))) ;; ---------------------------------------- (define (find-compiled-directories path) diff --git a/racket/collects/setup/setup-core.rkt b/racket/collects/setup/setup-core.rkt index b06026138c..141bddde35 100644 --- a/racket/collects/setup/setup-core.rkt +++ b/racket/collects/setup/setup-core.rkt @@ -2034,6 +2034,9 @@ 'build 'run)))) setup-printf setup-fprintf + (lambda (exn) + (set! exit-code 1) + (setup-printf #f "check failure: ~a" (exn->string exn))) (check-unused-dependencies) (fix-dependencies) (verbose)