~ chicken-core (chicken-5) 01d34ab52c2b3409d844366b82fdc29f691760fe
commit 01d34ab52c2b3409d844366b82fdc29f691760fe Author: felix <felix@call-with-current-continuation.org> AuthorDate: Sun Oct 2 19:30:44 2016 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Sun Oct 2 19:30:44 2016 +0200 output tweaks in chicken-install, explicit recursive download, some bugfixes, remove programs and shared libraries before overwriting diff --git a/chicken-install.scm b/chicken-install.scm index da118d21..686a0df3 100644 --- a/chicken-install.scm +++ b/chicken-install.scm @@ -69,6 +69,7 @@ (define proxy-port #f) (define proxy-user-pass #f) (define retrieve-only #f) +(define retrieve-recursive #f) (define do-not-build #f) (define list-versions-only #f) (define canonical-eggs '()) @@ -80,6 +81,7 @@ (define target-extension cross-chicken) (define sudo-install #f) (define update-module-db #f) +(define purge-mode #f) (define platform (if (eq? 'mingw (build-platform)) @@ -142,11 +144,14 @@ (string=? suffix (substring s (- len-s len-suffix)))))) -(define (d fstr . args) - (unless quiet - (let ((port (current-error-port))) - (apply fprintf port fstr args) - (flush-output port) ) )) +(define (d flag . args) + (let ((flag (and (not (string? flag)) flag)) + (fstr (if (string? flag) flag (car args))) + (args (if (string? flag) args (cdr args)))) + (when (or flag (not quiet)) + (let ((port (current-error-port))) + (apply fprintf port fstr args) + (flush-output port) ) ))) (define (version>=? v1 v2) (define (version->list v) @@ -302,10 +307,12 @@ (create-directory cache-directory)) (cond ((or (not (probe-dir cached)) (not (file-exists? eggfile))) + (d "~a not cached~%" name) (fetch)) ((and (file-exists? status) (not (equal? current-status (with-input-from-file status read)))) + (d "status changed for ~a~%" name) (fetch))) (let* ((info (load-egg-info eggfile)) (lversion (get-egg-property info 'version))) @@ -313,6 +320,7 @@ (> (- now (with-input-from-file timestamp read)) +one-hour+) (not (check-remote-version name version (and lversion lversion)))) + (d "version of ~a out of date~%" name) (fetch) (let ((info (load-egg-info eggfile))) ; new egg info (fetched) (values cached (get-egg-property info 'version)))) @@ -397,18 +405,18 @@ (lambda (a) ;; push to front (set! canonical-eggs (cons a (delete a canonical-eggs eq?))))) - (else + (else (let ((name (if (pair? egg) (car egg) egg)) (version (override-version egg))) (let-values (((dir ver) (locate-egg name version))) (when (or (not dir) (null? (directory dir))) (error "extension or version not found")) - (d " ~a located at ~a~%" egg dir) + (d retrieve-only "~a located at ~a~%" egg dir) (set! canonical-eggs (cons (list name dir ver) canonical-eggs))))))) eggs) - (unless retrieve-only + (when (or (not retrieve-only) retrieve-recursive) (for-each (lambda (e+d+v) (unless (member (car e+d+v) checked-eggs) @@ -597,7 +605,8 @@ (or (and versions (begin (printf "~a:" name) - (for-each (cut printf " ~a" <>) versions))) + (for-each (cut printf " ~a" <>) versions) + (newline))) (loop2 (cdr srvs)))))) (loop1 (cdr eggs))))))) @@ -710,21 +719,41 @@ (file-copy dbfile (make-pathname (repo-path) +module-db+) #t)))) +;; purge cache for given (or all) eggs + +(define (purge-cache eggs) + (cond ((null? eggs) + (d "purging complete cache at ~a~%" cache-directory) + (delete-directory cache-directory #t)) + (else + (for-each + (lambda (egg) + (let* ((name (if (pair? egg) (car egg) egg)) + (dname (make-pathname cache-directory name))) + (when (file-exists? dname) + (d "purging ~a from cache at ~a~%" name dname) + (delete-directory dname #t)))) + eggs)))) + + ;; command line parsing and selection of operations (define (perform-actions eggs) (load-defaults) (cond (update-module-db (update-db)) + (purge-mode (purge-cache eggs)) ((null? eggs) - (set! canonical-eggs - (map (lambda (fname) - (list (pathname-file fname) (current-directory) #f)) - (glob "*.egg"))) - (retrieve-eggs '()) - (unless retrieve-only (install-eggs))) + (cond (list-versions-only (print "no eggs specified")) + (else + (set! canonical-eggs + (map (lambda (fname) + (list (pathname-file fname) (current-directory) #f)) + (glob "*.egg"))) + (retrieve-eggs '()) + (unless retrieve-only (install-eggs))))) (else (let ((eggs (apply-mappings eggs))) - (cond (list-versions-only (list-egg-versions eggs)) + (cond (list-versions-only (list-egg-versions eggs))) ;;XXX other actions... (else (retrieve-eggs eggs) @@ -743,9 +772,17 @@ ((equal? arg "-test") (set! run-tests #t) (loop (cdr args))) - ((member arg '("-r" "-retrieve")) + ((equal? arg "-r") + (if retrieve-only + (set! retrieve-recursive #t) + (set! retrieve-only #t)) + (loop (cdr args))) + ((equal? arg "-retrieve") (set! retrieve-only #t) (loop (cdr args))) + ((equal? arg "-recursive") + (set! retrieve-recursive #t) + (loop (cdr args))) ((equal? arg "-list-versions") (set! list-versions-only #t) (loop (cdr args))) @@ -773,6 +810,9 @@ ((member arg '("-s" "-sudo")) (set! sudo-install #t) (loop (cdr args))) + ((equal? arg "-purge") + (set! purge-mode #t) + (loop (cdr args))) ;;XXX diff --git a/egg-compile.scm b/egg-compile.scm index 8e5ebd32..0ae8fdf3 100644 --- a/egg-compile.scm +++ b/egg-compile.scm @@ -48,6 +48,11 @@ ((unix) "install -m644") ((windows) "xcopy /y"))) +(define (remove-file-command platform) + (case platform + ((unix) "rm -f") + ((windows) "del /f /q"))) + (define (uses-compiled-import-library? mode) (not (and (eq? mode 'host) staticbuild))) @@ -373,30 +378,24 @@ (print cmd " " out " " ddir (quotearg (slashify (conc dest "/" name ext) platform))))) -(define (gen-install-dynamic-extension name #!key platform mode srcdir) +(define (gen-install-dynamic-extension name #!key platform mode srcdir (ext ".so")) (let* ((cmd (install-executable-command platform)) + (dcmd (remove-file-command platform)) (mkdir (mkdir-command platform)) (sname (prefix srcdir name)) - (out (quotearg (target-file (conc sname ".so") mode))) - (ext (object-extension platform)) + (out (quotearg (target-file (conc sname ext) mode))) (dest (destination-repository mode)) (dfile (quotearg (slashify dest platform))) - (ddir (shell-variable "DESTDIR" platform))) + (ddir (shell-variable "DESTDIR" platform)) + (destf (quotearg (slashify (conc dest "/" name ext) platform)))) (print "\n" mkdir " " ddir dfile) - (print cmd " " out " " ddir - (quotearg (slashify (conc dest "/" name ".so") platform))))) + (when (eq? platform 'unix) + (print dcmd " " ddir destf)) + (print cmd " " out " " ddir destf))) (define (gen-install-import-library name #!key platform mode srcdir) - (let* ((cmd (install-executable-command platform)) - (mkdir (mkdir-command platform)) - (sname (prefix srcdir name)) - (out (quotearg (target-file (conc sname ".import.so") mode))) - (dest (destination-repository mode)) - (dfile (quotearg (slashify dest platform))) - (ddir (shell-variable "DESTDIR" platform))) - (print "\n" mkdir " " ddir dfile) - (print cmd " " out " " ddir - (quotearg (slashify (conc dest "/" name ".import.so") platform))))) + (gen-install-dynamic-extension name platform: platform mode: mode srcdir: srcdir + ext: ".import.so")) (define (gen-install-import-library-source name #!key platform mode srcdir) (let* ((cmd (install-executable-command platform)) @@ -412,16 +411,19 @@ (define (gen-install-program name #!key platform mode srcdir) (let* ((cmd (install-executable-command platform)) + (dcmd (remove-file-command platform)) (mkdir (mkdir-command platform)) (ext (executable-extension platform)) (sname (prefix srcdir name)) (out (quotearg (target-file (conc sname ext) mode))) (dest (if (eq? mode 'target) target-bindir host-bindir)) (dfile (quotearg (slashify dest platform))) - (ddir (shell-variable "DESTDIR" platform))) + (ddir (shell-variable "DESTDIR" platform)) + (destf (quotearg (slashify (conc dest "/" name ext) platform)))) (print "\n" mkdir " " ddir dfile) - (print cmd " " out " " ddir - (quotearg (slashify (conc dest "/" name ext) platform))))) + (when (eq? platform 'unix) + (print dcmd " " ddir destf)) + (print cmd " " out " " ddir destf))) (define (gen-install-data name #!key platform files destination mode srcdir) (let* ((cmd (install-file-command platform)) @@ -432,10 +434,10 @@ (print "\n" mkdir " " ddir dfile) (print cmd (arglist (map (cut prefix srcdir <>) files)) " " ddir dfile))) -(define (gen-install-c-include name #!key platform deps files dest mode srcdir) +(define (gen-install-c-include name #!key platform deps files destination mode srcdir) (let* ((cmd (install-file-command platform)) (mkdir (mkdir-command platform)) - (dest (or dest (if (eq? mode 'target) target-incdir host-incdir))) + (dest (or destination (if (eq? mode 'target) target-incdir host-incdir))) (dfile (quotearg (slashify dest platform))) (ddir (shell-variable "DESTDIR" platform))) (print "\n" mkdir " " ddir dfile)Trap