~ chicken-core (chicken-5) e07470995153c8aead1daaab42f9f69bb2312432
commit e07470995153c8aead1daaab42f9f69bb2312432
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Tue Feb 23 23:15:23 2010 +0100
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Tue Feb 23 23:15:23 2010 +0100
fixes and enhancements for mini-salmonella; -prefix for chicken-install may be relative; platform meta prop.
diff --git a/chicken-install.scm b/chicken-install.scm
index 933a44e2..cbe90004 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -283,6 +283,8 @@
(let ([mfile (make-pathname (cadr e+d+v) (car e+d+v) "meta")])
(cond [(file-exists? mfile)
(let ([meta (with-input-from-file mfile read)])
+ (print "checking platform for `" (car e+d+v) "' ...")
+ (check-platform (car e+d+v) meta)
(print "checking dependencies for `" (car e+d+v) "' ...")
(let-values ([(missing upgrade) (outdated-dependencies meta)])
(set! missing (apply-mappings missing)) ;XXX only missing - wrong?
@@ -318,6 +320,24 @@
"- assuming it has no dependencies")) ] ) ) ) )
*eggs+dirs+vers*) ) )
+ (define (check-platform name meta)
+ (define (fail)
+ (error "extension is not targeted for this system" name))
+ (unless (feature? #:cross-chicken)
+ (and-let* ((platform (assq 'platform meta)))
+ (let loop ((p (cadr platform)))
+ (cond ((symbol? p)
+ (or (feature? p) (fail)))
+ ((not (list? p))
+ (error "invalid `platform' property" name (cadr 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 (cadr platform))))))))
+
(define (make-install-command e+d+v dep?)
(conc
*csi*
@@ -531,7 +551,12 @@ EOF
(loop (cddr args) eggs))
((or (string=? arg "-p") (string=? arg "-prefix"))
(unless (pair? (cdr args)) (usage 1))
- (set! *prefix* (cadr args))
+ (set! *prefix*
+ (let ((p (cadr args)))
+ (if (absolute-pathname? p)
+ p
+ (normalize-pathname
+ (make-pathname (current-directory) p) ) ) ) )
(loop (cddr args) eggs))
((or (string=? arg "-n") (string=? arg "-no-install"))
(set! *keep* #t)
diff --git a/files.scm b/files.scm
index ea9adec6..b87df181 100644
--- a/files.scm
+++ b/files.scm
@@ -172,6 +172,7 @@
(define absolute-pathname-root)
(define root-origin)
(define root-directory)
+
(let ((string-match string-match))
(if ##sys#windows-platform
(let ((rx (regexp "([A-Za-z]:)?([\\/\\\\]).*")))
diff --git a/scripts/mini-salmonella.scm b/scripts/mini-salmonella.scm
index 486c5e12..568bd5f6 100644
--- a/scripts/mini-salmonella.scm
+++ b/scripts/mini-salmonella.scm
@@ -7,22 +7,26 @@
(use posix files extras data-structures srfi-1 setup-api srfi-13 utils)
(define (usage code)
- (print "usage: mini-salmonella [-h] [-t] [-d] [-f] EGGDIR [PREFIX]")
+ (print "usage: mini-salmonella [-h] [-test] [-debug] [-download] [-trunk] EGGDIR [PREFIX]")
(exit code) )
(define *eggdir* #f)
(define *debug* #f)
-(define *prefix* (pathname-directory (pathname-directory (repository-path))))
(define *run-tests* #f)
(define *download* #f)
+(define *trunk* #f)
+
+(define *prefix*
+ (pathname-directory (pathname-directory (pathname-directory (repository-path)))))
(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))
- ((string=? "-f" arg) (set! *download* #t))
+ ((string=? "-test" arg) (set! *run-tests* #t))
+ ((string=? "-debug" arg) (set! *debug* #t))
+ ((string=? "-download" arg) (set! *download* #t))
+ ((string=? "-trunk" arg) (set! *trunk* #t))
(*eggdir* (set! *prefix* arg))
(else (set! *eggdir* arg)))
(loop (cdr args)))))
@@ -51,12 +55,13 @@
(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))))
+ (cond ((and *trunk* trunkdir) trunkdir)
+ (tagsdir
+ (let ((tags (sort (directory tagsdir) version>=?)))
+ (if (null? tags)
+ (or trunkdir ed)
+ (make-pathname ed (string-append "tags/" (first tags))))))
+ (else ed))))
(define (report egg msg . args)
(printf "~a..~?~%" (make-string (max 2 (- 32 (string-length egg))) #\.)
@@ -86,7 +91,7 @@
(if *run-tests* "-test" "")
(if *download*
""
- (string-append "-l " (normalize-pathname *eggdir*)))
+ (string-append "-t local -l " (normalize-pathname *eggdir*)))
egg
(if (not *debug*)
(sprintf "2>~a >>~a.out" *tmplogfile* *logfile*)
Trap