~ chicken-core (chicken-5) c48a109d668f3186bb4a213940c0b0b81a1ad03d
commit c48a109d668f3186bb4a213940c0b0b81a1ad03d Author: felix <felix@call-with-current-continuation.org> AuthorDate: Tue Jun 5 11:17:08 2012 +0200 Commit: Peter Bex <peter.bex@xs4all.nl> CommitDate: Tue Jun 12 20:05:20 2012 +0200 copy directories on installation recursively Signed-off-by: Peter Bex <peter.bex@xs4all.nl> diff --git a/setup-api.scm b/setup-api.scm index f42de41d..50ab4842 100644 --- a/setup-api.scm +++ b/setup-api.scm @@ -501,8 +501,17 @@ to-path (make-pathname prefix to-path) ) to-path)))) - (ensure-directory to) - (run (,*copy-command* ,(shellpath from) ,(shellpath to))) + (let walk ((from from) (to to)) + (cond ((directory? from) + (for-each + (lambda (f) + (walk (make-pathname from f) (make-pathname to f))) + (directory from))) + (else + (ensure-directory to) + (run (,*copy-command* + ,(shellpath from) + ,(shellpath to)))))) to)) (define (path-prefix? pref path) @@ -615,7 +624,7 @@ (when (setup-install-mode) (let* ((files (check-filelist (if (list? files) files (list files)))) (pre (installation-prefix)) - (ppath (ensure-directory (make-pathname pre "bin"))) + (ppath (ensure-directory (make-pathname pre "bin") #t)) (files (if *windows* (map (lambda (f) (if (list? f) @@ -637,7 +646,7 @@ (when (setup-install-mode) (let* ((files (check-filelist (if (list? files) files (list files)))) (pre (installation-prefix)) - (ppath (ensure-directory (make-pathname pre "bin"))) + (ppath (ensure-directory (make-pathname pre "bin") #t)) (pfiles (map (lambda (f) (let ((from (if (pair? f) (car f) f)) (to (make-dest-pathname ppath f)) ) @@ -664,11 +673,11 @@ (sprintf "lib/chicken/~a" (##sys#fudge 42))) (repository-path)))) ; otherwise use repo-path (repository-path))) ) - (ensure-directory p) + (ensure-directory p #t) p) ) -(define (ensure-directory path) - (and-let* ((dir (pathname-directory path))) +(define (ensure-directory path #!optional full) + (and-let* ((dir (if full path (pathname-directory path)))) (if (file-exists? dir) (unless (directory? dir) (error "cannot create directory: a file with the same name already exists") )Trap