summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Graves <ngraves@ngraves.fr>2025-06-19 09:58:47 +0200
committerSharlatan Hellseher <sharlatanus@gmail.com>2025-09-25 09:35:34 +0100
commit74a1e9d5437371d7eba0da8ead27e289ad966cba (patch)
tree5bd7298d9dda96c850999eab1978aabbcf340497
parente927a071cd25715deffc83faf5856d256870dc0e (diff)
build-system/pyproject: Use copy-recursively instead of merge-dirs.
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. Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
-rw-r--r--guix/build/pyproject-build-system.scm51
1 files changed, 15 insertions, 36 deletions
diff --git a/guix/build/pyproject-build-system.scm b/guix/build/pyproject-build-system.scm
index 97fd4862f07..1b66dce99c3 100644
--- a/guix/build/pyproject-build-system.scm
+++ b/guix/build/pyproject-build-system.scm
@@ -193,30 +193,6 @@ builder.build_wheel(sys.argv[3], config_settings=config_settings)"
;; 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 @@ builder.build_wheel(sys.argv[3], config_settings=config_settings)"
(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.