~ chicken-core (chicken-5) 53b0d1ef97e6f02d6c0799a792623c7cc2b18b0b


commit 53b0d1ef97e6f02d6c0799a792623c7cc2b18b0b
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Wed Feb 17 07:39:43 2010 +0100
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Wed Feb 17 07:39:43 2010 +0100

    new setup.defaults format and egg mappings

diff --git a/chicken-install.scm b/chicken-install.scm
index c6b2f92a..ac83f403 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -83,16 +83,37 @@
   (define *proxy-host* #f)
   (define *proxy-port* #f)
   (define *running-test* #f)
+  (define *mappings* '())
 
   (define-constant +module-db+ "modules.db")
   (define-constant +defaults-file+ "setup.defaults")
 
   (define (load-defaults)
-    (let ([deff (make-pathname (chicken-home) +defaults-file+)])
-      (cond [(not (file-exists? deff))
-             '() ]
-            [else
-             (set! *default-sources* (read-file deff))
+    (let ((deff (make-pathname (chicken-home) +defaults-file+)))
+      (define (broken x)
+	(error "invalid entry in defaults file" deff x))
+      (cond ((not (file-exists? deff)) '())
+            (else
+	     (for-each
+	      (lambda (x)
+		(unless (and (list? x) (positive? (length x)))
+		  (broken x))
+		(case (car x)
+		  ((server)
+		   (set! *default-sources* 
+		     (append *default-sources* (list (cdr x)))))
+		  ((map)
+		   (set! *mappings*
+		     (append
+		      *mappings*
+		      (map (lambda (m)
+			     (let ((p (list-index (cut eq? '-> <>) m)))
+			       (unless p (broken x))
+			       (let-values (((from to) (split-at m p)))
+				 (cons from to))))
+			   (cdr x)))))
+		  (else (broken x))))
+	      (read-file deff)))
              (pair? *default-sources*) ] ) ) )
 
   (define (known-default-sources)
@@ -117,7 +138,7 @@
       (print "copying required files to " dir " ...")
       (for-each
        (lambda (f)
-         ($system (sprintf "~a ~a ~a" copy (shellpath (make-pathname src f)) (shellpath dir))))
+         (command "~a ~a ~a" copy (shellpath (make-pathname src f)) (shellpath dir)))
        +default-repository-files+)))
 
   (define (ext-version x)
@@ -338,7 +359,7 @@
 	   (print "installing " (car e+d+v) #\: (caddr e+d+v) " ...")
 	   (print "changing current directory to " (cadr e+d+v))
 	   (parameterize ((current-directory (cadr e+d+v)))
-	     (let ([cmd (make-install-command e+d+v (< i num))])
+	     (let ((cmd (make-install-command e+d+v (< i num))))
 	       (print "  " cmd)
 	       ($system cmd))
 	     (when (and *run-tests*
@@ -347,9 +368,7 @@
 			(file-exists? "tests/run.scm") )
 	       (set! *running-test* #t)
 	       (current-directory "tests")
-	       (let ((cmd (sprintf "~a -s run.scm ~a" *csi* (car e+d+v))))
-		 (print "  " cmd)
-		 ($system cmd))
+	       (command "~a -s run.scm ~a" *csi* (car e+d+v))
 	       (set! *running-test* #f))))
 	 (map (cut assoc <> *eggs+dirs+vers*) dag)
 	 (iota num 1)))))
@@ -397,6 +416,15 @@
         (copy-file dbfile (make-pathname (repository-path) +module-db+))
         (remove-directory tmpdir))))
 
+  (define (apply-mappings eggs)
+    (delete-duplicates
+     (append-map
+      (lambda (egg)
+	(cond ((find (lambda (m) (member egg (car m))) *mappings*) => cdr)
+	      (else '())) )
+      eggs)
+     string=?))
+
   (define ($system str)
     (let ((r (system
               (if *windows-shell*
@@ -405,6 +433,11 @@
       (unless (zero? r)
         (error "shell command terminated with nonzero exit code" r str))))
 
+  (define (command fstr . args)
+    (let ((cmd (apply sprintf fstr args)))
+      (print "  " cmd)
+      ($system cmd)))
+
   (define (usage code)
     (print #<<EOF
 usage: chicken-install [OPTION | EXTENSION[:VERSION]] ...
@@ -436,7 +469,7 @@ EOF
   (define (main args)
     (let ((defaults (load-defaults))
           (update #f)
-          (rx "([^:]+):(.+)"))
+          (rx (regexp "([^:]+):(.+)")))
       (let loop ((args args) (eggs '()))
         (cond ((null? args)
                (cond (update (update-db))
@@ -458,7 +491,7 @@ EOF
                           (error "no default transport defined - please use `-transport' option"))
                         (unless *default-location*
                           (error "no default location defined - please use `-location' option")))
-                      (install (reverse eggs)))))
+                      (install (apply-mappings (reverse eggs))))))
               (else
                (let ((arg (car args)))
                  (cond ((or (string=? arg "-help")
diff --git a/setup.defaults b/setup.defaults
index cfcecd11..3aff8131 100644
--- a/setup.defaults
+++ b/setup.defaults
@@ -1,8 +1,13 @@
 ;;;; setup.defaults - defaults for chicken-install -*- Scheme -*-
 
-((location "http://chicken.kitten-technologies.co.uk/henrietta.cgi")
+(server
+ (location "http://chicken.kitten-technologies.co.uk/henrietta.cgi")
  (transport http))
 
-((location "http://galinha.ucpel.tche.br/cgi-bin/henrietta")
+(server
+ (location "http://galinha.ucpel.tche.br/cgi-bin/henrietta")
  (transport http))
 
+(map 
+ (regex-case defstruct -> test)
+ (trace -> tabexpand))
Trap