~ chicken-core (chicken-5) 47e78e1ea6b0b32065a60ce441645d67a4b6e495


commit 47e78e1ea6b0b32065a60ce441645d67a4b6e495
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Thu Jan 7 12:52:54 2010 +0100
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Thu Jan 7 12:52:54 2010 +0100

    added mini eggtest script; fixed silly bug in chicken-install that forgot to check for -no-install

diff --git a/chicken-install.scm b/chicken-install.scm
index 9d30369c..3f25c96a 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -322,10 +322,11 @@
 	   (when (and (not depinstall-ok)
 		      (= i 1)
 		      (> num 1))
-	     (unless (yes-or-no?
-		      (string-append
-		       "You specified `-no-install', but this extension has dependencies"
-		       " that are required for building. Do you still want to install them?"))
+	     (when (and *no-install*
+			(yes-or-no?
+			 (string-append
+			  "You specified `-no-install', but this extension has dependencies"
+			  " that are required for building. Do you still want to install them?")))
 	       (print "aborting installation.")
 	       (cleanup)
 	       (exit 1)))
diff --git a/patches/finalizer-closures.diff b/patches/finalizer-closures.diff
deleted file mode 100644
index 963d3bd1..00000000
--- a/patches/finalizer-closures.diff
+++ /dev/null
@@ -1,55 +0,0 @@
-Index: runtime.c
-===================================================================
---- runtime.c	(Revision 12825)
-+++ runtime.c	(Revision 12869)
-@@ -2701,10 +2701,15 @@
-     /* Mark collectibles: */
-     for(msp = collectibles; msp < collectibles_top; ++msp)
-       if(*msp != NULL) mark(*msp);
--    
-+
-+    /* mark GC roots: */
-     for(gcrp = gc_root_list; gcrp != NULL; gcrp = gcrp->next)
-       mark(&gcrp->value);
- 
-+    /* mark finalizer procedures: */
-+    for(flist = finalizer_list; flist != NULL; flist = flist->next) 
-+      mark(&flist->finalizer);
-+
-     mark_system_globals();
-   }
-   else {
-@@ -2769,7 +2774,6 @@
- 
- 	for(flist = finalizer_list; flist != NULL; flist = flist->next) {
- 	  mark(&flist->item);
--	  mark(&flist->finalizer);
- 	  ++fcount;
- 	}
- 
-@@ -2786,7 +2790,6 @@
- 	  }
- 
- 	  mark(&flist->item);
--	  mark(&flist->finalizer);
- 	}
-       }
- 
-@@ -2794,7 +2797,7 @@
-       finalizers_checked = 1;
- 
-       if(pending_finalizer_count > 0 && gc_report_flag)
--	C_printf(C_text("[GC] finalizers pending for rescan:\t %d (%d live)\n"), 
-+	C_printf(C_text("[GC] finalizers pending: %d (%d live)\n"), 
- 		 pending_finalizer_count, live_finalizer_count);
- 
-       goto rescan;
-@@ -2803,7 +2806,7 @@
-       /* Copy finalized items with remembered indices into `##sys#pending-finalizers' 
- 	 (and release finalizer node): */
-       if(pending_finalizer_count > 0) {
--	if(gc_report_flag) C_printf(C_text("[GC] queueing %d finalizers\n"), pending_finalizer_count);
-+	if(gc_report_flag) C_printf(C_text("[GC] finalizers queued: %d\n"), pending_finalizer_count);
- 
- 	last = C_block_item(pending_finalizers_symbol, 0);
- 	assert(C_u_i_car(last) == C_fix(0));
diff --git a/patches/finalizer-exceptions.diff b/patches/finalizer-exceptions.diff
deleted file mode 100644
index ef07c8b7..00000000
--- a/patches/finalizer-exceptions.diff
+++ /dev/null
@@ -1,26 +0,0 @@
-Index: library.scm
-===================================================================
-@@ -4250,6 +4257,7 @@
- (define ##sys#run-pending-finalizers
-  (let ([vector-fill! vector-fill!]
-       [print print]
-+       [with-exception-handler with-exception-handler]
-       [working #f] )
-    (lambda (state)
-      (unless working
-@@ -4262,8 +4270,13 @@
-         (do ([i 0 (fx+ i 1)])
-             ((fx>= i c))
-           (let ([i2 (fx+ 1 (fx* i 2))])
--             ((##sys#slot ##sys#pending-finalizers (fx+ i2 1))
--              (##sys#slot ##sys#pending-finalizers i2)) ) )
-+             (##sys#call-with-current-continuation
-+              (lambda (ret)
-+                (with-exception-handler
-+                 ret
-+                 (lambda ()
-+                   ((##sys#slot ##sys#pending-finalizers (fx+ i2 1))
-+                    (##sys#slot ##sys#pending-finalizers i2)))))) ) )
-         (vector-fill! ##sys#pending-finalizers (##core#undefined))
-         (##sys#setislot ##sys#pending-finalizers 0 0)
-         (set! working #f) ) )
diff --git a/patches/record-rename.diff b/patches/record-rename.diff
deleted file mode 100644
index ce98e287..00000000
--- a/patches/record-rename.diff
+++ /dev/null
@@ -1,54 +0,0 @@
-Index: chicken-syntax.scm
-===================================================================
---- chicken-syntax.scm	(revision 13204)
-+++ chicken-syntax.scm	(working copy)
-@@ -46,8 +46,11 @@
-   (lambda (x r c)
-     (##sys#check-syntax 'define-record x '(_ symbol . #(symbol 0)))
-     (let* ((name (cadr x))
-+	   (prefix (symbol->string name))
-+	   (name (if (##sys#current-module)
-+		     (##sys#module-rename name (##sys#module-name (##sys#current-module)))
-+		     name))
- 	   (slots (cddr x))
--	   (prefix (symbol->string name))
- 	   (setters (memq #:record-setters ##sys#features))
- 	   (%begin (r 'begin))
- 	   (%define (r 'define))
-@@ -807,11 +810,21 @@
- 	      'define-record-printer (cons head body)
- 	      '((symbol symbol symbol) . #(_ 1)))
- 	     `(##sys#register-record-printer 
--	       ',(##sys#slot head 0)
-+	       ',(if (##sys#current-module)
-+		     (##sys#module-rename (##sys#slot head 0)
-+					  (##sys#module-name
-+					   (##sys#current-module)))
-+		     (##sys#slot head 0))
- 	       (,(r 'lambda) ,(##sys#slot head 1) ,@body)) ]
- 	    [else
- 	     (##sys#check-syntax 'define-record-printer (cons head body) '(symbol _))
--	     `(##sys#register-record-printer ',head ,@body) ] ) ))))
-+	     `(##sys#register-record-printer
-+               ',(if (##sys#current-module)
-+                     (##sys#module-rename head
-+                                          (##sys#module-name
-+                                           (##sys#current-module)))
-+                     head)
-+               ,@body) ] ) ))))
- 
- 
- ;;; Exceptions:
-@@ -874,7 +887,11 @@
-  (##sys#er-transformer
-   (lambda (form r c)
-     (##sys#check-syntax 'define-record-type form '(_ variable #(variable 1) variable . _)) 
--    (let* ((t (cadr form))
-+    (let* ((t (if (##sys#current-module)
-+		     (##sys#module-rename (cadr form)
-+					  (##sys#module-name
-+					   (##sys#current-module)))
-+		     (cadr form)))
- 	  (conser (caddr form))
- 	  (pred (cadddr form))
- 	  (slots (cddddr form))
diff --git a/scripts/mini-salmonella.scm b/scripts/mini-salmonella.scm
new file mode 100644
index 00000000..ae21fe50
--- /dev/null
+++ b/scripts/mini-salmonella.scm
@@ -0,0 +1,89 @@
+;;;; mini-salmonella.scm - very simple tool to build all eggs
+;
+; usage: csi -s mini-salmonella.scm EGGDIR [PREFIX]
+
+
+(module mini-salmonella ()
+
+(import scheme chicken)
+(use posix files extras data-structures srfi-1 setup-api srfi-13 utils)
+
+(define (usage code)
+  (print "usage: mini-salmonella 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 *binary-version* (##sys#fudge 42))
+(define *repository* (make-pathname *prefix* (conc "lib/chicken/" *binary-version*)))
+(define *snapshot* (directory *repository*))
+
+(define (cleanup-repository)
+  (for-each 
+   (lambda (f)
+     (delete-file (make-pathname *repository* f)))
+   (lset-difference string=? (directory *repository*) *snapshot*)))
+
+(define *chicken-install*
+  (normalize-pathname (make-pathname *prefix* "bin/chicken-install")))
+
+(define *eggs* (directory *eggdir*))
+
+(define (find-newest egg)
+  (let* ((ed (make-pathname *eggdir* egg))
+	 (tagsdir (directory-exists? (make-pathname ed "tags")))
+	 (trunkdir (directory-exists? (make-pathname ed "trunk"))))
+    (if tagsdir
+	(let ((tags (sort (directory tagsdir) version>=?)))
+	  (if (null? tags)
+	      (or trunkdir ed)
+	      (make-pathname ed (string-append "tags/" (first tags)))))
+	(or trunkdir ed))))
+
+(define (report egg msg . args)
+  (printf "~a..~?~%" (make-string (max 2 (- 32 (string-length egg))) #\.)
+	  msg args) )
+
+(define *logfile* "mini-salmonella.log")
+(define *tmplogfile* "mini-salmonella.tmp.log")
+
+(on-exit (lambda () (delete-file* *tmplogfile*)))
+
+(define (copy-log file)
+  (let ((log (read-all file)))
+    (with-output-to-file *logfile*
+      (cut display log)
+      #:append)))
+
+(define (install-egg egg dir)
+  (let ((status
+	 (system
+	  (sprintf "~a -force -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*)))))
+
+(for-each
+ (lambda (egg)
+   (and-let* ((dir (find-newest egg)))
+     (print* egg)
+     (cleanup-repository)
+     (let ((meta (file-exists? (make-pathname dir egg "meta"))))
+       (if meta
+	   (let ((setup (file-exists? (make-pathname dir egg "setup"))))
+	     (if setup
+		 (install-egg egg dir)
+		 (report egg "<no .setup script>")) )
+	   (report egg "<no .meta file>")))))
+ (directory *eggdir*))
+
+)
Trap