~ chicken-core (chicken-5) cc4f64bc510789e44daabffb45985c37882e493f
commit cc4f64bc510789e44daabffb45985c37882e493f Author: Peter Bex <peter@more-magic.net> AuthorDate: Sun Aug 12 20:17:31 2018 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Sun Aug 12 21:34:11 2018 +0200 Fix behaviour of complex (platform) clauses in .egg files Something like (platform (and unix)) would always fail even on UNIX, as would (platform (or haiku unix)), and (platform (or (unix haiku))) would succeed on UNIX but fail on Haiku. Signed-off-by: felix <felix@call-with-current-continuation.org> diff --git a/chicken-install.scm b/chicken-install.scm index 14e07262..80048dfa 100644 --- a/chicken-install.scm +++ b/chicken-install.scm @@ -716,22 +716,21 @@ (else #f))) (define (check-platform name info) - (define (fail) - (error "extension is not targeted for this system" name)) (unless cross-chicken (and-let* ((platform (get-egg-property info 'platform))) - (let loop ((p platform)) - (cond ((symbol? p) - (or (feature? p) (fail))) - ((not (list? p)) - (error "invalid `platform' property" name platform)) - ((and (eq? 'not (car p)) (pair? (cdr p))) - (and (not (loop (cadr p))) (fail))) - ((eq? 'and (car p)) - (and (every loop (cdr p)) (fail))) - ((eq? 'or (car p)) - (and (not (any loop (cdr p))) (fail))) - (else (error "invalid `platform' property" name platform))))))) + (or (let loop ((p platform)) + (cond ((symbol? p) + (feature? p)) + ((not (list? p)) + (error "invalid `platform' property" name platform)) + ((and (eq? 'not (car p)) (pair? (cdr p))) + (not (loop (cadr p)))) + ((eq? 'and (car p)) + (every loop (cdr p))) + ((eq? 'or (car p)) + (any loop (cdr p))) + (else (error "invalid `platform' property" name platform)))) + (error "extension is not targeted for this system" name))))) (define (replace-extension-question e+d+v upgrade) (print (string-intersperseTrap