aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--distro/packages/base.scm28
-rw-r--r--guix/build/utils.scm29
2 files changed, 30 insertions, 27 deletions
diff --git a/distro/packages/base.scm b/distro/packages/base.scm
index 7fb26881e2..1b3d96a93b 100644
--- a/distro/packages/base.scm
+++ b/distro/packages/base.scm
@@ -2096,33 +2096,7 @@ store.")
`(#:modules ((guix build utils))
#:builder
(let ()
- (use-modules (ice-9 ftw)
- (guix build utils))
-
- (define (copy-recursively source destination)
- ;; Copy SOURCE directory to DESTINATION.
- (with-directory-excursion source
- (file-system-fold (const #t)
- (lambda (file stat result) ; leaf
- (format #t "copying `~s/~s' to `~s'...~%"
- source file destination)
- (copy-file file
- (string-append destination
- "/" file)))
- (lambda (dir stat result) ; down
- (let ((dir (string-append destination
- "/" dir)))
- (unless (file-exists? dir)
- (mkdir dir))))
- (lambda (dir stat result) ; up
- result)
- (const #t) ; skip
- (lambda (file stat errno result)
- (format (current-error-port)
- "i/o error: ~a: ~a~%" file
- (strerror errno)))
- #t
- ".")))
+ (use-modules (guix build utils))
(let ((in (assoc-ref %build-inputs "guile"))
(out (assoc-ref %outputs "out")))
diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index 0543ab48d5..741f5201bb 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -19,6 +19,7 @@
(define-module (guix build utils)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-11)
+ #:use-module (ice-9 ftw)
#:use-module (ice-9 match)
#:use-module (ice-9 regex)
#:use-module (ice-9 rdelim)
@@ -27,6 +28,7 @@
#:export (directory-exists?
with-directory-excursion
mkdir-p
+ copy-recursively
set-path-environment-variable
search-path-as-string->list
list->search-path-as-string
@@ -88,6 +90,33 @@
(apply throw args))))))
(() #t))))
+(define* (copy-recursively source destination
+ #:optional (log (current-output-port)))
+ "Copy SOURCE directory to DESTINATION."
+ (define strip-source
+ (let ((len (string-length source)))
+ (lambda (file)
+ (substring file len))))
+
+ (file-system-fold (const #t) ; enter?
+ (lambda (file stat result) ; leaf
+ (let ((dest (string-append destination
+ (strip-source file))))
+ (format log "`~a' -> `~a'~%" file dest)
+ (copy-file file dest)))
+ (lambda (dir stat result) ; down
+ (mkdir-p (string-append destination
+ (strip-source dir))))
+ (lambda (dir stat result) ; up
+ result)
+ (const #t) ; skip
+ (lambda (file stat errno result)
+ (format (current-error-port) "i/o error: ~a: ~a~%"
+ file (strerror errno))
+ #f)
+ #t
+ source))
+
;;;
;;; Search paths.