guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

03/06: gnu: node: Patch shebangs in node_modules.


From: guix-commits
Subject: 03/06: gnu: node: Patch shebangs in node_modules.
Date: Fri, 24 Dec 2021 05:44:19 -0500 (EST)

lilyp pushed a commit to branch master
in repository guix.

commit bcaf6f14a1e32c4a3c7dec1b3e60a5ef541dc944
Author: Philip McGrath <philip@philipmcgrath.com>
AuthorDate: Thu Dec 16 21:02:43 2021 -0500

    gnu: node: Patch shebangs in node_modules.
    
    * gnu/packages/node.scm (node)[arguments]: Replace 'patch-npm-shebang
    and 'patch-node-shebang with a new 'patch-nested-shebangs that also
    handles node-gyp and other shebangs under "/lib/node_modules".
    [inputs]: Add Python for node-gyp as "python-for-target".
    (node-lts)[inputs]: Likewise.
    (libnode)[arguments]: Adjust to delete 'patch-nested-shebangs rather
    than 'patch-npm-shebang and 'patch-node-shebang.
    
    Signed-off-by: Liliana Marie Prikler <liliana.prikler@gmail.com>
---
 gnu/packages/node.scm | 42 +++++++++++++++++++++++++-----------------
 1 file changed, 25 insertions(+), 17 deletions(-)

diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index d433118..3bd98c7 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -105,6 +105,11 @@
        ;; Run only the CI tests.  The default test target requires additional
        ;; add-ons from NPM that are not distributed with the source.
        #:test-target "test-ci-js"
+       #:modules
+       ((guix build gnu-build-system)
+        (guix build utils)
+        (srfi srfi-1)
+        (ice-9 match))
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'patch-hardcoded-program-references
@@ -240,21 +245,23 @@
                             (search-input-file inpts "/bin/python"))))
                       "configure"
                       flags))))
-         (add-after 'patch-shebangs 'patch-npm-shebang
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((bindir (string-append (assoc-ref outputs "out")
-                                           "/bin"))
-                    (npm    (string-append bindir "/npm"))
-                    (target (readlink npm)))
-               (with-directory-excursion bindir
-                 (patch-shebang target (list bindir))))))
-         (add-after 'install 'patch-node-shebang
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((bindir (string-append (assoc-ref outputs "out")
-                                           "/bin"))
-                    (npx    (readlink (string-append bindir "/npx"))))
-               (with-directory-excursion bindir
-                 (patch-shebang npx (list bindir)))))))))
+         (add-after 'patch-shebangs 'patch-nested-shebangs
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; Based on the implementation of patch-shebangs
+             ;; from (guix build gnu-build-system).
+             (let ((path (append-map (match-lambda
+                                       ((_ . dir)
+                                        (list (string-append dir "/bin")
+                                              (string-append dir "/sbin")
+                                              (string-append dir "/libexec"))))
+                                     (append outputs inputs))))
+               (for-each
+                (lambda (file)
+                  (patch-shebang file path))
+                (find-files (search-input-directory outputs "lib/node_modules")
+                            (lambda (file stat)
+                              (executable-file? file))
+                            #:stat lstat))))))))
     (native-inputs
      `(;; Runtime dependencies for binaries used as a bootstrap.
        ("c-ares" ,c-ares)
@@ -283,6 +290,7 @@
            libuv
            `(,nghttp2 "lib")
            openssl
+           python-wrapper ;; for node-gyp (supports python3)
            zlib))
     (synopsis "Evented I/O for V8 JavaScript")
     (description "Node.js is a platform built on Chrome's JavaScript runtime
@@ -802,6 +810,7 @@ source files.")
            brotli
            `(,nghttp2 "lib")
            openssl
+           python-wrapper ;; for node-gyp (supports python3)
            zlib))))
 
 (define-public libnode
@@ -813,5 +822,4 @@ source files.")
         `(cons* "--shared" "--without-npm" ,flags))
        ((#:phases phases '%standard-phases)
         `(modify-phases ,phases
-           (delete 'patch-npm-shebang)
-           (delete 'patch-node-shebang)))))))
+           (delete 'patch-nested-shebangs)))))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]