guix_mirror_bot pushed a commit to branch python-team in repository guix. commit e8b380e162090d95f0eb2a8b832fb436e766e890 Author: Nicolas Graves <ngra...@ngraves.fr> AuthorDate: Thu Jun 19 09:58:47 2025 +0200
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 <sharlata...@gmail.com> --- guix/build/pyproject-build-system.scm | 51 +++++++++++------------------------ 1 file changed, 15 insertions(+), 36 deletions(-) diff --git a/guix/build/pyproject-build-system.scm b/guix/build/pyproject-build-system.scm index 97fd4862f0..1b66dce99c 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.