~ chicken-core (chicken-5) 51d1aa599fed5c3aa72031edfaaf1d395c1e25a9
commit 51d1aa599fed5c3aa72031edfaaf1d395c1e25a9 Author: felix <bunny351@gmail.com> AuthorDate: Mon Jun 7 15:43:41 2010 +0200 Commit: felix <bunny351@gmail.com> CommitDate: Mon Jun 7 15:43:41 2010 +0200 double-install appears to work somewhat diff --git a/chicken-install.scm b/chicken-install.scm index ccdfb74f..6d996581 100644 --- a/chicken-install.scm +++ b/chicken-install.scm @@ -70,6 +70,7 @@ (define *keep* #f) (define *force* #f) (define *host-extension* #f) + (define *target-extension* #f) ; means: target too? (define *run-tests* #f) (define *retrieve-only* #f) (define *no-install* #f) @@ -89,9 +90,10 @@ (define *csc-nonfeatures* '()) (define *prefix* #f) (define *aliases* '()) + (define *cross-chicken* (feature? #:cross-chicken)) (define (get-prefix) - (cond ((and (feature? #:cross-chicken) + (cond ((and *cross-chicken* (not *host-extension*)) (or *prefix* (foreign-value "C_TARGET_PREFIX" c-string))) @@ -360,7 +362,7 @@ (define (check-platform name meta) (define (fail) (error "extension is not targeted for this system" name)) - (unless (feature? #:cross-chicken) + (unless *cross-chicken* (and-let* ((platform (assq 'platform meta))) (let loop ((p (cadr platform))) (cond ((symbol? p) @@ -379,7 +381,7 @@ (conc *csi* " -bnq " - (if (and (feature? #:cross-chicken) ; disable -setup-mode when cross-compiling, + (if (and *cross-chicken* ; disable -setup-mode when cross-compiling, (not *host-extension*)) ; host-repo must always take precedence "" "-setup-mode ") @@ -428,20 +430,38 @@ (cleanup) (exit 1))) (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 1)))) - (print " " cmd) - ($system cmd)) - (when (and *run-tests* - (not isdep) - (file-exists? "tests") - (directory? "tests") - (file-exists? "tests/run.scm") ) - (set! *running-test* #t) - (current-directory "tests") - (command "~a -s run.scm ~a" *csi* (car e+d+v)) - (set! *running-test* #f))))) + (let ((tmpcopy (and *target-extension* + *host-extension* + (create-temporary-directory))) + (eggdir (cadr e+d+v))) + (when tmpcopy + (print "copying sources for target installation") + (command + "~a ~a ~a" + (if *windows-shell* "xcopy" "cp -r") + (make-pathname eggdir "*") + tmpcopy)) + (let ((setup + (lambda (dir) + (print "changing current directory to " dir) + (parameterize ((current-directory dir)) + (let ((cmd (make-install-command e+d+v (> i 1)))) + (print " " cmd) + ($system cmd)) + (when (and *run-tests* + (not isdep) + (file-exists? "tests") + (directory? "tests") + (file-exists? "tests/run.scm") ) + (set! *running-test* #t) + (current-directory "tests") + (command "~a -s run.scm ~a ~a" *csi* (car e+d+v) (caddr e+d+v)) + (set! *running-test* #f)))))) + (setup eggdir) + (when (and *target-extension* *host-extension*) + (print "installing for target ...") + (fluid-let ((*host-extension* #f)) + (setup tmpcopy))))))) (map (cut assoc <> *eggs+dirs+vers*) dag) (iota num num -1))))) @@ -534,6 +554,7 @@ usage: chicken-install [OPTION | EXTENSION[:VERSION]] ... -n -no-install do not install, just build (implies `-keep') -p -prefix PREFIX change installation prefix to PREFIX -host when cross-compiling, compile extension for host + -target when cross-compiling, compile extension for target (default) -test run included test-cases, if available -username USER set username for transports that require this -password PASS set password for transports that require this @@ -655,6 +676,11 @@ EOF ((string=? "-host" arg) (set! *host-extension* #t) (loop (cdr args) eggs)) + ((string=? "-target" arg) + (unless *cross-chicken* + (error "`-target' option is only valid for a cross-compilation setup")) + (set! *target-extension* #t) + (loop (cdr args) eggs)) ((string=? "-deploy" arg) (set! *deploy* #t) (loop (cdr args) eggs))Trap