~ruther/guix-local

74a1e9d5437371d7eba0da8ead27e289ad966cba — Nicolas Graves 9 months ago e927a07
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>
1 files changed, 15 insertions(+), 36 deletions(-)

M guix/build/pyproject-build-system.scm
M guix/build/pyproject-build-system.scm => guix/build/pyproject-build-system.scm +15 -36
@@ 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.