[bug#78828,1/8] build-system/pyproject: Use copy-recursively instead of merge-dirs.
Commit Message
Using rename-file, the destination had to be empty otherwise it would error
out. This has been fixed by the use of copy-recursively, really merging them.
Changing this makes merge-directories mostly a duplicate of
copy-recursively, thus fully switch to copy-recursively.
* guix/build/pyproject-build-system.scm (install)
<python-hashbang>: Remove it, used only once.
<merge-directories>: Remove it, replace its calls by copy-recursively
and delete-file-recursively.
---
guix/build/pyproject-build-system.scm | 51 ++++++++-------------------
1 file changed, 15 insertions(+), 36 deletions(-)
@@ -193,30 +193,6 @@ (define (extract file)
;; Use Python’s zipfile to avoid extra dependency
(invoke "python" "-m" "zipfile" "-e" file site-dir))
- (define python-hashbang
- (string-append "#!" python "/bin/python"))
-
- (define* (merge-directories source destination
- #:optional (post-move #f))
- "Move all files in SOURCE into DESTINATION, merging the two directories."
- (format #t "Merging directory ~a into ~a~%" source destination)
- (for-each (lambda (file)
- (format #t "~a/~a -> ~a/~a~%"
- source file destination file)
- (mkdir-p destination)
- ;; Use 'copy-recursively' rather than 'rename-file' to guard
- ;; against the odd case where DESTINATION is a non-empty
- ;; directory, which may happen when using hybrid Python
- ;; build systems.
- (copy-recursively (string-append source "/" file)
- (string-append destination "/" file))
- (delete-file-recursively (string-append source "/" file))
- (when post-move
- (post-move file)))
- (scandir source
- (negate (cut member <> '("." "..")))))
- (rmdir source))
-
(define (expand-data-directory directory)
"Move files from all .data subdirectories to their respective\ndestinations."
;; Python’s distutils.command.install defines this mapping from source to
@@ -224,29 +200,32 @@ (define (expand-data-directory directory)
(let ((source (string-append directory "/scripts"))
(destination (string-append out "/bin")))
(when (file-exists? source)
- (merge-directories source destination
- (lambda (f)
- (let ((dest-path (string-append destination
- "/" f)))
- (chmod dest-path #o755)
- ;; PEP 427 recommends that installers rewrite
- ;; this odd shebang.
- (substitute* dest-path
- (("#!python")
- python-hashbang)))))))
+ (copy-recursively source destination)
+ (delete-file-recursively source)
+ (for-each
+ (lambda (file)
+ (chmod file #o755)
+ ;; PEP 427 recommends that installers rewrite
+ ;; this odd shebang.
+ (substitute* file
+ (("#!python")
+ (string-append "#!" python "/bin/python"))))
+ (find-files destination))))
;; Data can be contained in arbitrary directory structures. Most
;; commonly it is used for share/.
(let ((source (string-append directory "/data"))
(destination out))
(when (file-exists? source)
- (merge-directories source destination)))
+ (copy-recursively source destination)
+ (delete-file-recursively source)))
(let* ((distribution (car (string-split (basename directory) #\-)))
(source (string-append directory "/headers"))
(destination (string-append out "/include/python"
(python-version python)
"/" distribution)))
(when (file-exists? source)
- (merge-directories source destination))))
+ (copy-recursively source destination)
+ (delete-file-recursively source))))
(define (list-directories base predicate)
;; Cannot use find-files here, because it’s recursive.