~ chicken-core (chicken-5) be8c0e001ade616355517d4dc59c6fc7438c5e3d
commit be8c0e001ade616355517d4dc59c6fc7438c5e3d
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Thu Jan 7 14:19:01 2010 +0100
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Thu Jan 7 14:19:01 2010 +0100
mini-salmonella tweaks; added entry in README
diff --git a/scripts/README b/scripts/README
index 62902f41..33318671 100644
--- a/scripts/README
+++ b/scripts/README
@@ -32,3 +32,10 @@ This directory contains a couple of things that might be useful:
A CGI script and sub-program that serves eggs from a local tree
or via svn over HTTP.
+
+ mini-salmonella.scm
+
+ A minimalistic version of `salmonella', the egg-test tool. It
+ takes a path to a local checkout of the extensions repository
+ and compiles each egg from scratch, reporting success or
+ failure.
diff --git a/scripts/mini-salmonella.scm b/scripts/mini-salmonella.scm
index 2ed58e54..120ff670 100644
--- a/scripts/mini-salmonella.scm
+++ b/scripts/mini-salmonella.scm
@@ -9,14 +9,25 @@
(use posix files extras data-structures srfi-1 setup-api srfi-13 utils)
(define (usage code)
- (print "usage: mini-salmonella EGGDIR [PREFIX]")
+ (print "usage: mini-salmonella [-h] [-t] [-d] EGGDIR [PREFIX]")
(exit code) )
-(define-values (*eggdir* *prefix*)
- (let-optionals (command-line-arguments)
- ((eggdir (usage 1))
- (prefix (pathname-directory (pathname-directory (repository-path)))))
- (values eggdir prefix)))
+(define *eggdir* #f)
+(define *debug* #f)
+(define *prefix* (pathname-directory (pathname-directory (repository-path))))
+(define *run-tests* #f)
+
+(let loop ((args (command-line-arguments)))
+ (when (pair? args)
+ (let ((arg (car args)))
+ (cond ((string=? "-h" arg) (usage 0))
+ ((string=? "-t" arg) (set! *run-tests* #t))
+ ((string=? "-d" arg) (set! *debug* #t))
+ (*eggdir* (set! *prefix* arg))
+ (else (set! *eggdir* arg)))
+ (loop (cdr args)))))
+
+(unless *eggdir* (usage 1))
(define *binary-version* (##sys#fudge 42))
(define *repository* (make-pathname *prefix* (conc "lib/chicken/" *binary-version*)))
@@ -25,7 +36,10 @@
(define (cleanup-repository)
(for-each
(lambda (f)
- (delete-file (make-pathname *repository* f)))
+ (let ((f2 (make-pathname *repository* f)))
+ (if (directory? f2)
+ (remove-directory f2)
+ (delete-file f2))))
(lset-difference string=? (directory *repository*) *snapshot*)))
(define *chicken-install*
@@ -48,29 +62,40 @@
(printf "~a..~?~%" (make-string (max 2 (- 32 (string-length egg))) #\.)
msg args) )
+(define *errlogfile* "mini-salmonella.errors.log")
(define *logfile* "mini-salmonella.log")
(define *tmplogfile* "mini-salmonella.tmp.log")
(on-exit (lambda () (delete-file* *tmplogfile*)))
-(define (copy-log file)
+(define (copy-log egg file)
(let ((log (read-all file)))
- (with-output-to-file *logfile*
- (cut display log)
+ (with-output-to-file *errlogfile*
+ (lambda ()
+ (print #\newline egg #\:)
+ (display log))
#:append)))
(define (install-egg egg dir)
- (let ((status
- (system
- (sprintf "~a -t local -l ~a ~a ";2>~a >nul:"
- *chicken-install*
- (normalize-pathname *eggdir*)
- egg
- *tmplogfile*))))
- (cond ((zero? status) (report egg "OK"))
- (else
- (report egg "FAILED")
- (copy-log *tmplogfile*)))))
+ (let ((command
+ (sprintf "~a ~a -t local -l ~a ~a ~a"
+ *chicken-install*
+ (if *run-tests* "-test" "")
+ (normalize-pathname *eggdir*)
+ egg
+ (if (not *debug*)
+ (sprintf "2>~a >>~a.out" *tmplogfile* *logfile*)
+ ""))))
+ (when *debug*
+ (print " " command))
+ (let ((status (system command)))
+ (cond ((zero? status) (report egg "OK"))
+ (else
+ (report egg "FAILED")
+ (copy-log egg *tmplogfile*))))))
+
+(delete-file* *errlogfile*)
+(delete-file* *logfile*)
(for-each
(lambda (egg)
Trap