~ chicken-core (chicken-5) 6305fbc8f38b9445752e144b5a7b6003e0006219


commit 6305fbc8f38b9445752e144b5a7b6003e0006219
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Thu Nov 3 10:10:06 2016 +0100
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Thu Nov 3 10:10:06 2016 +0100

    bugfix in server checking loop, added running tests.

diff --git a/chicken-install.scm b/chicken-install.scm
index 0a6c11c7..49647d77 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -349,6 +349,8 @@
     (cond ((null? locs)
            (let ((tmpdir (create-temporary-directory)))
              (let loop ((srvs default-servers))
+               (when (null? srvs) 
+                 (error "extension or version not found"))
                (receive (dir ver)
                  (try-download name (resolve-location (car srvs))
                                version: version 
@@ -365,7 +367,6 @@
                              (cut write ver)))
                          (with-output-to-file (make-pathname dest +timestamp-file+)
                            (cut write (current-seconds))))
-                       ((null? srvs) (error "extension or version not found"))
                        (else (loop (cdr srvs))))))))
           ((probe-dir (make-pathname (car locs) name))
            => (lambda (dir)
@@ -641,8 +642,9 @@
               (generate-shell-commands platform install iscript dir
                                        (install-prefix 'host name info)
                                        (install-suffix 'host name info))
-              (run-script dir bscript platform #f)
-              (run-script dir iscript platform sudo-install))))
+              (run-script dir bscript platform)
+              (run-script dir iscript platform sudo: sudo-install)
+              (when run-tests (test-egg egg platform)))))
         (when target-extension
           (let-values (((build install info) (compile-egg-info info platform 'target)))
             (let ((bscript (make-pathname dir name 
@@ -656,20 +658,41 @@
               (generate-shell-commands platform install iscript dir
                                        (install-prefix 'target name info)
                                        (install-suffix 'target name info))
-              (run-script dir bscript platform #f)
-              (run-script dir iscript platform #f))))))
+              (run-script dir bscript platform)
+              (run-script dir iscript platform))))))
     canonical-eggs))
 
-(define (run-script dir script platform sudo?)
-  (if do-not-build
-      (print script)
-      (let ((old (current-directory)))
-        (change-directory dir)
-        (d "running script ~a~%" script)
-        (if (eq? platform 'windows)
-            (exec script)
-            (exec (string-append (if sudo? "sudo " "") "sh " script)))
-        (change-directory old))))
+(define (test-egg egg platform)
+  (let* ((name (car egg))
+         (dir (cadr egg))
+         (version (caddr egg))
+         (testdir (make-pathname dir "tests"))
+         (tscript (make-pathname testdir "run.scm")))
+    (when (and (file-exists? testdir)
+               (directory? testdir)
+               (file-exists? tscript))
+      (let ((old (current-directory))
+            (cmd (string-append default-csi " -s " tscript " " name " " (or version ""))))
+        (change-directory testdir)
+        (let ((r (system cmd)))
+          (d "running: ~a~%" cmd)
+          (unless (zero? r)
+            (print "test script failed with nonzero exit status")))
+        (change-directory old)))))
+
+(define (run-script dir script platform #!key sudo (stop #t))
+  (cond (do-not-build
+          (print script)
+          #t)
+        (else
+          (let ((old (current-directory)))
+            (change-directory dir)
+            (d "running script ~a~%" script)
+            (let ((r (if (eq? platform 'windows)
+                         (exec script stop)
+                         (exec (string-append (if sudo "sudo " "") "sh " script) stop))))
+              (change-directory old)
+              r)))))
 
 (define (write-info name info mode)
   (d "writing info for egg ~a~%" name info)
@@ -677,11 +700,13 @@
     (when (eq? platform 'unix)
       (exec (string-append "chmod a+r " (quotearg infofile))))))
 
-(define (exec cmd)
+(define (exec cmd #!optional (stop #t))
   (d "executing: ~s~%" cmd)
   (let ((r (system cmd)))
-    (unless (zero? r)
-      (error "shell command terminated with nonzero exit code" r cmd))))
+    (if (and stop (not (zero? r)))
+        (error "shell command terminated with nonzero exit code" r cmd)
+        (print "shell command terminated with nonzero exit code " r ": " cmd))
+    r))
 
 
 ;;; update module-db
Trap