andreas pushed a commit to branch master
in repository guix.

commit 7cc5ddf7633a0f74f1454a5724038689a1677d5d
Author: Nicolas Graves <ngra...@ngraves.fr>
AuthorDate: Tue Feb 18 00:43:54 2025 +0100

    build-system/node: Add guile-json extension.
    
    * guix/build-system/node.scm (default-guile-json): New variable.
    (node-build): Use guile-json extension.
    
    Signed-off-by: Jelle Licht <jli...@fsfe.org>
    Change-Id: I68eb291410fc4943395c876ba702360b4cd7be4f
---
 guix/build-system/node.scm | 38 +++++++++++++++++++++++---------------
 1 file changed, 23 insertions(+), 15 deletions(-)

diff --git a/guix/build-system/node.scm b/guix/build-system/node.scm
index 425b8cd9b3..cde0ccb60e 100644
--- a/guix/build-system/node.scm
+++ b/guix/build-system/node.scm
@@ -80,6 +80,12 @@
          (build node-build)
          (arguments (strip-keyword-arguments private-keywords arguments)))))
 
+(define (default-guile-json)
+  "Return the default guile-json package."
+  ;; Lazily resolve the binding to avoid a circular dependency.
+  (let ((mod (resolve-interface '(gnu packages guile))))
+    (module-ref mod 'guile-json-4)))
+
 (define* (node-build name inputs
                      #:key
                      source
@@ -91,26 +97,28 @@
                      (search-paths '())
                      (system (%current-system))
                      (guile #f)
+                     (guile-json (default-guile-json))
                      (imported-modules %node-build-system-modules)
                      (modules '((guix build node-build-system)
                                 (guix build utils))))
   "Build SOURCE using NODE and INPUTS."
   (define builder
-    (with-imported-modules imported-modules
-      #~(begin
-          (use-modules #$@(sexp->gexp modules))
-          (node-build #:name #$name
-                      #:source #+source
-                      #:system #$system
-                      #:npm-flags #$npm-flags
-                      #:test-target #$test-target
-                      #:tests? #$tests?
-                      #:phases #$phases
-                      #:outputs #$(outputs->gexp outputs)
-                      #:search-paths '#$(sexp->gexp
-                                         (map search-path-specification->sexp
-                                              search-paths))
-                      #:inputs #$(input-tuples->gexp inputs)))))
+    (with-extensions (list guile-json)
+      (with-imported-modules imported-modules
+        #~(begin
+            (use-modules #$@(sexp->gexp modules))
+            (node-build #:name #$name
+                        #:source #+source
+                        #:system #$system
+                        #:npm-flags #$npm-flags
+                        #:test-target #$test-target
+                        #:tests? #$tests?
+                        #:phases #$phases
+                        #:outputs #$(outputs->gexp outputs)
+                        #:search-paths '#$(sexp->gexp
+                                           (map search-path-specification->sexp
+                                                search-paths))
+                        #:inputs #$(input-tuples->gexp inputs))))))
 
   (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
                                                   system #:graft? #f)))

Reply via email to