~ chicken-core (chicken-5) 57e99ee3ad64173b8ceb99a0957b1ba8ade17aa9
commit 57e99ee3ad64173b8ceb99a0957b1ba8ade17aa9 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Thu Aug 12 06:30:51 2010 -0400 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Thu Aug 12 06:30:51 2010 -0400 added -keep-going option to chicken-install diff --git a/chicken-install.scm b/chicken-install.scm index 22f3eecc..dcedaa7c 100644 --- a/chicken-install.scm +++ b/chicken-install.scm @@ -96,6 +96,7 @@ (define *host-extension* *cross-chicken*) (define *target-extension* *cross-chicken*) (define *debug-setup* #f) + (define *keep-going* #f) (define (get-prefix) (cond ((and *cross-chicken* @@ -423,6 +424,20 @@ #\space (shellpath (make-pathname (cadr e+d+v) (car e+d+v) "setup"))) ) + (define-syntax keep-going + (syntax-rules () + ((_ (name mode) body ...) + (let ((tmp (lambda () body ...))) + (if *keep-going* + (handle-exceptions ex + (begin + (print mode " extension `" name "' failed:") + (print-error-message ex) + (print "\nnevertheless trying to continue ...") + #f) + (tmp)) + (tmp)))))) + (define (install eggs) (retrieve eggs) (unless *retrieve-only* @@ -462,18 +477,23 @@ (lambda (dir) (print "changing current directory to " dir) (parameterize ((current-directory dir)) - (let ((cmd (make-install-command e+d+v (> i 1)))) + (let ((cmd (make-install-command e+d+v (> i 1))) + (name (car e+d+v))) (print " " cmd) - ($system cmd)) - (when (and *run-tests* - (not isdep) - (file-exists? "tests") - (directory? "tests") - (file-exists? "tests/run.scm") ) - (set! *running-test* #t) - (current-directory "tests") - (command "~a -s run.scm ~a ~a" *csi* (car e+d+v) (caddr e+d+v)) - (set! *running-test* #f)))))) + (keep-going + (name "installing") + ($system cmd)) + (when (and *run-tests* + (not isdep) + (file-exists? "tests") + (directory? "tests") + (file-exists? "tests/run.scm") ) + (set! *running-test* #t) + (current-directory "tests") + (keep-going + (name "testing") + (command "~a -s run.scm ~a ~a" *csi* name (caddr e+d+v))) + (set! *running-test* #f))))))) (if (and *target-extension* *host-extension*) (fluid-let ((*deploy* #f) (*prefix* #f)) @@ -586,6 +606,7 @@ usage: chicken-install [OPTION | EXTENSION[:VERSION]] ... -trunk build trunk instead of tagged version (only local) -D -feature FEATURE features to pass to sub-invocations of `csc' -debug enable full display of error message information + -keep-going continue installation even if dependency fails EOF );| (exit code)) @@ -722,6 +743,9 @@ EOF ((string=? "-trunk" arg) (set! *trunk* #t) (loop (cdr args) eggs)) + ((string=? "-keep-going" arg) + (set! *keep-going* #t) + (loop (cdr args) eggs)) ((string=? "-password" arg) (unless (pair? (cdr args)) (usage 1)) (set! *password* (cadr args)) diff --git a/manual/Extensions b/manual/Extensions index d93b684f..83f45cee 100644 --- a/manual/Extensions +++ b/manual/Extensions @@ -600,8 +600,9 @@ Available options: ; {{-u -update-db}} : update export database ; {{-repository}} : print path to extension repository ; {{-deploy}} : install extension in the application directory for a deployed application (see [[Deployment]] for more information) -: {{-D -feature FEATURE}} : pass this on to subinvocations of {{csi}} and {{csc}} (when done via {{compile}} or {{(run (csc ...))}}) -: {{-debug}} : print full call-trace when encountering errors in the setup script +; {{-D -feature FEATURE}} : pass this on to subinvocations of {{csi}} and {{csc}} (when done via {{compile}} or {{(run (csc ...))}}) +; {{-debug}} : print full call-trace when encountering errors in the setup script +; {{-keep-going}} : continue installation, even if a dependency fails {{chicken-install}} recognizes the {{http_proxy}} environment variable, if set.Trap