diff options
author | Philip McGrath <philip@philipmcgrath.com> | 2021-12-16 21:02:43 -0500 |
---|---|---|
committer | Liliana Marie Prikler <liliana.prikler@gmail.com> | 2021-12-24 01:37:45 +0100 |
commit | bcaf6f14a1e32c4a3c7dec1b3e60a5ef541dc944 (patch) | |
tree | e27e7485854ac87e78740fd53e790d4a909da0b6 | |
parent | 3179e32eb994b15ec0d1931aa51d24b35c7318d0 (diff) |
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>
-rw-r--r-- | gnu/packages/node.scm | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm index d433118213..3bd98c715e 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))))))) |