From 4c261f4169b9da6b8a04d420422426e5548feac4 Mon Sep 17 00:00:00 2001
From: Ludovic Courtès <ludo@gnu.org>
Date: Wed, 17 Oct 2012 23:17:15 +0200
Subject: utils: Add `find-files'.

* guix/build/utils.scm (find-files): New procedure.
---
 guix/build/utils.scm | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index 741f5201bb..26bdfff1db 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -29,6 +29,8 @@
             with-directory-excursion
             mkdir-p
             copy-recursively
+            find-files
+
             set-path-environment-variable
             search-path-as-string->list
             list->search-path-as-string
@@ -117,6 +119,31 @@
                     #t
                     source))
 
+(define (find-files dir regexp)
+  "Return the list of files under DIR whose basename matches REGEXP."
+  (define file-rx
+    (if (regexp? regexp)
+        regexp
+        (make-regexp regexp)))
+
+  (file-system-fold (const #t)
+                    (lambda (file stat result)    ; leaf
+                      (if (regexp-exec file-rx (basename file))
+                          (cons file result)
+                          result))
+                    (lambda (dir stat result)     ; down
+                      result)
+                    (lambda (dir stat result)     ; up
+                      result)
+                    (lambda (file stat result)    ; skip
+                      result)
+                    (lambda (file stat errno result)
+                      (format (current-error-port) "find-files: ~a: ~a~%"
+                              file (strerror errno))
+                      #f)
+                    '()
+                    dir))
+
 
 ;;;
 ;;; Search paths.
-- 
cgit 1.4.1