[PATCH] build: pyproject-build-system: Use wrap-script instead of wrap-program.

  • Open
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Maxim Cournoyer
Owner
unassigned
Submitted by
Maxim Cournoyer
Severity
normal
Blocked by

Debbugs page

Maxim Cournoyer wrote 2 years ago
(address . guix-patches@gnu.org)(name . jgart)(address . jgart@dismail.de)(name . Lars-Dominik Braun)(address . lars@6xq.net)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
20230116203711.2214-1-maxim.cournoyer@gmail.com
* guix/build-system/pyproject.scm (default-guile): New procedure.
(lower) Add guile to the host-inputs of the bag.
* guix/build/pyproject-build-system.scm (wrap): Replace wrap-program with
wrap-script. Rename bash-related nested variables/procedure with
guile-related ones.
---

guix/build-system/pyproject.scm | 9 +++++++-
guix/build/pyproject-build-system.scm | 30 ++++++++++++++++++++++++---
2 files changed, 35 insertions(+), 4 deletions(-)

Toggle diff (72 lines)
diff --git a/guix/build-system/pyproject.scm b/guix/build-system/pyproject.scm
index 74d739023f..8b5091c654 100644
--- a/guix/build-system/pyproject.scm
+++ b/guix/build-system/pyproject.scm
@@ -59,6 +59,12 @@ (define (default-python)
(let ((python (resolve-interface '(gnu packages python))))
(module-ref python 'python-toolchain)))
+(define (default-guile)
+ "Return the default Guile used to wrap Python scripts."
+ ;; Lazily resolve the binding to avoid a circular dependency.
+ (let ((guile (resolve-interface '(gnu packages guile))))
+ (module-ref guile 'guile-3.0)))
+
(define sanity-check.py
;; TODO: Merge with sanity-check.py in the next rebuild cycle.
(search-auxiliary-file "python/sanity-check-next.py"))
@@ -88,7 +94,8 @@ (define private-keywords
'())
;; Keep the standard inputs of 'gnu-build-system'.
,@(standard-packages)))
- (host-inputs inputs)
+ (host-inputs (modify-inputs inputs
+ (append (default-guile))))
(target-inputs (if target
(standard-cross-packages target 'target)
'()))
diff --git a/guix/build/pyproject-build-system.scm b/guix/build/pyproject-build-system.scm
index e51b5cfc43..a66c1fb34a 100644
--- a/guix/build/pyproject-build-system.scm
+++ b/guix/build/pyproject-build-system.scm
@@ -445,9 +445,33 @@ (define* (add-install-to-pythonpath #:key native-inputs outputs
"A phase that just wraps the 'add-installed-pythonpath' procedure."
(add-installed-pythonpath native-inputs outputs))
-(define* (wrap #:key native-inputs outputs #:allow-other-keys #:rest args)
- (apply (assoc-ref python:%standard-phases 'wrap)
- (append args (list #:inputs native-inputs))))
+(define* (wrap #:key inputs outputs #:allow-other-keys)
+ (define (list-of-files dir)
+ (find-files dir (lambda (file stat)
+ (and (eq? 'regular (stat:type stat))
+ (not (wrapped-program? file))))))
+
+ (define bindirs
+ (append-map (match-lambda
+ ((_ . dir)
+ (list (string-append dir "/bin")
+ (string-append dir "/sbin"))))
+ outputs))
+
+ ;; Do not require "guile" to be present in the package inputs
+ ;; even when there is nothing to wrap.
+ ;; Also, calculate (guile) only once to prevent some I/O.
+ (define %guile (delay (search-input-file inputs "bin/guile")))
+ (define (guile) (force %guile))
+
+ (let* ((var `("GUIX_PYTHONPATH" prefix
+ ,(search-path-as-string->list
+ (or (getenv "GUIX_PYTHONPATH") "")))))
+ (for-each (lambda (dir)
+ (let ((files (list-of-files dir)))
+ (for-each (cut wrap-script <> #:guile (guile) var)
+ files)))
+ bindirs)))
(define* (rename-pth-file #:key name native-inputs outputs #:allow-other-keys
#:rest args)

base-commit: 6c2d3eb8aef45381961ad4e8cf0d03ccbf2bbd64
--
2.38.1
Maxim Cournoyer wrote 2 years ago
control message for bug #60868
(address . control@debbugs.gnu.org)
874jsp2mae.fsf@gmail.com
block 60868 by 60849
quit
Maxim Cournoyer wrote 2 years ago
Re: bug#60868: [PATCH] build: pyproject-build-system: Use wrap-script instead of wrap-program.
(address . 60868@debbugs.gnu.org)(name . Lars-Dominik Braun)(address . lars@6xq.net)(name . jgart)(address . jgart@dismail.de)
87zgah17mb.fsf@gmail.com
Hello,

Just a note to mention that this is currently based on #60849 (I've just
marked it as such in Debbugs by making it blocked by it), so if you want
to apply it, you'll want to apply #60849 first.

--
Thanks,
Maxim
Maxim Cournoyer wrote 2 years ago
[PATCH v2] build: pyproject-build-system: Use wrap-script instead of wrap-program.
(address . 60868@debbugs.gnu.org)(name . jgart)(address . jgart@dismail.de)(address . ludo@gnu.org)(name . Lars-Dominik Braun)(address . lars@6xq.net)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
20230123133354.1345-1-maxim.cournoyer@gmail.com
* guix/build-system/pyproject.scm (default-guile): New procedure.
(lower) Add guile to the host-inputs of the bag.
* guix/build/pyproject-build-system.scm (wrap): Replace wrap-program with
wrap-script. Rename bash-related nested variables/procedure with
guile-related ones.

---

Changes in v2:
- Rebase

guix/build-system/pyproject.scm | 9 +++++++-
guix/build/pyproject-build-system.scm | 30 ++++++++++++++++++++++++---
2 files changed, 35 insertions(+), 4 deletions(-)

Toggle diff (72 lines)
diff --git a/guix/build-system/pyproject.scm b/guix/build-system/pyproject.scm
index 74d739023f..8b5091c654 100644
--- a/guix/build-system/pyproject.scm
+++ b/guix/build-system/pyproject.scm
@@ -59,6 +59,12 @@ (define (default-python)
(let ((python (resolve-interface '(gnu packages python))))
(module-ref python 'python-toolchain)))
+(define (default-guile)
+ "Return the default Guile used to wrap Python scripts."
+ ;; Lazily resolve the binding to avoid a circular dependency.
+ (let ((guile (resolve-interface '(gnu packages guile))))
+ (module-ref guile 'guile-3.0)))
+
(define sanity-check.py
;; TODO: Merge with sanity-check.py in the next rebuild cycle.
(search-auxiliary-file "python/sanity-check-next.py"))
@@ -88,7 +94,8 @@ (define private-keywords
'())
;; Keep the standard inputs of 'gnu-build-system'.
,@(standard-packages)))
- (host-inputs inputs)
+ (host-inputs (modify-inputs inputs
+ (append (default-guile))))
(target-inputs (if target
(standard-cross-packages target 'target)
'()))
diff --git a/guix/build/pyproject-build-system.scm b/guix/build/pyproject-build-system.scm
index e51b5cfc43..a66c1fb34a 100644
--- a/guix/build/pyproject-build-system.scm
+++ b/guix/build/pyproject-build-system.scm
@@ -445,9 +445,33 @@ (define* (add-install-to-pythonpath #:key native-inputs outputs
"A phase that just wraps the 'add-installed-pythonpath' procedure."
(add-installed-pythonpath native-inputs outputs))
-(define* (wrap #:key native-inputs outputs #:allow-other-keys #:rest args)
- (apply (assoc-ref python:%standard-phases 'wrap)
- (append args (list #:inputs native-inputs))))
+(define* (wrap #:key inputs outputs #:allow-other-keys)
+ (define (list-of-files dir)
+ (find-files dir (lambda (file stat)
+ (and (eq? 'regular (stat:type stat))
+ (not (wrapped-program? file))))))
+
+ (define bindirs
+ (append-map (match-lambda
+ ((_ . dir)
+ (list (string-append dir "/bin")
+ (string-append dir "/sbin"))))
+ outputs))
+
+ ;; Do not require "guile" to be present in the package inputs
+ ;; even when there is nothing to wrap.
+ ;; Also, calculate (guile) only once to prevent some I/O.
+ (define %guile (delay (search-input-file inputs "bin/guile")))
+ (define (guile) (force %guile))
+
+ (let* ((var `("GUIX_PYTHONPATH" prefix
+ ,(search-path-as-string->list
+ (or (getenv "GUIX_PYTHONPATH") "")))))
+ (for-each (lambda (dir)
+ (let ((files (list-of-files dir)))
+ (for-each (cut wrap-script <> #:guile (guile) var)
+ files)))
+ bindirs)))
(define* (rename-pth-file #:key name native-inputs outputs #:allow-other-keys
#:rest args)

base-commit: 67458b9793d69c7d10c7d885edd5d1ce5a2e9648
--
2.39.1
Ludovic Courtès wrote 2 years ago
(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)(name . jgart)(address . jgart@dismail.de)(address . 60868@debbugs.gnu.org)(name . Lars-Dominik Braun)(address . lars@6xq.net)
87y1pswcg4.fsf@gnu.org
Hello!

Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:

Toggle quote (6 lines)
> * guix/build-system/pyproject.scm (default-guile): New procedure.
> (lower) Add guile to the host-inputs of the bag.
> * guix/build/pyproject-build-system.scm (wrap): Replace wrap-program with
> wrap-script. Rename bash-related nested variables/procedure with
> guile-related ones.

I had overlooked this patch before, sorry about that.

Toggle quote (3 lines)
> + (host-inputs (modify-inputs inputs
> + (append (default-guile))))

Maybe add a comment stating it’s for ‘wrap-script’.

Toggle quote (7 lines)
> + (define bindirs
> + (append-map (match-lambda
> + ((_ . dir)
> + (list (string-append dir "/bin")
> + (string-append dir "/sbin"))))
> + outputs))

Should it include “libexec”?

Toggle quote (6 lines)
> + ;; Do not require "guile" to be present in the package inputs
> + ;; even when there is nothing to wrap.
> + ;; Also, calculate (guile) only once to prevent some I/O.
> + (define %guile (delay (search-input-file inputs "bin/guile")))
> + (define (guile) (force %guile))

Aaah, got it. :-)

LGTM, thanks!

Ludo’.
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 60868@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 60868
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch
You may also tag this issue. See list of standard tags. For example, to set the confirmed and easy tags
mumi command -t +confirmed -t +easy
Or, remove the moreinfo tag and set the help tag
mumi command -t -moreinfo -t +help