[PATCH 00/13] node going forward

DoneSubmitted by Jelle Licht.
Details
6 participants
  • Efraim Flashner
  • Jelle Licht
  • Lars-Dominik Braun
  • Lars-Dominik Braun
  • Léo Le Bouter
  • Timothy Sample
Owner
unassigned
Severity
normal
J
J
Jelle Licht wrote on 20 Mar 15:57 +0100
(address . guix-patches@gnu.org)
20210320145706.12308-1-jlicht@fsfe.org
So, some people seem to be interested in this one; please review and test.
Thanks again to Timothy Sample, who made quite some of these things happen.
Jelle Licht (13): build-system: Rewrite node build system. gnu: Add libuv-node gnu: node: Use license prefix. gnu: node: Add node-bootstrap. gnu: node: Add node-semver-bootstrap. gnu: node: Add node-ms-bootstrap. gnu: node: Add node-binary-search-bootstrap. gnu: node: Add node-debug-bootstrap. gnu: node: Add node-llparse-builder-bootstrap. gnu: node: Add node-llparse-frontend-bootstrap. gnu: node: Add node-llparse-bootstrap. gnu: node: Add llhttp-bootstrap. gnu: node: Add node-lts
gnu/packages/libevent.scm | 16 + gnu/packages/node-xyz.scm | 74 +++-- gnu/packages/node.scm | 547 ++++++++++++++++++++++++++++++- guix/build-system/node.scm | 39 +-- guix/build/node-build-system.scm | 203 ++++++------ 5 files changed, 720 insertions(+), 159 deletions(-)
-- 2.31.0
J
J
Jelle Licht wrote on 20 Mar 15:59 +0100
[PATCH 02/13] gnu: Add libuv-node
(address . 47282@debbugs.gnu.org)
20210320145925.12500-2-jlicht@fsfe.org
* gnu/packages/libevent.scm (libuv-node): New variable.--- gnu/packages/libevent.scm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
Toggle diff (29 lines)diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scmindex 7109d9a88d..699d0705dd 100644--- a/gnu/packages/libevent.scm+++ b/gnu/packages/libevent.scm@@ -134,6 +134,22 @@ resolution, asynchronous file system operations, and threading primitives.") ;; details. Documentation is CC-BY 4.0 as of 1.12.0; see 'LICENSE-docs'. (license (list expat cc-by4.0)))) +(define-public libuv-node+ ;; When upgrading Node, also upgrade this. Get the version from+ ;; https://github.com/nodejs/node/blob/master/deps/uv/include/uv/version.h+ (package+ (inherit libuv)+ (name "libuv-node")+ (version "1.40.0")+ (source (origin+ (method url-fetch)+ (uri (string-append "https://dist.libuv.org/dist/v" version+ "/libuv-v" version ".tar.gz"))+ (sha256+ (base32+ "1551k3ab27vbg9517l9b4iqbramwxdkwgpf53knas05cbfwhvab1"))))))++ (define-public perl-anyevent (package (name "perl-anyevent")-- 2.31.0
J
J
Jelle Licht wrote on 20 Mar 15:59 +0100
[PATCH 01/13] build-system: Rewrite node build system.
(address . 47282@debbugs.gnu.org)(name . Timothy Sample)(address . samplet@ngyro.com)
20210320145925.12500-1-jlicht@fsfe.org
* guix/build/node-build-system.scm: Rewrite it.* guix/build-system/node.scm: Adjust accordingly.* gnu/packages/node-xyz.scm (node-color-name, node-env-variable, node-far,node-long-stack-traces, node-mersenne, node-oop, node-stack-trace,node-statsd-parser, node-utils-deprecate, node-semver): Likewise.
Co-authored-by: Timothy Sample <samplet@ngyro.com>--- gnu/packages/node-xyz.scm | 74 +++++++---- guix/build-system/node.scm | 37 ++---- guix/build/node-build-system.scm | 203 ++++++++++++++----------------- 3 files changed, 158 insertions(+), 156 deletions(-)
Toggle diff (491 lines)diff --git a/gnu/packages/node-xyz.scm b/gnu/packages/node-xyz.scmindex b1d6d4ce59..7d7f0251d1 100644--- a/gnu/packages/node-xyz.scm+++ b/gnu/packages/node-xyz.scm@@ -38,6 +38,11 @@ (base32 "09rbmj16nfwcwkhrybqxyy66bkrs50vpw6hkdqqb14l3gsyxpr74")))) (build-system node-build-system)+ (arguments+ `(#:phases+ (modify-phases+ %standard-phases+ (delete 'build)))) (home-page "https://github.com/colorjs/color-name") (synopsis "JSON with CSS color names") (description@@ -59,7 +64,11 @@ (base32 "0nnpxjxfhy4na7fixb7p3ww6ard5xgggfm83b78i333867r4gmsq")))) (build-system node-build-system)- (arguments '(#:tests? #f)) ; No tests.+ (arguments '(#:tests? #f ; No tests.+ #:phases+ (modify-phases+ %standard-phases+ (delete 'build)))) (home-page "https://github.com/bigpipe/env-variable") (synopsis "Environment variables for Node with fallbacks") (description "This package provides environment variables with@@ -85,6 +94,7 @@ (arguments '(#:phases (modify-phases %standard-phases+ (delete 'build) (replace 'check (lambda _ ;; We skip the two tests which are supposed to fail.@@ -113,7 +123,10 @@ codes.") (base32 "0famwsyc6xawi30v25zi65d8fhbvlvh976bqydf1dqn5gz200cl3")))) (build-system node-build-system)- (arguments '(#:tests? #f)) ; No tests.+ (arguments '(#:tests? #f ; No tests.+ #:phases+ (modify-phases %standard-phases+ (delete 'build)))) (home-page "https://github.com/tlrobinson/long-stack-traces") (synopsis "Long stacktraces implemented in user-land JavaScript") (description "This package provides long stacktraces for V8 implemented in@@ -136,7 +149,10 @@ user-land JavaScript.") (base32 "034iaiq2pdqn342p2404cpz364g282d2hkp9375hysnh9i968wbb")))) (build-system node-build-system)- (arguments '(#:tests? #f)) ; No tests.+ (arguments '(#:tests? #f ; No tests.+ #:phases+ (modify-phases %standard-phases+ (delete 'build)))) (home-page "http://www.enchantedage.com/node-mersenne") (synopsis "Node.js module for generating Mersenne Twister random numbers") (description "Thix package provides a node.js port of the Mersenne Twister@@ -161,7 +177,11 @@ random number generator.") (base32 "0mqrcf0xi2jbwffwkk00cljpqfsri1jk8s6kz8jny45apn7zjds1")))) (build-system node-build-system)- (arguments '(#:tests? #f)) ; Tests run during build phase.+ (arguments '(#:tests? #f ; Tests run during build phase.+ #:phases+ (modify-phases+ %standard-phases+ (delete 'build)))) (home-page "https://github.com/felixge/node-oop") (synopsis "Simple, light-weight oop module for Node") (description "This library tries to bring basic oop features to JavaScript@@ -189,11 +209,12 @@ while being as light-weight and simple as possible.") (arguments '(#:phases (modify-phases %standard-phases- (add-before 'check 'skip-intentionally-failing-test- (lambda _- (substitute* "test/run.js"- (("far.include") "far.exclude(/test-parse.js/)\nfar.include"))- #t)))))+ (delete 'build)+ (add-before 'check 'skip-intentionally-failing-test+ (lambda _+ (substitute* "test/run.js"+ (("far.include") "far.exclude(/test-parse.js/)\nfar.include"))+ #t))))) (native-inputs `(("node-far" ,node-far) ("node-long-stack-traces" ,node-long-stack-traces)))@@ -207,17 +228,20 @@ while being as light-weight and simple as possible.") (name "node-statsd-parser") (version "0.0.4") (source- (origin- (method git-fetch)- (uri (git-reference- (url "https://github.com/dscape/statsd-parser")- (commit version)))- (file-name (git-file-name name version))- (sha256- (base32- "049rnczsd6pv6bk282q4w72bhqc5cs562djgr7yncy7lk0wzq5j3"))))+ (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/dscape/statsd-parser")+ (commit version)))+ (file-name (git-file-name name version))+ (sha256+ (base32+ "049rnczsd6pv6bk282q4w72bhqc5cs562djgr7yncy7lk0wzq5j3")))) (build-system node-build-system)- (arguments '(#:tests? #f)) ; No tests.+ (arguments '(#:tests? #f ; No tests.+ #:phases+ (modify-phases %standard-phases+ (delete 'build)))) (home-page "https://github.com/dscape/statsd-parser") (synopsis "Streaming parser for the statsd protocol") (description "This package provides a streaming parser for the statsd@@ -239,7 +263,10 @@ protocol used in @code{node-lynx}.") (base32 "1rk94nl3qc7znsk8400bnga30v0m7j2mmvz9ldwjinxv1d3n11xc")))) (build-system node-build-system)- (arguments '(#:tests? #f)) ; No test suite.+ (arguments '(#:tests? #f ; No tests.+ #:phases+ (modify-phases %standard-phases+ (delete 'build)))) (home-page "https://github.com/TooTallNate/util-deprecate") (synopsis "Node.js `util.deprecate()` function with browser support") (description "This package provides the Node.js @code{util.deprecate()}@@ -261,7 +288,12 @@ function with browser support.") "06biknqb05r9xsmcflm3ygh50pjvdk84x6r79w43kmck4fn3qn5p")))) (build-system node-build-system) (arguments- `(#:tests? #f)) ;; FIXME: Tests depend on node-tap+ '(#:tests? #f+ #:phases+ (modify-phases+ %standard-phases+ (delete 'configure)+ (delete 'build)))) ;; FIXME: Tests depend on node-tap (home-page "https://github.com/npm/node-semver") (synopsis "Parses semantic versions strings") (descriptiondiff --git a/guix/build-system/node.scm b/guix/build-system/node.scmindex 05c24c47d5..560f0ee4da 100644--- a/guix/build-system/node.scm+++ b/guix/build-system/node.scm@@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org>+;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com> ;;; ;;; This file is part of GNU Guix. ;;;@@ -17,32 +18,22 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (guix build-system node)- #:use-module (guix store)- #:use-module (guix build json)- #:use-module (guix build union)- #:use-module (guix utils)- #:use-module (guix packages)- #:use-module (guix derivations)- #:use-module (guix search-paths) #:use-module (guix build-system) #:use-module (guix build-system gnu)+ #:use-module (guix derivations)+ #:use-module (guix packages)+ #:use-module (guix search-paths)+ #:use-module (guix utils) #:use-module (ice-9 match)- #:export (npm-meta-uri- %node-build-system-modules+ #:export (%node-build-system-modules node-build node-build-system)) -(define (npm-meta-uri name)- "Return a URI string for the metadata of node module NAME found in the npm-registry."- (string-append "https://registry.npmjs.org/" name))- (define %node-build-system-modules ;; Build-side modules imported by default. `((guix build node-build-system) (guix build json)- (guix build union)- ,@%gnu-build-system-modules)) ;; TODO: Might be not needed+ ,@%gnu-build-system-modules)) (define (default-node) "Return the default Node package."@@ -78,7 +69,7 @@ registry." (define* (node-build store name inputs #:key- (npm-flags ''())+ (test-target "test") (tests? #t) (phases '(@ (guix build node-build-system) %standard-phases))@@ -88,8 +79,6 @@ registry." (guile #f) (imported-modules %node-build-system-modules) (modules '((guix build node-build-system)- (guix build json)- (guix build union) (guix build utils)))) "Build SOURCE using NODE and INPUTS." (define builder@@ -99,12 +88,10 @@ registry." #:source ,(match (assoc-ref inputs "source") (((? derivation? source)) (derivation->output-path source))- ((source)- source)- (source- source))+ ((source) source)+ (source source)) #:system ,system- #:npm-flags ,npm-flags+ #:test-target ,test-target #:tests? ,tests? #:phases ,phases #:outputs %outputs@@ -131,5 +118,5 @@ registry." (define node-build-system (build-system (name 'node)- (description "The standard Node build system")+ (description "The Node build system") (lower lower)))diff --git a/guix/build/node-build-system.scm b/guix/build/node-build-system.scmindex 7799f03595..ecba27166b 100644--- a/guix/build/node-build-system.scm+++ b/guix/build/node-build-system.scm@@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 David Thompson <davet@gnu.org>-;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org>+;;; Copyright © 2016, 2020 Jelle Licht <jlicht@fsfe.org>+;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com> ;;; ;;; This file is part of GNU Guix. ;;;@@ -19,144 +20,126 @@ (define-module (guix build node-build-system) #:use-module ((guix build gnu-build-system) #:prefix gnu:)- #:use-module (guix build json)- #:use-module (guix build union) #:use-module (guix build utils)+ #:use-module (guix build json)+ #:use-module (ice-9 ftw) #:use-module (ice-9 match)- #:use-module (ice-9 popen)- #:use-module (ice-9 regex) #:use-module (srfi srfi-1)- #:use-module (srfi srfi-26) #:export (%standard-phases node-build)) ;; Commentary: ;;-;; Builder-side code of the standard Node/npm package build procedure.+;; Builder-side code of the standard Node/NPM package install procedure. ;; ;; Code: -(define* (read-package-data #:key (filename "package.json"))- (call-with-input-file filename- (lambda (port)- (read-json port))))+(define (set-home . _)+ (with-directory-excursion ".."+ (let loop ((i 0))+ (let ((dir (string-append "npm-home-" (number->string i))))+ (if (directory-exists? dir)+ (loop (1+ i))+ (begin+ (mkdir dir)+ (setenv "HOME" (string-append (getcwd) "/" dir))+ (format #t "Set HOME to ~s~%" (getenv "HOME")))))))+ #t) -(define* (build #:key inputs #:allow-other-keys)- (define (build-from-package-json? package-file)- (let* ((package-data (read-package-data #:filename package-file))- (scripts (assoc-ref package-data "scripts")))- (assoc-ref scripts "build")))- "Build a new node module using the appropriate build system."- ;; XXX: Develop a more robust heuristic, allow override- (cond ((file-exists? "gulpfile.js")- (invoke "gulp"))- ((file-exists? "gruntfile.js")- (invoke "grunt"))- ((file-exists? "Makefile")- (invoke "make"))- ((and (file-exists? "package.json")- (build-from-package-json? "package.json"))- (invoke "npm" "run" "build")))+(define (module-name module)+ (let* ((package.json (string-append module "/package.json"))+ (package-meta (call-with-input-file package.json read-json)))+ (assoc-ref package-meta "name")))++(define (index-modules input-paths)+ (define (list-modules directory)+ (append-map (lambda (x)+ (if (string-prefix? "@" x)+ (list-modules (string-append directory "/" x))+ (list (string-append directory "/" x))))+ (filter (lambda (x)+ (not (member x '("." ".."))))+ (or (scandir directory) '()))))+ (let ((index (make-hash-table (* 2 (length input-paths)))))+ (for-each (lambda (dir)+ (let ((nm (string-append dir "/lib/node_modules")))+ (for-each (lambda (module)+ (hash-set! index (module-name module) module))+ (list-modules nm))))+ input-paths)+ index))++(define* (patch-dependencies #:key inputs #:allow-other-keys)++ (define index (index-modules (map cdr inputs)))++ (define (resolve-dependencies package-meta meta-key)+ (fold (lambda (key+value acc)+ (match key+value+ ('@ acc)+ ((key . value) (acons key (hash-ref index key value) acc))))+ '()+ (or (assoc-ref package-meta meta-key) '())))++ (with-atomic-file-replacement "package.json"+ (lambda (in out)+ (let ((package-meta (read-json in)))+ (assoc-set! package-meta "dependencies"+ (append+ '(@)+ (resolve-dependencies package-meta "dependencies")+ (resolve-dependencies package-meta "peerDependencies")))+ (assoc-set! package-meta "devDependencies"+ (append+ '(@)+ (resolve-dependencies package-meta "devDependencies")))+ (write-json package-meta out)))) #t) -(define* (link-npm-dependencies #:key inputs #:allow-other-keys)- (define (inputs->node-inputs inputs)- "Filter the directory part from INPUTS."- (filter (lambda (input)- (match input- ((name . _) (node-package? name))))- inputs))- (define (inputs->directories inputs)- "Extract the directory part from INPUTS."- (match inputs- (((names . directories) ...)- directories)))- (define (make-node-path root)- (string-append root "/lib/node_modules/"))-- (let ((input-node-directories (inputs->directories- (inputs->node-inputs inputs))))- (union-build "node_modules"- (map make-node-path input-node-directories))+(define* (configure #:key outputs inputs #:allow-other-keys)+ (let ((npm (string-append (assoc-ref inputs "node") "/bin/npm")))+ (invoke npm "--offline" "--ignore-scripts" "install") #t)) -(define configure link-npm-dependencies)+(define* (build #:key inputs #:allow-other-keys)+ (let ((npm (string-append (assoc-ref inputs "node") "/bin/npm")))+ (invoke npm "run" "build")+ #t)) -(define* (check #:key tests? #:allow-other-keys)++(define* (check #:key tests? inputs #:allow-other-keys) "Run 'npm test' if TESTS?" (if tests?- ;; Should only be enabled once we know that there are tests- (invoke "npm" "test"))+ (let ((npm (string-append (assoc-ref inputs "node") "/bin/npm")))+ (invoke npm "test"))+ (format #t "test suite not run~%")) #t) -(define (node-package? name)- "Check if NAME correspond to the name of an Node package."- (string-prefix? "node-" name))+(define* (repack #:key inputs #:allow-other-keys)+ (invoke "tar" "-czf" "../package.tgz" ".")+ #t) (define* (install #:key outputs inputs #:allow-other-keys)- "Install the node module to the output store item. The module itself is-installed in a subdirectory of @file{node_modules} and its runtime dependencies-as defined by @file{package.json} are symlinked into a @file{node_modules}-subdirectory of the module's directory. Additionally, binaries are installed in-the @file{bin} directory."- (let* ((out (assoc-ref outputs "out"))- (target (string-append out "/lib"))- (binaries (string-append out "/bin"))- (data (read-package-data))- (modulename (assoc-ref data "name"))- (binary-configuration (match (assoc-ref data "bin")- (('@ configuration ...) configuration)- ((? string? configuration) configuration)- (#f #f)))- (dependencies (match (assoc-ref data "dependencies")- (('@ deps ...) deps)- (#f #f))))- (mkdir-p target)- (copy-recursively "." (string-append target "/node_modules/" modulename))- ;; Remove references to dependencies- (delete-file-recursively- (string-append target "/node_modules/" modulename "/node_modules"))- (cond- ((string? binary-configuration)- (begin- (mkdir-p binaries)- (symlink (string-append target "/node_modules/" modulename "/"- binary-configuration)- (string-append binaries "/" modulename))))- ((list? binary-configuration)- (for-each- (lambda (conf)- (match conf- ((key . value)- (begin- (mkdir-p (dirname (string-append binaries "/" key)))- (symlink (string-append target "/node_modules/" modulename "/"- value)- (string-append binaries "/" key))))))- binary-configuration)))- (when dependencies- (mkdir-p- (string-append target "/node_modules/" modulename "/node_modules"))- (for-each- (lambda (dependency)- (let ((dependency (car dependency)))- (symlink- (string-append (assoc-ref inputs (string-append "node-" dependency))- "/lib/node_modules/" dependency)- (string-append target "/node_modules/" modulename- "/node_modules/" dependency))))- dependencies))+ "Install the node module to the output store item."+ (let ((out (assoc-ref outputs "out"))+ (npm (string-append (assoc-ref inputs "node") "/bin/npm")))+ (invoke npm "--prefix" out+ "--global"+ "--offline"+ "--loglevel" "silly"+ "--production"+ "install" "../package.tgz") #t)) - (define %standard-phases (modify-phases gnu:%standard-phases+ (add-after 'unpack 'set-home set-home)+ (add-before 'configure 'patch-dependencies patch-dependencies) (replace 'configure configure) (replace 'build build)- (replace 'install install)- (delete 'check)- (add-after 'install 'check check)- (delete 'strip)))+ (replace 'check check)+ (add-before 'install 'repack repack)+ (replace 'install install))) (define* (node-build #:key inputs (phases %standard-phases) #:allow-other-keys #:rest args)-- 2.31.0
J
J
Jelle Licht wrote on 20 Mar 15:59 +0100
[PATCH 03/13] gnu: node: Use license prefix.
(address . 47282@debbugs.gnu.org)
20210320145925.12500-3-jlicht@fsfe.org
* gnu/packages/node.scm (node)[license]: Use prefix for license.--- gnu/packages/node.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Toggle diff (24 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex a0df3d2cad..82a2ca7ce0 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -26,7 +26,7 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (gnu packages node)- #:use-module ((guix licenses) #:select (expat))+ #:use-module ((guix licenses) #:prefix license:) #:use-module ((guix build utils) #:select (alist-replace)) #:use-module (guix packages) #:use-module (guix derivations)@@ -207,7 +207,7 @@ event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.") (home-page "https://nodejs.org/")- (license expat)+ (license license:expat) (properties '((max-silent-time . 7200) ;2h, needed on ARM (timeout . 21600))))) ;6h -- 2.31.0
J
J
Jelle Licht wrote on 20 Mar 15:59 +0100
[PATCH 04/13] gnu: node: Add node-bootstrap.
(address . 47282@debbugs.gnu.org)
20210320145925.12500-4-jlicht@fsfe.org
* gnu/packages/node (node-bootstrap): Add hidden alias for node.--- gnu/packages/node.scm | 5 +++++ 1 file changed, 5 insertions(+)
Toggle diff (18 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 82a2ca7ce0..9baf3719d7 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -211,6 +211,11 @@ devices.") (properties '((max-silent-time . 7200) ;2h, needed on ARM (timeout . 21600))))) ;6h +;; This should be the latest version of node that still builds without+;; depending on lltthp.+(define-public node-bootstrap+ (hidden-package node))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
J
J
Jelle Licht wrote on 20 Mar 15:59 +0100
[PATCH 05/13] gnu: node: Add node-semver-bootstrap.
(address . 47282@debbugs.gnu.org)
20210320145925.12500-5-jlicht@fsfe.org
* gnu/packages/node.scm (node-semver-bootstrap): New package.--- gnu/packages/node.scm | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+)
Toggle diff (52 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 9baf3719d7..f332d33536 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -41,6 +41,7 @@ #:use-module (gnu packages icu4c) #:use-module (gnu packages libevent) #:use-module (gnu packages linux)+ #:use-module (gnu packages node-xyz) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python)@@ -216,6 +217,37 @@ devices.") (define-public node-bootstrap (hidden-package node)) +;; Duplicate of node-semver+(define-public node-semver-bootstrap+ (package+ (name "node-semver")+ (version "7.2.1")+ (source (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/npm/node-semver")+ (commit (string-append "v" version))))+ (file-name (git-file-name name version))+ (sha256+ (base32+ "06biknqb05r9xsmcflm3ygh50pjvdk84x6r79w43kmck4fn3qn5p"))))+ (build-system node-build-system)+ (arguments+ `(#:node ,node-bootstrap+ #:tests? #f+ #:phases+ (modify-phases+ %standard-phases+ (delete 'configure)+ (delete 'build))))+ (home-page "https://github.com/npm/node-semver")+ (properties '((hidden? . #t)))+ (synopsis "Parses semantic versions strings")+ (description+ "@code{node-semver} is a JavaScript implementation of the+@uref{https://semver.org/, SemVer.org} specification.")+ (license license:isc)))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
J
J
Jelle Licht wrote on 20 Mar 15:59 +0100
[PATCH 06/13] gnu: node: Add node-ms-bootstrap.
(address . 47282@debbugs.gnu.org)
20210320145925.12500-6-jlicht@fsfe.org
* gnu/packages/node.scm (node-ms-bootstrap): New package.--- gnu/packages/node.scm | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+)
Toggle diff (55 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex f332d33536..6cc8a2d0d1 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -31,8 +31,10 @@ #:use-module (guix packages) #:use-module (guix derivations) #:use-module (guix download)+ #:use-module (guix git-download) #:use-module (guix utils) #:use-module (guix build-system gnu)+ #:use-module (guix build-system node) #:use-module (gnu packages) #:use-module (gnu packages adns) #:use-module (gnu packages base)@@ -248,6 +250,37 @@ devices.") @uref{https://semver.org/, SemVer.org} specification.") (license license:isc))) +(define-public node-ms-bootstrap+ (package+ (name "node-ms")+ (version "2.1.2")+ (source+ (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/vercel/ms.git")+ (commit version)))+ (file-name (git-file-name name version))+ (sha256+ (base32+ "1pjxzbi4j8pinlsc7yxvfrh0b47kb2dc4lfc2rjq4wx5bdwl33fj"))))+ (build-system node-build-system)+ (arguments+ `(#:node ,node-bootstrap+ #:tests? #f+ #:phases+ (modify-phases+ %standard-phases+ (delete 'configure)+ (delete 'build))))+ (home-page "https://github.com/zeit/ms#readme")+ (properties '((hidden? . #t)))+ (synopsis "Tiny millisecond conversion utility")+ (description+ "Use this package to easily convert various time formats to+milliseconds.")+ (license license:expat)))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
J
J
Jelle Licht wrote on 20 Mar 15:59 +0100
[PATCH 07/13] gnu: node: Add node-binary-search-bootstrap.
(address . 47282@debbugs.gnu.org)
20210320145925.12500-7-jlicht@fsfe.org
* gnu/packages/node.scm (node-binary-search-bootstrap): New package.--- gnu/packages/node.scm | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+)
Toggle diff (45 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 6cc8a2d0d1..b7937b29f4 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -281,6 +281,38 @@ devices.") milliseconds.") (license license:expat))) +(define-public node-binary-search-bootstrap+ (package+ (name "node-binary-search")+ (version "1.3.6")+ (source+ (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/darkskyapp/binary-search.git")+ (commit (string-append "v" version))))+ (file-name (git-file-name name version))+ (sha256+ (base32+ "1xr2msdc143cd3xwgq7n3rhzy7j8wrnaidxl0r6l6b6g3mpbpjig"))))+ (build-system node-build-system)+ (arguments+ `(#:node ,node-bootstrap+ #:tests? #f+ #:phases+ (modify-phases+ %standard-phases+ (delete 'configure)+ (delete 'build))))+ (home-page+ "https://github.com/darkskyapp/binary-search#readme")+ (properties '((hidden? . #t)))+ (synopsis+ "Tiny binary search function with comparators")+ (description+ "This package is a binary search function for @code{Node.js}.")+ (license license:cc0)))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
J
J
Jelle Licht wrote on 20 Mar 15:59 +0100
[PATCH 08/13] gnu: node: Add node-debug-bootstrap.
(address . 47282@debbugs.gnu.org)
20210320145925.12500-8-jlicht@fsfe.org
* gnu/packages/node.scm (node-debug-bootstrap): New package.--- gnu/packages/node.scm | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+)
Toggle diff (46 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex b7937b29f4..58e3fd1acc 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -313,6 +313,39 @@ milliseconds.") "This package is a binary search function for @code{Node.js}.") (license license:cc0))) +(define-public node-debug-bootstrap+ (package+ (name "node-debug")+ (version "4.3.0")+ (source+ (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/visionmedia/debug.git")+ (commit version)))+ (file-name (git-file-name name version))+ (sha256+ (base32+ "08g52r1d4yqcsfdfb7n5if33d4cghaq75gx5n9hj6m6fd8jfp2pi"))))+ (build-system node-build-system)+ (arguments+ `(#:node ,node-bootstrap+ #:tests? #f+ #:phases+ (modify-phases+ %standard-phases+ (delete 'configure)+ (delete 'build))))+ (inputs `(("node-ms" ,node-ms-bootstrap)))+ (home-page+ "https://github.com/visionmedia/debug#readme")+ (properties '((hidden? . #t)))+ (synopsis "Small debugging utility")+ (description "This packages contains a tiny JavaScript debugging utility+modelled after @code{Node.js} core's debugging technique. It works in+@code{Node.js} and web browsers.")+ (license license:expat)))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
J
J
Jelle Licht wrote on 20 Mar 15:59 +0100
[PATCH 09/13] gnu: node: Add node-llparse-builder-bootstrap.
(address . 47282@debbugs.gnu.org)
20210320145925.12500-9-jlicht@fsfe.org
* gnu/packages/node.scm (node-llparse-builder-bootstrap): New package.--- gnu/packages/node.scm | 71 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+)
Toggle diff (84 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 58e3fd1acc..85e57f5f2d 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -346,6 +346,77 @@ modelled after @code{Node.js} core's debugging technique. It works in @code{Node.js} and web browsers.") (license license:expat))) +(define-public node-llparse-builder-bootstrap+ (package+ (name "node-llparse-builder")+ (version "1.5.2")+ (source+ (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/indutny/llparse-builder.git")+ (commit (string-append "v" version))))+ (file-name (git-file-name name version))+ (sha256+ (base32+ "0r82iiwqsb73k2fxw7842rjjiixllxpyc6yl9cq4ma6ybkf6xmzm"))+ (modules '((guix build utils)))+ (snippet+ '(begin+ ;; FIXME: Unneeded runtime dependency+ ;; https://github.com/indutny/llparse-builder/pull/2+ (substitute* "package.json"+ (("\"@types/debug.*,") ""))+ ;; Fix incorrect import semantics+ ;; https://github.com/evanw/esbuild/issues/477+ (substitute* (list+ "src/node/invoke.ts"+ "src/node/base.ts"+ "src/node/consume.ts"+ "src/node/match.ts"+ "src/node/error.ts"+ "src/node/pause.ts"+ "src/edge.ts"+ "src/utils.ts"+ "src/loop-checker/index.ts"+ "src/loop-checker/lattice.ts"+ "src/code/field.ts"+ "src/span-allocator.ts")+ (("\\* as assert") "assert")+ (("\\* as debugAPI") "debugAPI"))+ #t))))+ (build-system node-build-system)+ (arguments+ `(#:node ,node-bootstrap+ #:tests? #f+ #:phases+ (modify-phases+ %standard-phases+ (delete 'configure)+ (replace 'build+ (lambda* (#:key inputs #:allow-other-keys)+ (let ((esbuild (string-append+ (assoc-ref inputs "esbuild")+ "/bin/esbuild")))+ (invoke esbuild+ "--platform=node"+ "--outfile=lib/builder.js"+ "--bundle"+ "src/builder.ts")))))))+ (inputs+ `(("node-binary-search" ,node-binary-search-bootstrap)+ ("node-debug" ,node-debug-bootstrap)))+ (native-inputs+ `(("esbuild" ,esbuild)))+ (home-page+ "https://github.com/indutny/llparse-builder#readme")+ (properties '((hidden? . #t)))+ (synopsis+ "Graph builder for consumption by @code{llparse}")+ (description+ "This package builds graphs for consumption by @code{llparse}.")+ (license license:expat)))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
J
J
Jelle Licht wrote on 20 Mar 15:59 +0100
[PATCH 10/13] gnu: node: Add node-llparse-frontend-bootstrap.
(address . 47282@debbugs.gnu.org)
20210320145925.12500-10-jlicht@fsfe.org
* gnu/packages/node.scm (node-llparse-frontend-bootstrap): New package.--- gnu/packages/node.scm | 60 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+)
Toggle diff (73 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 85e57f5f2d..41c50e209e 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -417,6 +417,66 @@ modelled after @code{Node.js} core's debugging technique. It works in "This package builds graphs for consumption by @code{llparse}.") (license license:expat))) +(define-public node-llparse-frontend-bootstrap+ (package+ (name "node-llparse-frontend")+ (version "3.0.0")+ (source+ (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/indutny/llparse-frontend.git")+ (commit (string-append "v" version))))+ (file-name (git-file-name name version))+ (sha256+ (base32 "1rm9g4ifyip30svm5cgnf0gx7d45jgh4mpf2hkd092xhngmfvicc"))+ (modules '((guix build utils)))+ (snippet+ '(begin+ ;; Fix incorrect import semantics+ ;; https://github.com/evanw/esbuild/issues/477+ (substitute* (list "src/frontend.ts"+ "src/code/field-value.ts"+ "src/container/index.ts"+ "src/container/wrap.ts"+ "src/node/sequence.ts"+ "src/node/single.ts"+ "src/node/table-lookup.ts"+ "src/trie/index.ts")+ (("\\* as assert") "assert")+ (("\\* as debugAPI") "debugAPI"))+ #t))))+ (build-system node-build-system)+ (arguments+ `(#:node ,node-bootstrap+ #:tests? #f+ #:phases+ (modify-phases+ %standard-phases+ (delete 'configure)+ (replace 'build+ (lambda* (#:key inputs #:allow-other-keys)+ (let ((esbuild (string-append+ (assoc-ref inputs "esbuild")+ "/bin/esbuild")))+ (invoke esbuild+ "--platform=node"+ "--outfile=lib/frontend.js"+ "--bundle"+ "src/frontend.ts")))))))+ (inputs+ `(("node-debug" ,node-debug-bootstrap)+ ("node-llparse-builder" ,node-llparse-builder-bootstrap)))+ (native-inputs+ `(("esbuild" ,esbuild)))+ (home-page+ "https://github.com/indutny/llparse-frontend#readme")+ (properties '((hidden? . #t)))+ (synopsis "Frontend for @code{llparse} compiler")+ (description "This package is a frontend for the @code{llparse}+compiler.")+ (license license:expat)))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
J
J
Jelle Licht wrote on 20 Mar 15:59 +0100
[PATCH 11/13] gnu: node: Add node-llparse-bootstrap.
(address . 47282@debbugs.gnu.org)
20210320145925.12500-11-jlicht@fsfe.org
* gnu/packages/node.scm (node-llparse-bootstrap): New package.--- gnu/packages/node.scm | 62 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+)
Toggle diff (75 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 41c50e209e..380e959a58 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -477,6 +477,68 @@ modelled after @code{Node.js} core's debugging technique. It works in compiler.") (license license:expat))) +(define-public node-llparse-bootstrap+ (package+ (name "node-llparse")+ (version "7.1.0")+ (source+ (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/indutny/llparse.git")+ (commit (string-append "v" version))))+ (file-name (git-file-name name version))+ (sha256+ (base32+ "10da273iy2if88hp79cwms6c8qpsl1fkgzll6gmqyx5yxv5mkyp6"))+ (modules '((guix build utils)))+ (snippet+ '(begin+ ;; Fix incorrect import semantics+ ;; https://github.com/evanw/esbuild/issues/477+ (substitute* (list "src/compiler/index.ts"+ "src/implementation/c/node/base.ts"+ "src/implementation/c/node/table-lookup.ts"+ "src/implementation/c/compilation.ts"+ "src/implementation/c/helpers/match-sequence.ts"+ "src/implementation/c/code/mul-add.ts")+ (("\\* as assert") "assert")+ (("\\* as debugAPI") "debugAPI"))+ #t))))+ (build-system node-build-system)+ (arguments+ `(#:node ,node-bootstrap+ #:tests? #f+ #:phases+ (modify-phases+ %standard-phases+ (delete 'configure)+ (replace 'build+ (lambda* (#:key inputs #:allow-other-keys)+ (let ((esbuild (string-append+ (assoc-ref inputs "esbuild")+ "/bin/esbuild")))+ (invoke esbuild+ "--platform=node"+ "--outfile=lib/api.js"+ "--bundle"+ "src/api.ts")))))))+ (inputs+ `(("node-debug" ,node-debug-bootstrap)+ ("node-llparse-frontend"+ ,node-llparse-frontend-bootstrap)))+ (native-inputs+ `(("esbuild" ,esbuild)))+ (home-page+ "https://github.com/nodejs/llparse#readme")+ (properties '((hidden? . #t)))+ (synopsis+ "Compile incremental parsers to C code")+ (description+ "This package offers an API for compiling an incremental parser+definition into a C output.")+ (license license:expat)))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
J
J
Jelle Licht wrote on 20 Mar 15:59 +0100
[PATCH 12/13] gnu: node: Add llhttp-bootstrap.
(address . 47282@debbugs.gnu.org)
20210320145925.12500-12-jlicht@fsfe.org
* gnu/packages/node.scm (llhttp-bootstrap): New package.--- gnu/packages/node.scm | 67 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+)
Toggle diff (80 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 380e959a58..d44bec7ca4 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -539,6 +539,73 @@ compiler.") definition into a C output.") (license license:expat))) +(define-public llhttp-bootstrap+ (package+ (name "llhttp")+ (version "2.1.0")+ (source (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/nodejs/llhttp.git")+ (commit (string-append "v" version))))+ (file-name (git-file-name name version))+ (sha256+ (base32+ "08ylnirqrk63h0ww1m79p0bh6rwayrhd4v28p353qlp3qcffwwb0"))+ (modules '((guix build utils)))+ (snippet+ '(begin+ ;; Fix incorrect import semantics+ ;; https://github.com/evanw/esbuild/issues/477+ (substitute* "src/llhttp/http.ts"+ (("\\* as assert")+ "assert"))+ (substitute* "Makefile"+ (("npx ts-node bin/generate.ts")+ "node bin/generate.js"))+ #t))))+ (build-system gnu-build-system)+ (arguments+ `(#:tests? #f ; no tests+ #:make-flags (list "CLANG=gcc"+ (string-append "DESTDIR=" (assoc-ref %outputs "out"))+ "PREFIX=")+ #:phases (modify-phases %standard-phases+ (replace 'configure+ (lambda* (#:key inputs #:allow-other-keys)+ (let ((esbuild (string-append+ (assoc-ref inputs "esbuild")+ "/bin/esbuild")))+ (invoke esbuild+ "--platform=node"+ "--outfile=bin/generate.js"+ "--bundle" "bin/generate.ts"))))+ (add-before 'install 'create-install-directories+ (lambda* (#:key outputs #:allow-other-keys)+ (let ((out (assoc-ref outputs "out")))+ (for-each (lambda (dir)+ (mkdir-p (string-append out dir)))+ (list "/lib" "/include" "/src"))+ #t)))+ (add-after 'install 'install-src+ (lambda* (#:key outputs #:allow-other-keys)+ (let* ((out (assoc-ref outputs "out"))+ (src-dir (string-append out "/src")))+ (install-file "build/c/llhttp.c" src-dir)+ #t))))))+ (native-inputs+ `(("esbuild" ,esbuild)+ ("node" ,node-bootstrap)+ ("node-semver" ,node-semver-bootstrap)+ ("node-llparse-bootstrap" ,node-llparse-bootstrap)))+ (home-page "https://github.com/nodejs/llhttp")+ (properties '((hidden? . #t)))+ (synopsis "Port of @code{http_parser} to @code{llparse}")+ (description "@code{llhttp} is a port of @code{http_parser} to TypeScript.+@code{llparse} is used to generate the output C source file, which can be+compiled and linked with the embedder's program (like @code{Node.js}).")+ (license license:expat)))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
J
J
Jelle Licht wrote on 20 Mar 15:59 +0100
[PATCH 13/13] gnu: node: Add node-lts
(address . 47282@debbugs.gnu.org)
20210320145925.12500-13-jlicht@fsfe.org
* gnu/packages/node.scm (node-lts): New package.
wip--- gnu/packages/node.scm | 156 ++++++++++++++++++++++++++++++++++++- guix/build-system/node.scm | 2 +- 2 files changed, 153 insertions(+), 5 deletions(-)
Toggle diff (216 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex d44bec7ca4..2a7e9ca2fa 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -542,7 +542,7 @@ definition into a C output.") (define-public llhttp-bootstrap (package (name "llhttp")- (version "2.1.0")+ (version "2.2.1") (source (origin (method git-fetch) (uri (git-reference@@ -551,7 +551,7 @@ definition into a C output.") (file-name (git-file-name name version)) (sha256 (base32- "08ylnirqrk63h0ww1m79p0bh6rwayrhd4v28p353qlp3qcffwwb0"))+ "093ag8w0y8irsy0ph7sk06rrs03ic3is41wgxjkgwvc2qys9iqdr")) (modules '((guix build utils))) (snippet '(begin@@ -566,7 +566,7 @@ definition into a C output.") #t)))) (build-system gnu-build-system) (arguments- `(#:tests? #f ; no tests+ `(#:tests? #f ; no tests #:make-flags (list "CLANG=gcc" (string-append "DESTDIR=" (assoc-ref %outputs "out")) "PREFIX=")@@ -592,6 +592,8 @@ definition into a C output.") (let* ((out (assoc-ref outputs "out")) (src-dir (string-append out "/src"))) (install-file "build/c/llhttp.c" src-dir)+ (install-file "src/native/api.c" src-dir)+ (install-file "src/native/http.c" src-dir) #t)))))) (native-inputs `(("esbuild" ,esbuild)@@ -599,13 +601,159 @@ definition into a C output.") ("node-semver" ,node-semver-bootstrap) ("node-llparse-bootstrap" ,node-llparse-bootstrap))) (home-page "https://github.com/nodejs/llhttp")- (properties '((hidden? . #t)))+ ;; (properties '((hidden? . #t))) (synopsis "Port of @code{http_parser} to @code{llparse}") (description "@code{llhttp} is a port of @code{http_parser} to TypeScript. @code{llparse} is used to generate the output C source file, which can be compiled and linked with the embedder's program (like @code{Node.js}).") (license license:expat))) +(define-public node-lts+ (package+ (inherit node)+ (version "14.16.0")+ (source (origin+ (method url-fetch)+ (uri (string-append "https://nodejs.org/dist/v" version+ "/node-v" version ".tar.xz"))+ (sha256+ (base32+ "19nz2mhmn6ikahxqyna1dn25pb5v3z9vsz9zb2flb6zp2yk4hxjf"))+ (modules '((guix build utils)))+ (snippet+ `(begin+ ;; Remove bundled software, where possible+ (for-each delete-file-recursively+ '("deps/cares"+ "deps/icu-small"+ "deps/nghttp2"+ "deps/openssl"+ "deps/zlib"))+ (substitute* "Makefile"+ ;; Remove references to bundled software.+ (("deps/uv/uv.gyp") "")+ (("deps/zlib/zlib.gyp") ""))+ #t))))+ (arguments+ (substitute-keyword-arguments (package-arguments node)+ ((#:configure-flags configure-flags)+ ''("--shared-cares"+ "--shared-libuv"+ "--shared-nghttp2"+ "--shared-openssl"+ "--shared-zlib"+ "--shared-brotli"+ "--with-intl=system-icu"))+ ((#:phases phases)+ `(modify-phases ,phases+ (replace 'configure+ ;; Node's configure script is actually a python script, so we can't+ ;; run it with bash.+ (lambda* (#:key outputs (configure-flags '()) inputs+ #:allow-other-keys)+ (let* ((prefix (assoc-ref outputs "out"))+ (flags (cons (string-append "--prefix=" prefix)+ configure-flags)))+ (format #t "build directory: ~s~%" (getcwd))+ (format #t "configure flags: ~s~%" flags)+ ;; Node's configure script expects the CC environment variable to+ ;; be set.+ (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))+ (apply invoke+ (string-append (assoc-ref inputs "python")+ "/bin/python3")+ "configure" flags))))+ (replace 'patch-files+ (lambda* (#:key inputs #:allow-other-keys)+ ;; Fix hardcoded /bin/sh references.+ (substitute* '("lib/child_process.js"+ "lib/internal/v8_prof_polyfill.js"+ "test/parallel/test-child-process-spawnsync-shell.js"+ "test/parallel/test-stdio-closed.js"+ "test/sequential/test-child-process-emfile.js")+ (("'/bin/sh'")+ (string-append "'" (which "sh") "'")))++ ;; Fix hardcoded /usr/bin/env references.+ (substitute* '("test/parallel/test-child-process-default-options.js"+ "test/parallel/test-child-process-env.js"+ "test/parallel/test-child-process-exec-env.js")+ (("'/usr/bin/env'")+ (string-append "'" (which "env") "'")))+ ;; Because we have a custom version of llhttp, we should expect a superset of supported http methods.+ (substitute* '("test/parallel/test-http-methods.js")+ (("assert\\.deepStrictEqual\\(http\\.METHODS, methods\\.sort\\(\\)\\);")+ "methods.every(v => assert(http.METHODS.includes(v)));"))++ ;; FIXME: These tests fail in the build container, but they don't+ ;; seem to be indicative of real problems in practice.+ (for-each delete-file+ '("test/parallel/test-cluster-master-error.js"+ "test/parallel/test-cluster-master-kill.js"))++ ;; This requires a DNS resolver.+ (for-each delete-file+ '("test/parallel/test-dns.js"+ "test/parallel/test-dns-lookupService-promises.js"))++ ;; TODO: why does this fail. It seems to _almost_ pass, but it parses 1 byte?+ (delete-file "test/parallel/test-http-server-destroy-socket-on-client-error.js")++ ;; TODO: this seems to fail because of spawning processes?+ (delete-file "test/parallel/test-fs-write-sigxfsz.js")++ ;; FIXME: This test fails randomly:+ ;; https://github.com/nodejs/node/issues/31213+ (delete-file "test/parallel/test-net-listen-after-destroying-stdin.js")++ ;; FIXME: These tests fail on armhf-linux:+ ;; https://github.com/nodejs/node/issues/31970+ ,@(if (string-prefix? "arm" (%current-system))+ '((for-each delete-file+ '("test/parallel/test-zlib.js"+ "test/parallel/test-zlib-brotli.js"+ "test/parallel/test-zlib-brotli-flush.js"+ "test/parallel/test-zlib-brotli-from-brotli.js"+ "test/parallel/test-zlib-brotli-from-string.js"+ "test/parallel/test-zlib-convenience-methods.js"+ "test/parallel/test-zlib-random-byte-pipes.js"+ "test/parallel/test-zlib-write-after-flush.js")))+ '())++ ;; These tests have an expiry date: they depend on the validity of+ ;; TLS certificates that are bundled with the source. We want this+ ;; package to be reproducible forever, so remove those.+ ;; TODO: Regenerate certs instead.+ (for-each delete-file+ '("test/parallel/test-tls-passphrase.js"+ "test/parallel/test-tls-server-verify.js"))++ ;; Replace pre-generated llhttp sources+ (let ((llhttp (assoc-ref inputs "llhttp"))+ ;; (llhttp-src (assoc-ref inputs "llhttp-sources"))+ )+ (copy-file (string-append llhttp "/src/llhttp.c")+ "deps/llhttp/src/llhttp.c")+ (copy-file (string-append llhttp "/src/api.c")+ "deps/llhttp/src/api.c")+ (copy-file (string-append llhttp "/src/http.c")+ "deps/llhttp/src/http.c")+ (copy-file (string-append llhttp "/include/llhttp.h")+ "deps/llhttp/include/llhttp.h"))+ #t))))))+ (inputs+ `(("c-ares" ,c-ares)+ ("icu4c" ,icu4c-67)+ ("libuv" ,libuv-node)+ ("llhttp" ,llhttp-bootstrap)+ ("google-brotli" ,google-brotli)+ ("nghttp2" ,nghttp2 "lib")+ ("openssl" ,openssl)+ ("zlib" ,zlib)))+ (native-inputs+ (alist-replace "python" (list python-3)+ (package-native-inputs node)))))+ (define-public libnode (package/inherit node (name "libnode")diff --git a/guix/build-system/node.scm b/guix/build-system/node.scmindex 560f0ee4da..5737c8ea6e 100644--- a/guix/build-system/node.scm+++ b/guix/build-system/node.scm@@ -39,7 +39,7 @@ "Return the default Node package." ;; Lazily resolve the binding to avoid a circular dependency. (let ((node (resolve-interface '(gnu packages node))))- (module-ref node 'node)))+ (module-ref node 'node-lts))) (define* (lower name #:key source inputs native-inputs outputs system target-- 2.31.0
L
L
Lars-Dominik Braun wrote on 23 Mar 10:05 +0100
Re: [bug#47282] [PATCH 00/13] node going forward
(name . Jelle Licht)(address . jlicht@fsfe.org)(address . 47282@debbugs.gnu.org)
20210323090557.GA3185@zpidnp36
Hi,
Toggle quote (1 lines)> So, some people seem to be interested in this one; please review and test.
that would be me :)
The first patch currently does not apply cleanly to master, but it’s an easymerge.
There is a stray “wip” in the commit message of the last patch.
I imported (using the “binary” importer from wip-node-14 and some privatefixes) and built more than 18000 NPM packages with this patchset and theresulting RStudio is working fine, so this is a welcome improvement forguix-science.
Cheers,Lars
-- Lars-Dominik BraunWissenschaftlicher Mitarbeiter/Research Associate
www.leibniz-psychology.orgZPID - Leibniz-Institut für Psychologie /ZPID - Leibniz Institute for PsychologyUniversitätsring 15D-54296 Trier - GermanyTel.: +49–651–201-4964
-----BEGIN PGP SIGNATURE-----
iQGzBAABCgAdFiEEyk+M9DfXR4/aBV/UQhN3ARo3hEYFAmBZr3AACgkQQhN3ARo3hEayzAwA1V7nNhdTzxUvjySmEX0wxqdc/buzY9tWSykd9k1zDUQQ3olDrbLZ+HhkJoytN+7PZKtiYNR1nD7woqLdLthjpOqHB8fmT2+LiTeOpIxRrXG3TpRRclWULxkBZLkyG55mwZ0Brb4ys6vYSZdHJf20+TvWLp01MnEJM/bk4RsaN22pid9hjbrH+ply9Sef0a5be0/a7swlormlaD1/Tux6rydkZ4N6y801SGvRMxXVbrQYIRL6z4WD2gnOzeQn5GWqjY+4Zf4Nuh5pdVcHQK6IMF6AEvTAnPfR/XtV5syFN1XaY6HY7zuGiVAYCpD1tN3mZMIndgiIxxVKCwjTMDu/CS2bOXVwFfeZy3Ep4DPHHcv0JIG48aflt1Vq7yCkZDw+OKsJudx1vVAVEn00kpnfMrzinQHOORG7s/OZ1IA5E9SRMoD41bD1GmzbaiyYSfGdoh9bjyA1QnvYPFs8QWHtlCheBfA4qVrJdNOOIZ44iV840js6mYJpyq3knIPt3S7c=YHmn-----END PGP SIGNATURE-----

L
L
Léo Le Bouter wrote on 25 Mar 16:51 +0100
(address . 47282@debbugs.gnu.org)
418b981098dc0d8e48ec82745e0269b1e19dfe1b.camel@zaclys.net
On Tue, 2021-03-23 at 10:05 +0100, Lars-Dominik Braun wrote:
Toggle quote (8 lines)> I imported (using the “binary” importer from wip-node-14 and some> private> fixes) and built more than 18000 NPM packages with this patchset and> the> resulting RStudio is working fine, so this is a welcome improvement> for> guix-science.
There's somewhere with 18000+ GNU Guix package definitions for NPMpackages? Please share where.
Thank you
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEFIvLi9gL+xax3g6RRaix6GvNEKYFAmBcsZYACgkQRaix6GvNEKZ3nQ/+M3wzF1O6TWTpmA1nKKg1j1+lkNlTdapUsBv3vyeyFPoP4YN7Sc+dKLL6LEzikU8PHYF2FEUPaXEILQoF7oPoOIVzfgGwxzOByKq95Ag44t/uwswi/e9tWrPkWTTGHIm0CkS4qfbYBNRW8Gk/cwFqpmyNU/PGIh3k/X0YGRPz2N+CoxGMTXS+W72Mu5QbAaY+tUHdmh5AsAWaNqJQaqipUtkNihALpJVlh15mjyn6MsdqIISd+FLil0mbdt7VLrV9hg6wFSq2X/GgNwzD5UIAo+SAoGltf6vC/Xm1bBGAk0TlvXpYmK6pJ/hkPERxnkm/J4H6jxuzweV/LjSUs9SQYm7PYUn30v80nhfLr/tzOJd/L3Ut+ub2nzSqpdUd48OmRi8jVkSWsWs55GSeHcRZ8ZTHRY0fQA4hC/iy1KvWEKDe0FGv5uDQC/xQDQQ4Dufory+Z1cV4Nh1n+2wv0A+RiGmJ6Snnd3rqYC0ZDZKuTp24KtA9m3HqF/b3D7S7i8N2hfFGqbp9W44KhJoTjcrBYutu3gjHdIv8Ew2c/zUXG1lPI1YQQ+IUupoIJ8nY4n9It+LnpsAP3Y6xwDWTilVNGovWS2oAPCKVU9WFvl4aTFnky5IuaPucVMtKNR9AGM6lpy4tQzmnmvGtMBCfPighZEPtz+JzG2z0GhWW15OW8lE==KNH3-----END PGP SIGNATURE-----

L
L
Lars-Dominik Braun wrote on 25 Mar 17:14 +0100
(name . Léo Le Bouter)(address . lle-bout@zaclys.net)
YFy2+PZX4V1ngLgK@noor.fritz.box
Hi Léo,
Toggle quote (2 lines)> There's somewhere with 18000+ GNU Guix package definitions for NPM> packages? Please share where.
sorry, the number is completely wrong, no idea why. It’s “just” 473packages, which is still an insane amount. They’re part of my efforts tobuild RStudio 1.4, seehttps://github.com/guix-science/guix-science/blob/rstudio-1.4/guix-science/packages/rstudio-node.scm
Lars
T
T
Timothy Sample wrote on 30 Mar 07:24 +0200
Re: bug#47282: [PATCH 00/13] node going forward
(name . Jelle Licht)(address . jlicht@fsfe.org)(address . 47282@debbugs.gnu.org)
87k0pprz6n.fsf@ngyro.com
Hi Jelle,
Jelle Licht <jlicht@fsfe.org> writes:
Toggle quote (2 lines)> So, some people seem to be interested in this one; please review and test.
Now that I’ve finally taken the time to dig into what you’ve done here –I must say it’s very impressive!
I’ve taken the presumptuous step of re-rolling the series. The reasonis that all the “(delete 'build)” bits were bothering me. I decided tohave the build system check the “package.json” file for a build scriptbefore trying to run it. Since that change required changing all theother patches, I thought it would be easier to just post the updatedpatches. Also, I’m hoping to spare you some trouble (since you’vealready gone to a lot!).
Of course, this approach gave me free reign to pick nits. :) Below isa list of bigger things that I changed, but I also adjusted some commitmessages, indentation, descriptions, and other minor things.
• Add the check for a “build” script as explained above, and adjust the “npm-build-system” packages accordingly.
• Rename “libuv-node” to “libuv-for-node”, as this style is used for similar packages. I also changed the name to just “libuv” and marked it hidden.
• Change the “Fix incorrect import semantics” comments to “Fix imports for esbuild”. To me, if TypeScript’s tsc likes the imports, they are correct TypeScript (despite the esbuild bug report).
• Set the llhttp version to 2.1.3, and add a patch to fix CVE-2020-8287. The resulting C source files are identical to the ones shipped with Node.js 14.16.0. This makes the tests a little simpler, allowing the removal of the HTTP method superset change and fixing the reading one byte failure.
• Fix the SIGXFSZ failure by fixing a “/bin/sh” in the test.
The final result is still a little messy, but I don’t think we shouldhold this back any longer. It’s a significant step forward, and it putsus in better shape to improve things incrementally.
WDYT? Let me know if I made anything worse! :) If the altered patcheslook good to you, I suggest you go ahead and push them.

-- Tim
T
T
Timothy Sample wrote on 30 Mar 07:27 +0200
[PATCH v2 01/13] build-system: Rewrite node build system.
(address . 47282@debbugs.gnu.org)
20210330052743.575-1-samplet@ngyro.com
From: Jelle Licht <jlicht@fsfe.org>
* guix/build/node-build-system.scm: Rewrite it.* guix/build-system/node.scm: Adjust accordingly.* gnu/packages/node-xyz.scm (node-semver): Likewise.
Co-authored-by: Timothy Sample <samplet@ngyro.com>--- gnu/packages/node-xyz.scm | 6 +- guix/build-system/node.scm | 27 ++-- guix/build/node-build-system.scm | 207 +++++++++++++++---------------- 3 files changed, 110 insertions(+), 130 deletions(-)
Toggle diff (357 lines)diff --git a/gnu/packages/node-xyz.scm b/gnu/packages/node-xyz.scmindex b1d6d4ce59..60cc005ea4 100644--- a/gnu/packages/node-xyz.scm+++ b/gnu/packages/node-xyz.scm@@ -261,7 +261,11 @@ function with browser support.") "06biknqb05r9xsmcflm3ygh50pjvdk84x6r79w43kmck4fn3qn5p")))) (build-system node-build-system) (arguments- `(#:tests? #f)) ;; FIXME: Tests depend on node-tap+ '(#:tests? #f ; FIXME: Tests depend on node-tap+ #:phases+ (modify-phases %standard-phases+ ;; The only dependency to check for is tap, which we don't have.+ (delete 'configure)))) (home-page "https://github.com/npm/node-semver") (synopsis "Parses semantic versions strings") (descriptiondiff --git a/guix/build-system/node.scm b/guix/build-system/node.scmindex a8c5eed09b..4991ed53a5 100644--- a/guix/build-system/node.scm+++ b/guix/build-system/node.scm@@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org>+;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com> ;;; ;;; This file is part of GNU Guix. ;;;@@ -17,7 +18,6 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (guix build-system node)- #:use-module (guix store) #:use-module (guix utils) #:use-module (guix packages) #:use-module (guix derivations)@@ -25,22 +25,15 @@ #:use-module (guix build-system) #:use-module (guix build-system gnu) #:use-module (ice-9 match)- #:export (npm-meta-uri- %node-build-system-modules+ #:export (%node-build-system-modules node-build node-build-system)) -(define (npm-meta-uri name)- "Return a URI string for the metadata of node module NAME found in the npm-registry."- (string-append "https://registry.npmjs.org/" name))- (define %node-build-system-modules ;; Build-side modules imported by default. `((guix build node-build-system) (guix build json)- (guix build union)- ,@%gnu-build-system-modules)) ;; TODO: Might be not needed+ ,@%gnu-build-system-modules)) (define (default-node) "Return the default Node package."@@ -76,7 +69,7 @@ registry." (define* (node-build store name inputs #:key- (npm-flags ''())+ (test-target "test") (tests? #t) (phases '(@ (guix build node-build-system) %standard-phases))@@ -86,8 +79,6 @@ registry." (guile #f) (imported-modules %node-build-system-modules) (modules '((guix build node-build-system)- (guix build json)- (guix build union) (guix build utils)))) "Build SOURCE using NODE and INPUTS." (define builder@@ -97,12 +88,10 @@ registry." #:source ,(match (assoc-ref inputs "source") (((? derivation? source)) (derivation->output-path source))- ((source)- source)- (source- source))+ ((source) source)+ (source source)) #:system ,system- #:npm-flags ,npm-flags+ #:test-target ,test-target #:tests? ,tests? #:phases ,phases #:outputs %outputs@@ -129,5 +118,5 @@ registry." (define node-build-system (build-system (name 'node)- (description "The standard Node build system")+ (description "The Node build system") (lower lower)))diff --git a/guix/build/node-build-system.scm b/guix/build/node-build-system.scmindex 7799f03595..a55cab237c 100644--- a/guix/build/node-build-system.scm+++ b/guix/build/node-build-system.scm@@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 David Thompson <davet@gnu.org>-;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org>+;;; Copyright © 2016, 2020 Jelle Licht <jlicht@fsfe.org>+;;; Copyright © 2019, 2021 Timothy Sample <samplet@ngyro.com> ;;; ;;; This file is part of GNU Guix. ;;;@@ -19,144 +20,130 @@ (define-module (guix build node-build-system) #:use-module ((guix build gnu-build-system) #:prefix gnu:)- #:use-module (guix build json)- #:use-module (guix build union) #:use-module (guix build utils)+ #:use-module (guix build json)+ #:use-module (ice-9 ftw) #:use-module (ice-9 match)- #:use-module (ice-9 popen)- #:use-module (ice-9 regex) #:use-module (srfi srfi-1)- #:use-module (srfi srfi-26) #:export (%standard-phases node-build)) ;; Commentary: ;;-;; Builder-side code of the standard Node/npm package build procedure.+;; Builder-side code of the standard Node/NPM package install procedure. ;; ;; Code: -(define* (read-package-data #:key (filename "package.json"))- (call-with-input-file filename- (lambda (port)- (read-json port))))+(define (set-home . _)+ (with-directory-excursion ".."+ (let loop ((i 0))+ (let ((dir (string-append "npm-home-" (number->string i))))+ (if (directory-exists? dir)+ (loop (1+ i))+ (begin+ (mkdir dir)+ (setenv "HOME" (string-append (getcwd) "/" dir))+ (format #t "set HOME to ~s~%" (getenv "HOME")))))))+ #t) -(define* (build #:key inputs #:allow-other-keys)- (define (build-from-package-json? package-file)- (let* ((package-data (read-package-data #:filename package-file))- (scripts (assoc-ref package-data "scripts")))- (assoc-ref scripts "build")))- "Build a new node module using the appropriate build system."- ;; XXX: Develop a more robust heuristic, allow override- (cond ((file-exists? "gulpfile.js")- (invoke "gulp"))- ((file-exists? "gruntfile.js")- (invoke "grunt"))- ((file-exists? "Makefile")- (invoke "make"))- ((and (file-exists? "package.json")- (build-from-package-json? "package.json"))- (invoke "npm" "run" "build")))+(define (module-name module)+ (let* ((package.json (string-append module "/package.json"))+ (package-meta (call-with-input-file package.json read-json)))+ (assoc-ref package-meta "name")))++(define (index-modules input-paths)+ (define (list-modules directory)+ (append-map (lambda (x)+ (if (string-prefix? "@" x)+ (list-modules (string-append directory "/" x))+ (list (string-append directory "/" x))))+ (filter (lambda (x)+ (not (member x '("." ".."))))+ (or (scandir directory) '()))))+ (let ((index (make-hash-table (* 2 (length input-paths)))))+ (for-each (lambda (dir)+ (let ((nm (string-append dir "/lib/node_modules")))+ (for-each (lambda (module)+ (hash-set! index (module-name module) module))+ (list-modules nm))))+ input-paths)+ index))++(define* (patch-dependencies #:key inputs #:allow-other-keys)++ (define index (index-modules (map cdr inputs)))++ (define (resolve-dependencies package-meta meta-key)+ (fold (lambda (key+value acc)+ (match key+value+ ('@ acc)+ ((key . value) (acons key (hash-ref index key value) acc))))+ '()+ (or (assoc-ref package-meta meta-key) '())))++ (with-atomic-file-replacement "package.json"+ (lambda (in out)+ (let ((package-meta (read-json in)))+ (assoc-set! package-meta "dependencies"+ (append+ '(@)+ (resolve-dependencies package-meta "dependencies")+ (resolve-dependencies package-meta "peerDependencies")))+ (assoc-set! package-meta "devDependencies"+ (append+ '(@)+ (resolve-dependencies package-meta "devDependencies")))+ (write-json package-meta out)))) #t) -(define* (link-npm-dependencies #:key inputs #:allow-other-keys)- (define (inputs->node-inputs inputs)- "Filter the directory part from INPUTS."- (filter (lambda (input)- (match input- ((name . _) (node-package? name))))- inputs))- (define (inputs->directories inputs)- "Extract the directory part from INPUTS."- (match inputs- (((names . directories) ...)- directories)))- (define (make-node-path root)- (string-append root "/lib/node_modules/"))-- (let ((input-node-directories (inputs->directories- (inputs->node-inputs inputs))))- (union-build "node_modules"- (map make-node-path input-node-directories))+(define* (configure #:key outputs inputs #:allow-other-keys)+ (let ((npm (string-append (assoc-ref inputs "node") "/bin/npm")))+ (invoke npm "--offline" "--ignore-scripts" "install") #t)) -(define configure link-npm-dependencies)+(define* (build #:key inputs #:allow-other-keys)+ (let ((package-meta (call-with-input-file "package.json" read-json)))+ (if (and=> (assoc-ref package-meta "scripts")+ (lambda (scripts)+ (assoc-ref scripts "build")))+ (let ((npm (string-append (assoc-ref inputs "node") "/bin/npm")))+ (invoke npm "run" "build"))+ (format #t "there is no build script to run~%"))+ #t)) -(define* (check #:key tests? #:allow-other-keys)+(define* (check #:key tests? inputs #:allow-other-keys) "Run 'npm test' if TESTS?" (if tests?- ;; Should only be enabled once we know that there are tests- (invoke "npm" "test"))+ (let ((npm (string-append (assoc-ref inputs "node") "/bin/npm")))+ (invoke npm "test"))+ (format #t "test suite not run~%")) #t) -(define (node-package? name)- "Check if NAME correspond to the name of an Node package."- (string-prefix? "node-" name))+(define* (repack #:key inputs #:allow-other-keys)+ (invoke "tar" "-czf" "../package.tgz" ".")+ #t) (define* (install #:key outputs inputs #:allow-other-keys)- "Install the node module to the output store item. The module itself is-installed in a subdirectory of @file{node_modules} and its runtime dependencies-as defined by @file{package.json} are symlinked into a @file{node_modules}-subdirectory of the module's directory. Additionally, binaries are installed in-the @file{bin} directory."- (let* ((out (assoc-ref outputs "out"))- (target (string-append out "/lib"))- (binaries (string-append out "/bin"))- (data (read-package-data))- (modulename (assoc-ref data "name"))- (binary-configuration (match (assoc-ref data "bin")- (('@ configuration ...) configuration)- ((? string? configuration) configuration)- (#f #f)))- (dependencies (match (assoc-ref data "dependencies")- (('@ deps ...) deps)- (#f #f))))- (mkdir-p target)- (copy-recursively "." (string-append target "/node_modules/" modulename))- ;; Remove references to dependencies- (delete-file-recursively- (string-append target "/node_modules/" modulename "/node_modules"))- (cond- ((string? binary-configuration)- (begin- (mkdir-p binaries)- (symlink (string-append target "/node_modules/" modulename "/"- binary-configuration)- (string-append binaries "/" modulename))))- ((list? binary-configuration)- (for-each- (lambda (conf)- (match conf- ((key . value)- (begin- (mkdir-p (dirname (string-append binaries "/" key)))- (symlink (string-append target "/node_modules/" modulename "/"- value)- (string-append binaries "/" key))))))- binary-configuration)))- (when dependencies- (mkdir-p- (string-append target "/node_modules/" modulename "/node_modules"))- (for-each- (lambda (dependency)- (let ((dependency (car dependency)))- (symlink- (string-append (assoc-ref inputs (string-append "node-" dependency))- "/lib/node_modules/" dependency)- (string-append target "/node_modules/" modulename- "/node_modules/" dependency))))- dependencies))+ "Install the node module to the output store item."+ (let ((out (assoc-ref outputs "out"))+ (npm (string-append (assoc-ref inputs "node") "/bin/npm")))+ (invoke npm "--prefix" out+ "--global"+ "--offline"+ "--loglevel" "info"+ "--production"+ "install" "../package.tgz") #t)) - (define %standard-phases (modify-phases gnu:%standard-phases+ (add-after 'unpack 'set-home set-home)+ (add-before 'configure 'patch-dependencies patch-dependencies) (replace 'configure configure) (replace 'build build)- (replace 'install install)- (delete 'check)- (add-after 'install 'check check)- (delete 'strip)))+ (replace 'check check)+ (add-before 'install 'repack repack)+ (replace 'install install))) (define* (node-build #:key inputs (phases %standard-phases) #:allow-other-keys #:rest args)-- 2.31.0
T
T
Timothy Sample wrote on 30 Mar 07:27 +0200
[PATCH v2 02/13] gnu: Add libuv-for-node
(address . 47282@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
20210330052743.575-2-samplet@ngyro.com
From: Jelle Licht <jlicht@fsfe.org>
* gnu/packages/libevent.scm (libuv-for-node): New variable.--- gnu/packages/libevent.scm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
Toggle diff (29 lines)diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scmindex 7109d9a88d..0e683570d3 100644--- a/gnu/packages/libevent.scm+++ b/gnu/packages/libevent.scm@@ -134,6 +134,22 @@ resolution, asynchronous file system operations, and threading primitives.") ;; details. Documentation is CC-BY 4.0 as of 1.12.0; see 'LICENSE-docs'. (license (list expat cc-by4.0)))) +(define-public libuv-for-node+ ;; When upgrading Node, also upgrade this. Get the version from+ ;; https://github.com/nodejs/node/blob/master/deps/uv/include/uv/version.h+ (package+ (inherit libuv)+ (name "libuv")+ (version "1.40.0")+ (source (origin+ (method url-fetch)+ (uri (string-append "https://dist.libuv.org/dist/v" version+ "/libuv-v" version ".tar.gz"))+ (sha256+ (base32+ "1551k3ab27vbg9517l9b4iqbramwxdkwgpf53knas05cbfwhvab1"))))+ (properties '((hidden? . #t)))))+ (define-public perl-anyevent (package (name "perl-anyevent")-- 2.31.0
T
T
Timothy Sample wrote on 30 Mar 07:27 +0200
[PATCH v2 03/13] gnu: node: Use license prefix.
(address . 47282@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
20210330052743.575-3-samplet@ngyro.com
From: Jelle Licht <jlicht@fsfe.org>
* gnu/packages/node.scm (node)[license]: Use prefix for license.--- gnu/packages/node.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Toggle diff (24 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex a0df3d2cad..82a2ca7ce0 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -26,7 +26,7 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (gnu packages node)- #:use-module ((guix licenses) #:select (expat))+ #:use-module ((guix licenses) #:prefix license:) #:use-module ((guix build utils) #:select (alist-replace)) #:use-module (guix packages) #:use-module (guix derivations)@@ -207,7 +207,7 @@ event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.") (home-page "https://nodejs.org/")- (license expat)+ (license license:expat) (properties '((max-silent-time . 7200) ;2h, needed on ARM (timeout . 21600))))) ;6h -- 2.31.0
T
T
Timothy Sample wrote on 30 Mar 07:27 +0200
[PATCH v2 04/13] gnu: Add node-bootstrap.
(address . 47282@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
20210330052743.575-4-samplet@ngyro.com
From: Jelle Licht <jlicht@fsfe.org>
* gnu/packages/node (node-bootstrap): Add hidden alias for node.--- gnu/packages/node.scm | 5 +++++ 1 file changed, 5 insertions(+)
Toggle diff (18 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 82a2ca7ce0..73d022d87f 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -211,6 +211,11 @@ devices.") (properties '((max-silent-time . 7200) ;2h, needed on ARM (timeout . 21600))))) ;6h +;; This should be the latest version of node that still builds without+;; depending on llhttp.+(define-public node-bootstrap+ (hidden-package node))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
T
T
Timothy Sample wrote on 30 Mar 07:27 +0200
[PATCH v2 05/13] gnu: Add node-semver-bootstrap.
(address . 47282@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
20210330052743.575-5-samplet@ngyro.com
From: Jelle Licht <jlicht@fsfe.org>
* gnu/packages/node.scm (node-semver-bootstrap): New variable.--- gnu/packages/node.scm | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)
Toggle diff (50 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 73d022d87f..773cef3716 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -41,6 +41,7 @@ #:use-module (gnu packages icu4c) #:use-module (gnu packages libevent) #:use-module (gnu packages linux)+ #:use-module (gnu packages node-xyz) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python)@@ -216,6 +217,35 @@ devices.") (define-public node-bootstrap (hidden-package node)) +;; Duplicate of node-semver+(define-public node-semver-bootstrap+ (package+ (name "node-semver")+ (version "7.2.1")+ (source (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/npm/node-semver")+ (commit (string-append "v" version))))+ (file-name (git-file-name name version))+ (sha256+ (base32+ "06biknqb05r9xsmcflm3ygh50pjvdk84x6r79w43kmck4fn3qn5p"))))+ (build-system node-build-system)+ (arguments+ `(#:node ,node-bootstrap+ #:tests? #f+ #:phases+ (modify-phases %standard-phases+ (delete 'configure))))+ (home-page "https://github.com/npm/node-semver")+ (properties '((hidden? . #t)))+ (synopsis "Parses semantic versions strings")+ (description+ "@code{node-semver} is a JavaScript implementation of the+@uref{https://semver.org/, SemVer.org} specification.")+ (license license:isc)))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
T
T
Timothy Sample wrote on 30 Mar 07:27 +0200
[PATCH v2 06/13] gnu: Add node-ms-bootstrap.
(address . 47282@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
20210330052743.575-6-samplet@ngyro.com
From: Jelle Licht <jlicht@fsfe.org>
* gnu/packages/node.scm (node-ms-bootstrap): New variable.--- gnu/packages/node.scm | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)
Toggle diff (52 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 773cef3716..1d17502df7 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -31,8 +31,10 @@ #:use-module (guix packages) #:use-module (guix derivations) #:use-module (guix download)+ #:use-module (guix git-download) #:use-module (guix utils) #:use-module (guix build-system gnu)+ #:use-module (guix build-system node) #:use-module (gnu packages) #:use-module (gnu packages adns) #:use-module (gnu packages base)@@ -246,6 +248,34 @@ devices.") @uref{https://semver.org/, SemVer.org} specification.") (license license:isc))) +(define-public node-ms-bootstrap+ (package+ (name "node-ms")+ (version "2.1.2")+ (source+ (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/vercel/ms.git")+ (commit version)))+ (file-name (git-file-name name version))+ (sha256+ (base32+ "1pjxzbi4j8pinlsc7yxvfrh0b47kb2dc4lfc2rjq4wx5bdwl33fj"))))+ (build-system node-build-system)+ (arguments+ `(#:node ,node-bootstrap+ #:tests? #f+ #:phases+ (modify-phases %standard-phases+ (delete 'configure))))+ (home-page "https://github.com/zeit/ms#readme")+ (properties '((hidden? . #t)))+ (synopsis "Tiny millisecond conversion utility")+ (description "Use this package to easily convert various time+formats to milliseconds.")+ (license license:expat)))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
T
T
Timothy Sample wrote on 30 Mar 07:27 +0200
[PATCH v2 07/13] gnu: Add node-binary-search-bootstrap.
(address . 47282@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
20210330052743.575-7-samplet@ngyro.com
From: Jelle Licht <jlicht@fsfe.org>
* gnu/packages/node.scm (node-binary-search-bootstrap): New variable.--- gnu/packages/node.scm | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+)
Toggle diff (40 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 1d17502df7..21d6052c06 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -276,6 +276,33 @@ devices.") formats to milliseconds.") (license license:expat))) +(define-public node-binary-search-bootstrap+ (package+ (name "node-binary-search")+ (version "1.3.6")+ (source+ (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/darkskyapp/binary-search.git")+ (commit (string-append "v" version))))+ (file-name (git-file-name name version))+ (sha256+ (base32+ "1xr2msdc143cd3xwgq7n3rhzy7j8wrnaidxl0r6l6b6g3mpbpjig"))))+ (build-system node-build-system)+ (arguments+ `(#:node ,node-bootstrap+ #:tests? #f+ #:phases+ (modify-phases %standard-phases+ (delete 'configure))))+ (home-page "https://github.com/darkskyapp/binary-search#readme")+ (properties '((hidden? . #t)))+ (synopsis "Tiny binary search function with comparators")+ (description "This package is a binary search function for Node.js.")+ (license license:cc0)))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
T
T
Timothy Sample wrote on 30 Mar 07:27 +0200
[PATCH v2 08/13] gnu: Add node-debug-bootstrap.
(address . 47282@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
20210330052743.575-8-samplet@ngyro.com
From: Jelle Licht <jlicht@fsfe.org>
* gnu/packages/node.scm (node-debug-bootstrap): New variable.--- gnu/packages/node.scm | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)
Toggle diff (43 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 21d6052c06..6c4c02265d 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -303,6 +303,36 @@ formats to milliseconds.") (description "This package is a binary search function for Node.js.") (license license:cc0))) +(define-public node-debug-bootstrap+ (package+ (name "node-debug")+ (version "4.3.0")+ (source+ (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/visionmedia/debug.git")+ (commit version)))+ (file-name (git-file-name name version))+ (sha256+ (base32+ "08g52r1d4yqcsfdfb7n5if33d4cghaq75gx5n9hj6m6fd8jfp2pi"))))+ (build-system node-build-system)+ (arguments+ `(#:node ,node-bootstrap+ #:tests? #f+ #:phases+ (modify-phases %standard-phases+ (delete 'configure))))+ (inputs `(("node-ms" ,node-ms-bootstrap)))+ (home-page "https://github.com/visionmedia/debug#readme")+ (properties '((hidden? . #t)))+ (synopsis "Small debugging utility")+ (description "This package contains a tiny JavaScript debugging+utility modelled after Node.js core's debugging technique. It works in+Node.js and web browsers.")+ (license license:expat)))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
T
T
Timothy Sample wrote on 30 Mar 07:27 +0200
[PATCH v2 10/13] gnu: Add node-llparse-frontend-bootstrap.
(address . 47282@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
20210330052743.575-10-samplet@ngyro.com
From: Jelle Licht <jlicht@fsfe.org>
* gnu/packages/node.scm (node-llparse-frontend-bootstrap): New variable.--- gnu/packages/node.scm | 56 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+)
Toggle diff (69 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 570d4521ac..16c3decdd4 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -398,6 +398,62 @@ Node.js and web browsers.") (description "This package builds graphs for consumption by llparse.") (license license:expat))) +(define-public node-llparse-frontend-bootstrap+ (package+ (name "node-llparse-frontend")+ (version "3.0.0")+ (source+ (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/indutny/llparse-frontend.git")+ (commit (string-append "v" version))))+ (file-name (git-file-name name version))+ (sha256+ (base32 "1rm9g4ifyip30svm5cgnf0gx7d45jgh4mpf2hkd092xhngmfvicc"))+ (modules '((guix build utils)))+ (snippet+ '(begin+ ;; Fix imports for esbuild.+ ;; https://github.com/evanw/esbuild/issues/477+ (substitute* '("src/frontend.ts"+ "src/code/field-value.ts"+ "src/container/index.ts"+ "src/container/wrap.ts"+ "src/node/sequence.ts"+ "src/node/single.ts"+ "src/node/table-lookup.ts"+ "src/trie/index.ts")+ (("\\* as assert") "assert")+ (("\\* as debugAPI") "debugAPI"))+ #t))))+ (build-system node-build-system)+ (arguments+ `(#:node ,node-bootstrap+ #:tests? #f+ #:phases+ (modify-phases %standard-phases+ (delete 'configure)+ (replace 'build+ (lambda* (#:key inputs #:allow-other-keys)+ (let ((esbuild (string-append (assoc-ref inputs "esbuild")+ "/bin/esbuild")))+ (invoke esbuild+ "--platform=node"+ "--outfile=lib/frontend.js"+ "--bundle"+ "src/frontend.ts")))))))+ (inputs+ `(("node-debug" ,node-debug-bootstrap)+ ("node-llparse-builder" ,node-llparse-builder-bootstrap)))+ (native-inputs+ `(("esbuild" ,esbuild)))+ (home-page "https://github.com/indutny/llparse-frontend#readme")+ (properties '((hidden? . #t)))+ (synopsis "Frontend for the llparse compiler")+ (description "This package is a frontend for the llparse compiler.")+ (license license:expat)))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
T
T
Timothy Sample wrote on 30 Mar 07:27 +0200
[PATCH v2 09/13] gnu: Add node-llparse-builder-bootstrap.
(address . 47282@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
20210330052743.575-9-samplet@ngyro.com
From: Jelle Licht <jlicht@fsfe.org>
* gnu/packages/node.scm (node-llparse-builder-bootstrap): New variable.--- gnu/packages/node.scm | 65 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+)
Toggle diff (78 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 6c4c02265d..570d4521ac 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -333,6 +333,71 @@ utility modelled after Node.js core's debugging technique. It works in Node.js and web browsers.") (license license:expat))) +(define-public node-llparse-builder-bootstrap+ (package+ (name "node-llparse-builder")+ (version "1.5.2")+ (source+ (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/indutny/llparse-builder.git")+ (commit (string-append "v" version))))+ (file-name (git-file-name name version))+ (sha256+ (base32+ "0r82iiwqsb73k2fxw7842rjjiixllxpyc6yl9cq4ma6ybkf6xmzm"))+ (modules '((guix build utils)))+ (snippet+ '(begin+ ;; FIXME: Unneeded runtime dependency.+ ;; https://github.com/indutny/llparse-builder/pull/2+ (substitute* "package.json"+ (("\"@types/debug.*,") ""))+ ;; Fix imports for esbuild.+ ;; https://github.com/evanw/esbuild/issues/477+ (substitute* '("src/node/invoke.ts"+ "src/node/base.ts"+ "src/node/consume.ts"+ "src/node/match.ts"+ "src/node/error.ts"+ "src/node/pause.ts"+ "src/edge.ts"+ "src/utils.ts"+ "src/loop-checker/index.ts"+ "src/loop-checker/lattice.ts"+ "src/code/field.ts"+ "src/span-allocator.ts")+ (("\\* as assert") "assert")+ (("\\* as debugAPI") "debugAPI"))+ #t))))+ (build-system node-build-system)+ (arguments+ `(#:node ,node-bootstrap+ #:tests? #f+ #:phases+ (modify-phases %standard-phases+ (delete 'configure)+ (replace 'build+ (lambda* (#:key inputs #:allow-other-keys)+ (let ((esbuild (string-append (assoc-ref inputs "esbuild")+ "/bin/esbuild")))+ (invoke esbuild+ "--platform=node"+ "--outfile=lib/builder.js"+ "--bundle"+ "src/builder.ts")))))))+ (inputs+ `(("node-binary-search" ,node-binary-search-bootstrap)+ ("node-debug" ,node-debug-bootstrap)))+ (native-inputs+ `(("esbuild" ,esbuild)))+ (home-page "https://github.com/indutny/llparse-builder#readme")+ (properties '((hidden? . #t)))+ (synopsis "Graph builder for consumption by llparse")+ (description "This package builds graphs for consumption by llparse.")+ (license license:expat)))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
T
T
Timothy Sample wrote on 30 Mar 07:27 +0200
[PATCH v2 11/13] gnu: Add node-llparse-bootstrap.
(address . 47282@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
20210330052743.575-11-samplet@ngyro.com
From: Jelle Licht <jlicht@fsfe.org>
* gnu/packages/node.scm (node-llparse-bootstrap): New variable.--- gnu/packages/node.scm | 56 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+)
Toggle diff (69 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 16c3decdd4..5336012e43 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -454,6 +454,62 @@ Node.js and web browsers.") (description "This package is a frontend for the llparse compiler.") (license license:expat))) +(define-public node-llparse-bootstrap+ (package+ (name "node-llparse")+ (version "7.1.0")+ (source+ (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/indutny/llparse.git")+ (commit (string-append "v" version))))+ (file-name (git-file-name name version))+ (sha256+ (base32+ "10da273iy2if88hp79cwms6c8qpsl1fkgzll6gmqyx5yxv5mkyp6"))+ (modules '((guix build utils)))+ (snippet+ '(begin+ ;; Fix imports for esbuild.+ ;; https://github.com/evanw/esbuild/issues/477+ (substitute* '("src/compiler/index.ts"+ "src/implementation/c/node/base.ts"+ "src/implementation/c/node/table-lookup.ts"+ "src/implementation/c/compilation.ts"+ "src/implementation/c/helpers/match-sequence.ts"+ "src/implementation/c/code/mul-add.ts")+ (("\\* as assert") "assert")+ (("\\* as debugAPI") "debugAPI"))+ #t))))+ (build-system node-build-system)+ (arguments+ `(#:node ,node-bootstrap+ #:tests? #f+ #:phases+ (modify-phases %standard-phases+ (delete 'configure)+ (replace 'build+ (lambda* (#:key inputs #:allow-other-keys)+ (let ((esbuild (string-append (assoc-ref inputs "esbuild")+ "/bin/esbuild")))+ (invoke esbuild+ "--platform=node"+ "--outfile=lib/api.js"+ "--bundle"+ "src/api.ts")))))))+ (inputs+ `(("node-debug" ,node-debug-bootstrap)+ ("node-llparse-frontend" ,node-llparse-frontend-bootstrap)))+ (native-inputs+ `(("esbuild" ,esbuild)))+ (home-page "https://github.com/nodejs/llparse#readme")+ (properties '((hidden? . #t)))+ (synopsis "Compile incremental parsers to C code")+ (description "This package offers an API for compiling an incremental+parser definition into a C output.")+ (license license:expat)))+ (define-public libnode (package/inherit node (name "libnode")-- 2.31.0
T
T
Timothy Sample wrote on 30 Mar 07:27 +0200
[PATCH v2 12/13] gnu: Add llhttp-bootstrap.
(address . 47282@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
20210330052743.575-12-samplet@ngyro.com
From: Jelle Licht <jlicht@fsfe.org>
* gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch: New file.* gnu/local.mk (dist_patch_DATA): Add it.* gnu/packages/node.scm (llhttp-bootstrap): New variable.--- gnu/local.mk | 1 + gnu/packages/node.scm | 70 ++++++++++++ .../llhttp-bootstrap-CVE-2020-8287.patch | 100 ++++++++++++++++++ 3 files changed, 171 insertions(+) create mode 100644 gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch
Toggle diff (201 lines)diff --git a/gnu/local.mk b/gnu/local.mkindex 52a021c2a3..5959a563d1 100644--- a/gnu/local.mk+++ b/gnu/local.mk@@ -1366,6 +1366,7 @@ dist_patch_DATA = \ %D%/packages/patches/linux-pam-no-setfsuid.patch \ %D%/packages/patches/lirc-localstatedir.patch \ %D%/packages/patches/lirc-reproducible-build.patch \+ %D%/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch \ %D%/packages/patches/llvm-3.5-fix-clang-build-with-gcc5.patch \ %D%/packages/patches/llvm-9-fix-bitcast-miscompilation.patch \ %D%/packages/patches/llvm-9-fix-lpad-miscompilation.patch \diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 5336012e43..45e5f8feca 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -510,6 +510,76 @@ Node.js and web browsers.") parser definition into a C output.") (license license:expat))) +(define-public llhttp-bootstrap+ (package+ (name "llhttp")+ (version "2.1.3")+ (source (origin+ (method git-fetch)+ (uri (git-reference+ (url "https://github.com/nodejs/llhttp.git")+ (commit (string-append "v" version))))+ (file-name (git-file-name name version))+ (sha256+ (base32+ "0pqj7kyyzr1zs4h9yzn5rdxnxspm3wqgsv00765dd42fszlmrmk8"))+ (patches (search-patches "llhttp-bootstrap-CVE-2020-8287.patch"))+ (modules '((guix build utils)))+ (snippet+ '(begin+ ;; Fix imports for esbuild.+ ;; https://github.com/evanw/esbuild/issues/477+ (substitute* "src/llhttp/http.ts"+ (("\\* as assert") "assert"))+ (substitute* "Makefile"+ (("npx ts-node bin/generate.ts")+ "node bin/generate.js"))+ #t))))+ (build-system gnu-build-system)+ (arguments+ `(#:tests? #f ; no tests+ #:make-flags (list "CLANG=gcc"+ (string-append "DESTDIR=" (assoc-ref %outputs "out"))+ "PREFIX=")+ #:phases+ (modify-phases %standard-phases+ (replace 'configure+ (lambda* (#:key inputs #:allow-other-keys)+ (let ((esbuild (string-append (assoc-ref inputs "esbuild")+ "/bin/esbuild")))+ (invoke esbuild+ "--platform=node"+ "--outfile=bin/generate.js"+ "--bundle" "bin/generate.ts"))))+ (add-before 'install 'create-install-directories+ (lambda* (#:key outputs #:allow-other-keys)+ (let ((out (assoc-ref outputs "out")))+ (for-each (lambda (dir)+ (mkdir-p (string-append out dir)))+ (list "/lib" "/include" "/src"))+ #t)))+ (add-after 'install 'install-src+ (lambda* (#:key outputs #:allow-other-keys)+ (let* ((out (assoc-ref outputs "out"))+ (src-dir (string-append out "/src")))+ (install-file "build/c/llhttp.c" src-dir)+ (install-file "src/native/api.c" src-dir)+ (install-file "src/native/http.c" src-dir)+ #t))))))+ (native-inputs+ `(("esbuild" ,esbuild)+ ("node" ,node-bootstrap)+ ("node-semver" ,node-semver-bootstrap)+ ("node-llparse-bootstrap" ,node-llparse-bootstrap)))+ (home-page "https://github.com/nodejs/llhttp")+ (properties '((hidden? . #t)))+ (synopsis "Parser for HTTP messages")+ (description "This is a rewrite of+@url{https://github.com/nodejs/http-parser, http-parser} using+@url{https://github.com/nodejs/llparse, llparse} to generate the C+source files.")+ (license license:expat)))+ (define-public libnode (package/inherit node (name "libnode")diff --git a/gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch b/gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patchnew file mode 100644index 0000000000..215c920e53--- /dev/null+++ b/gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch@@ -0,0 +1,100 @@+This patch comes from upstream. It corresponds to a patch applied to+the generated C source code for llhttp included in Node.js 14.16.0+(see commit 641f786bb1a1f6eb1ff8750782ed939780f2b31a). That commit+fixes CVE-2020-8287. With this patch, the output of our+llhttp-bootstrap package matches the files included in Node.js 14.16.0+exactly.++commit e9b36ea64709c35ca66094d5cf3787f444029601+Author: Fedor Indutny <fedor@indutny.com>+Date: Sat Oct 10 19:56:01 2020 -0700++ http: unset `F_CHUNKED` on new `Transfer-Encoding`+ + Duplicate `Transfer-Encoding` header should be a treated as a single,+ but with original header values concatenated with a comma separator. In+ the light of this, even if the past `Transfer-Encoding` ended with+ `chunked`, we should be not let the `F_CHUNKED` to leak into the next+ header, because mere presence of another header indicates that `chunked`+ is not the last transfer-encoding token.++diff --git a/src/llhttp/http.ts b/src/llhttp/http.ts+index f4f1a6e..0a0c365 100644+--- a/src/llhttp/http.ts++++ b/src/llhttp/http.ts+@@ -460,11 +460,19 @@ export class HTTP {+ .match([ ' ', '\t' ], n('header_value_discard_ws'))+ .otherwise(checkContentLengthEmptiness);+ ++ // Multiple `Transfer-Encoding` headers should be treated as one, but with++ // values separate by a comma.++ //++ // See: https://tools.ietf.org/html/rfc7230#section-3.2.2++ const toTransferEncoding = this.unsetFlag(++ FLAGS.CHUNKED,++ 'header_value_te_chunked');+++ n('header_value_start')+ .otherwise(this.load('header_state', {+ [HEADER_STATE.UPGRADE]: this.setFlag(FLAGS.UPGRADE, fallback),+ [HEADER_STATE.TRANSFER_ENCODING]: this.setFlag(+- FLAGS.TRANSFER_ENCODING, 'header_value_te_chunked'),++ FLAGS.TRANSFER_ENCODING, toTransferEncoding),+ [HEADER_STATE.CONTENT_LENGTH]: n('header_value_content_length_once'),+ [HEADER_STATE.CONNECTION]: n('header_value_connection'),+ }, 'header_value'));+@@ -847,6 +855,11 @@ export class HTTP {+ return span.start(span.end(this.node(next)));+ }+ ++ private unsetFlag(flag: FLAGS, next: string | Node): Node {++ const p = this.llparse;++ return p.invoke(p.code.and('flags', ~flag), this.node(next));++ }+++ private setFlag(flag: FLAGS, next: string | Node): Node {+ const p = this.llparse;+ return p.invoke(p.code.or('flags', flag), this.node(next));+diff --git a/test/request/transfer-encoding.md b/test/request/transfer-encoding.md+index a7d1681..b0891d6 100644+--- a/test/request/transfer-encoding.md++++ b/test/request/transfer-encoding.md+@@ -353,6 +353,38 @@ off=106 headers complete method=3 v=1/1 flags=200 content_length=0+ off=106 error code=15 reason="Request has invalid `Transfer-Encoding`"+ ```+ ++## POST with `chunked` and duplicate transfer-encoding++++<!-- meta={"type": "request", "noScan": true} -->++```http++POST /post_identity_body_world?q=search#hey HTTP/1.1++Accept: */*++Transfer-Encoding: chunked++Transfer-Encoding: deflate++++World++```++++```log++off=0 message begin++off=5 len=38 span[url]="/post_identity_body_world?q=search#hey"++off=44 url complete++off=54 len=6 span[header_field]="Accept"++off=61 header_field complete++off=62 len=3 span[header_value]="*/*"++off=67 header_value complete++off=67 len=17 span[header_field]="Transfer-Encoding"++off=85 header_field complete++off=86 len=7 span[header_value]="chunked"++off=95 header_value complete++off=95 len=17 span[header_field]="Transfer-Encoding"++off=113 header_field complete++off=114 len=7 span[header_value]="deflate"++off=123 header_value complete++off=125 headers complete method=3 v=1/1 flags=200 content_length=0++off=125 error code=15 reason="Request has invalid `Transfer-Encoding`"++```+++ ## POST with `chunked` before other transfer-coding (lenient)+ + TODO(indutny): should we allow it even in lenient mode? (Consider disabling-- 2.31.0
T
T
Timothy Sample wrote on 30 Mar 07:27 +0200
[PATCH v2 13/13] gnu: Add node-lts.
(address . 47282@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
20210330052743.575-13-samplet@ngyro.com
From: Jelle Licht <jlicht@fsfe.org>
* gnu/packages/node.scm (node-lts): New variable.* guix/build-system/node.scm (default-node): Use it.--- gnu/packages/node.scm | 135 +++++++++++++++++++++++++++++++++++++ guix/build-system/node.scm | 2 +- 2 files changed, 136 insertions(+), 1 deletion(-)
Toggle diff (161 lines)diff --git a/gnu/packages/node.scm b/gnu/packages/node.scmindex 45e5f8feca..249241f110 100644--- a/gnu/packages/node.scm+++ b/gnu/packages/node.scm@@ -580,6 +580,141 @@ parser definition into a C output.") source files.") (license license:expat))) +(define-public node-lts+ (package+ (inherit node)+ (version "14.16.0")+ (source (origin+ (method url-fetch)+ (uri (string-append "https://nodejs.org/dist/v" version+ "/node-v" version ".tar.xz"))+ (sha256+ (base32+ "19nz2mhmn6ikahxqyna1dn25pb5v3z9vsz9zb2flb6zp2yk4hxjf"))+ (modules '((guix build utils)))+ (snippet+ `(begin+ ;; Remove bundled software, where possible+ (for-each delete-file-recursively+ '("deps/cares"+ "deps/icu-small"+ "deps/nghttp2"+ "deps/openssl"+ "deps/zlib"))+ (substitute* "Makefile"+ ;; Remove references to bundled software.+ (("deps/uv/uv.gyp") "")+ (("deps/zlib/zlib.gyp") ""))+ #t))))+ (arguments+ (substitute-keyword-arguments (package-arguments node)+ ((#:configure-flags configure-flags)+ ''("--shared-cares"+ "--shared-libuv"+ "--shared-nghttp2"+ "--shared-openssl"+ "--shared-zlib"+ "--shared-brotli"+ "--with-intl=system-icu"))+ ((#:phases phases)+ `(modify-phases ,phases+ (replace 'configure+ ;; Node's configure script is actually a python script, so we can't+ ;; run it with bash.+ (lambda* (#:key outputs (configure-flags '()) inputs+ #:allow-other-keys)+ (let* ((prefix (assoc-ref outputs "out"))+ (flags (cons (string-append "--prefix=" prefix)+ configure-flags)))+ (format #t "build directory: ~s~%" (getcwd))+ (format #t "configure flags: ~s~%" flags)+ ;; Node's configure script expects the CC environment variable to+ ;; be set.+ (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))+ (apply invoke+ (string-append (assoc-ref inputs "python")+ "/bin/python3")+ "configure" flags))))+ (replace 'patch-files+ (lambda* (#:key inputs #:allow-other-keys)+ ;; Fix hardcoded /bin/sh references.+ (substitute* '("lib/child_process.js"+ "lib/internal/v8_prof_polyfill.js"+ "test/parallel/test-child-process-spawnsync-shell.js"+ "test/parallel/test-fs-write-sigxfsz.js"+ "test/parallel/test-stdio-closed.js"+ "test/sequential/test-child-process-emfile.js")+ (("'/bin/sh'")+ (string-append "'" (which "sh") "'")))++ ;; Fix hardcoded /usr/bin/env references.+ (substitute* '("test/parallel/test-child-process-default-options.js"+ "test/parallel/test-child-process-env.js"+ "test/parallel/test-child-process-exec-env.js")+ (("'/usr/bin/env'")+ (string-append "'" (which "env") "'")))++ ;; FIXME: These tests fail in the build container, but they don't+ ;; seem to be indicative of real problems in practice.+ (for-each delete-file+ '("test/parallel/test-cluster-master-error.js"+ "test/parallel/test-cluster-master-kill.js"))++ ;; These require a DNS resolver.+ (for-each delete-file+ '("test/parallel/test-dns.js"+ "test/parallel/test-dns-lookupService-promises.js"))++ ;; FIXME: This test fails randomly:+ ;; https://github.com/nodejs/node/issues/31213+ (delete-file "test/parallel/test-net-listen-after-destroying-stdin.js")++ ;; FIXME: These tests fail on armhf-linux:+ ;; https://github.com/nodejs/node/issues/31970+ ,@(if (string-prefix? "arm" (%current-system))+ '((for-each delete-file+ '("test/parallel/test-zlib.js"+ "test/parallel/test-zlib-brotli.js"+ "test/parallel/test-zlib-brotli-flush.js"+ "test/parallel/test-zlib-brotli-from-brotli.js"+ "test/parallel/test-zlib-brotli-from-string.js"+ "test/parallel/test-zlib-convenience-methods.js"+ "test/parallel/test-zlib-random-byte-pipes.js"+ "test/parallel/test-zlib-write-after-flush.js")))+ '())++ ;; These tests have an expiry date: they depend on the validity of+ ;; TLS certificates that are bundled with the source. We want this+ ;; package to be reproducible forever, so remove those.+ ;; TODO: Regenerate certs instead.+ (for-each delete-file+ '("test/parallel/test-tls-passphrase.js"+ "test/parallel/test-tls-server-verify.js"))++ ;; Replace pre-generated llhttp sources+ (let ((llhttp (assoc-ref inputs "llhttp")))+ (copy-file (string-append llhttp "/src/llhttp.c")+ "deps/llhttp/src/llhttp.c")+ (copy-file (string-append llhttp "/src/api.c")+ "deps/llhttp/src/api.c")+ (copy-file (string-append llhttp "/src/http.c")+ "deps/llhttp/src/http.c")+ (copy-file (string-append llhttp "/include/llhttp.h")+ "deps/llhttp/include/llhttp.h"))+ #t))))))+ (inputs+ `(("c-ares" ,c-ares)+ ("icu4c" ,icu4c-67)+ ("libuv" ,libuv-for-node)+ ("llhttp" ,llhttp-bootstrap)+ ("google-brotli" ,google-brotli)+ ("nghttp2" ,nghttp2 "lib")+ ("openssl" ,openssl)+ ("zlib" ,zlib)))+ (native-inputs+ (alist-replace "python" (list python-3)+ (package-native-inputs node)))))+ (define-public libnode (package/inherit node (name "libnode")diff --git a/guix/build-system/node.scm b/guix/build-system/node.scmindex 4991ed53a5..98f63f87ef 100644--- a/guix/build-system/node.scm+++ b/guix/build-system/node.scm@@ -39,7 +39,7 @@ "Return the default Node package." ;; Lazily resolve the binding to avoid a circular dependency. (let ((node (resolve-interface '(gnu packages node))))- (module-ref node 'node)))+ (module-ref node 'node-lts))) (define* (lower name #:key source inputs native-inputs outputs system target-- 2.31.0
E
E
Efraim Flashner wrote on 30 Mar 08:59 +0200
Re: [bug#47282] [PATCH v2 12/13] gnu: Add llhttp-bootstrap.
(name . Timothy Sample)(address . samplet@ngyro.com)
YGLMaezm0+Rrqbj3@3900XT
On Tue, Mar 30, 2021 at 01:27:42AM -0400, Timothy Sample wrote:
Toggle quote (62 lines)> From: Jelle Licht <jlicht@fsfe.org>> > * gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch: New file.> * gnu/local.mk (dist_patch_DATA): Add it.> * gnu/packages/node.scm (llhttp-bootstrap): New variable.> ---> gnu/local.mk | 1 +> gnu/packages/node.scm | 70 ++++++++++++> .../llhttp-bootstrap-CVE-2020-8287.patch | 100 ++++++++++++++++++> 3 files changed, 171 insertions(+)> create mode 100644 gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch> > diff --git a/gnu/local.mk b/gnu/local.mk> index 52a021c2a3..5959a563d1 100644> --- a/gnu/local.mk> +++ b/gnu/local.mk> @@ -1366,6 +1366,7 @@ dist_patch_DATA = \> %D%/packages/patches/linux-pam-no-setfsuid.patch \> %D%/packages/patches/lirc-localstatedir.patch \> %D%/packages/patches/lirc-reproducible-build.patch \> + %D%/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch \> %D%/packages/patches/llvm-3.5-fix-clang-build-with-gcc5.patch \> %D%/packages/patches/llvm-9-fix-bitcast-miscompilation.patch \> %D%/packages/patches/llvm-9-fix-lpad-miscompilation.patch \> diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm> index 5336012e43..45e5f8feca 100644> --- a/gnu/packages/node.scm> +++ b/gnu/packages/node.scm> @@ -510,6 +510,76 @@ Node.js and web browsers.")> parser definition into a C output.")> (license license:expat)))> > +(define-public llhttp-bootstrap> + (package> + (name "llhttp")> + (version "2.1.3")> + (source (origin> + (method git-fetch)> + (uri (git-reference> + (url "https://github.com/nodejs/llhttp.git")> + (commit (string-append "v" version))))> + (file-name (git-file-name name version))> + (sha256> + (base32> + "0pqj7kyyzr1zs4h9yzn5rdxnxspm3wqgsv00765dd42fszlmrmk8"))> + (patches (search-patches "llhttp-bootstrap-CVE-2020-8287.patch"))> + (modules '((guix build utils)))> + (snippet> + '(begin> + ;; Fix imports for esbuild.> + ;; https://github.com/evanw/esbuild/issues/477> + (substitute* "src/llhttp/http.ts"> + (("\\* as assert") "assert"))> + (substitute* "Makefile"> + (("npx ts-node bin/generate.ts")> + "node bin/generate.js"))> + #t))))> + (build-system gnu-build-system)> + (arguments> + `(#:tests? #f ; no tests> + #:make-flags (list "CLANG=gcc"
This should probably be cc-for-target
Toggle quote (3 lines)> + (string-append "DESTDIR=" (assoc-ref %outputs "out"))> + "PREFIX=")
And normally DESTDIR is empty and PREFIX is %out. Does it need to beswitched here?
Toggle quote (155 lines)> + #:phases> + (modify-phases %standard-phases> + (replace 'configure> + (lambda* (#:key inputs #:allow-other-keys)> + (let ((esbuild (string-append (assoc-ref inputs "esbuild")> + "/bin/esbuild")))> + (invoke esbuild> + "--platform=node"> + "--outfile=bin/generate.js"> + "--bundle" "bin/generate.ts"))))> + (add-before 'install 'create-install-directories> + (lambda* (#:key outputs #:allow-other-keys)> + (let ((out (assoc-ref outputs "out")))> + (for-each (lambda (dir)> + (mkdir-p (string-append out dir)))> + (list "/lib" "/include" "/src"))> + #t)))> + (add-after 'install 'install-src> + (lambda* (#:key outputs #:allow-other-keys)> + (let* ((out (assoc-ref outputs "out"))> + (src-dir (string-append out "/src")))> + (install-file "build/c/llhttp.c" src-dir)> + (install-file "src/native/api.c" src-dir)> + (install-file "src/native/http.c" src-dir)> + #t))))))> + (native-inputs> + `(("esbuild" ,esbuild)> + ("node" ,node-bootstrap)> + ("node-semver" ,node-semver-bootstrap)> + ("node-llparse-bootstrap" ,node-llparse-bootstrap)))> + (home-page "https://github.com/nodejs/llhttp")> + (properties '((hidden? . #t)))> + (synopsis "Parser for HTTP messages")> + (description "This is a rewrite of> +@url{https://github.com/nodejs/http-parser, http-parser} using> +@url{https://github.com/nodejs/llparse, llparse} to generate the C> +source files.")> + (license license:expat)))> +> (define-public libnode> (package/inherit node> (name "libnode")> diff --git a/gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch b/gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch> new file mode 100644> index 0000000000..215c920e53> --- /dev/null> +++ b/gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch> @@ -0,0 +1,100 @@> +This patch comes from upstream. It corresponds to a patch applied to> +the generated C source code for llhttp included in Node.js 14.16.0> +(see commit 641f786bb1a1f6eb1ff8750782ed939780f2b31a). That commit> +fixes CVE-2020-8287. With this patch, the output of our> +llhttp-bootstrap package matches the files included in Node.js 14.16.0> +exactly.> +> +commit e9b36ea64709c35ca66094d5cf3787f444029601> +Author: Fedor Indutny <fedor@indutny.com>> +Date: Sat Oct 10 19:56:01 2020 -0700> +> + http: unset `F_CHUNKED` on new `Transfer-Encoding`> + > + Duplicate `Transfer-Encoding` header should be a treated as a single,> + but with original header values concatenated with a comma separator. In> + the light of this, even if the past `Transfer-Encoding` ended with> + `chunked`, we should be not let the `F_CHUNKED` to leak into the next> + header, because mere presence of another header indicates that `chunked`> + is not the last transfer-encoding token.> +> +diff --git a/src/llhttp/http.ts b/src/llhttp/http.ts> +index f4f1a6e..0a0c365 100644> +--- a/src/llhttp/http.ts> ++++ b/src/llhttp/http.ts> +@@ -460,11 +460,19 @@ export class HTTP {> + .match([ ' ', '\t' ], n('header_value_discard_ws'))> + .otherwise(checkContentLengthEmptiness);> + > ++ // Multiple `Transfer-Encoding` headers should be treated as one, but with> ++ // values separate by a comma.> ++ //> ++ // See: https://tools.ietf.org/html/rfc7230#section-3.2.2> ++ const toTransferEncoding = this.unsetFlag(> ++ FLAGS.CHUNKED,> ++ 'header_value_te_chunked');> ++> + n('header_value_start')> + .otherwise(this.load('header_state', {> + [HEADER_STATE.UPGRADE]: this.setFlag(FLAGS.UPGRADE, fallback),> + [HEADER_STATE.TRANSFER_ENCODING]: this.setFlag(> +- FLAGS.TRANSFER_ENCODING, 'header_value_te_chunked'),> ++ FLAGS.TRANSFER_ENCODING, toTransferEncoding),> + [HEADER_STATE.CONTENT_LENGTH]: n('header_value_content_length_once'),> + [HEADER_STATE.CONNECTION]: n('header_value_connection'),> + }, 'header_value'));> +@@ -847,6 +855,11 @@ export class HTTP {> + return span.start(span.end(this.node(next)));> + }> + > ++ private unsetFlag(flag: FLAGS, next: string | Node): Node {> ++ const p = this.llparse;> ++ return p.invoke(p.code.and('flags', ~flag), this.node(next));> ++ }> ++> + private setFlag(flag: FLAGS, next: string | Node): Node {> + const p = this.llparse;> + return p.invoke(p.code.or('flags', flag), this.node(next));> +diff --git a/test/request/transfer-encoding.md b/test/request/transfer-encoding.md> +index a7d1681..b0891d6 100644> +--- a/test/request/transfer-encoding.md> ++++ b/test/request/transfer-encoding.md> +@@ -353,6 +353,38 @@ off=106 headers complete method=3 v=1/1 flags=200 content_length=0> + off=106 error code=15 reason="Request has invalid `Transfer-Encoding`"> + ```> + > ++## POST with `chunked` and duplicate transfer-encoding> ++> ++<!-- meta={"type": "request", "noScan": true} -->> ++```http> ++POST /post_identity_body_world?q=search#hey HTTP/1.1> ++Accept: */*> ++Transfer-Encoding: chunked> ++Transfer-Encoding: deflate> ++> ++World> ++```> ++> ++```log> ++off=0 message begin> ++off=5 len=38 span[url]="/post_identity_body_world?q=search#hey"> ++off=44 url complete> ++off=54 len=6 span[header_field]="Accept"> ++off=61 header_field complete> ++off=62 len=3 span[header_value]="*/*"> ++off=67 header_value complete> ++off=67 len=17 span[header_field]="Transfer-Encoding"> ++off=85 header_field complete> ++off=86 len=7 span[header_value]="chunked"> ++off=95 header_value complete> ++off=95 len=17 span[header_field]="Transfer-Encoding"> ++off=113 header_field complete> ++off=114 len=7 span[header_value]="deflate"> ++off=123 header_value complete> ++off=125 headers complete method=3 v=1/1 flags=200 content_length=0> ++off=125 error code=15 reason="Request has invalid `Transfer-Encoding`"> ++```> ++> + ## POST with `chunked` before other transfer-coding (lenient)> + > + TODO(indutny): should we allow it even in lenient mode? (Consider disabling> -- > 2.31.0> > > >
-- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנרGPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351Confidentiality cannot be guaranteed on emails sent or received unencrypted
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEoov0DD5VE3JmLRT3Qarn3Mo9g1EFAmBizGYACgkQQarn3Mo9g1FxFBAApap4rY86TCrFjdQCaQ/dYc5jQW+020JTEL3zBGndnn6npUkJNs0H/6i2d43aoXdRnqMKECFSUPFczv9ft/hZi6uDjpeXs/8Zurxeq6S5TqyiYKbya80lyYotNQGFtLOmH3JNaymFwDRoELyfA7FXDj79Bb7WvW7X9Y/0dAUswxck+6sy08m6OhTYQ2mGty7eG8jTSpbQNae6HFODnmGg6+uIW55vDIhDBaXyT5Gqvkw6Ip6ZcdVOYhAxrPxqc28/MNWWn3Q9n9BxZMfhwVfj5tByVsXOwDHZRJGUb8JzMiiWXvxp5kqRpdJyNcf5Vl73b4TUkijGT/RfWSnx7H9rNy7vyylWD/vE5rSwJKPLR/wn82vK0v3ZJqj4wxUclA2sBl+pXW9vQsAvE/cfG4ySlZaM29R94H8Yq7mIv2pu9jNTftcv9rftKE5810n1eN37F4++ImNZtwK3rpXELj2r3MLevCMX4c5/SX8YhHAmd+18obosBGX4zE+wktntmsdntV6GLMnnZ20Acseez3P1LN+g85tEhpwzv8cE+1uz2xOutfI9GHJlAhGOBltJhA2ZgFBfsJ028zDKBw1ngzIl9O6smRW4pXpmshFLWRZnvZFhU04N5QvGf3uzMIAOjzolMy1OwO9dNpkDeqHeROco2MKP1x5FZXnygAG6aAFjhQY==yTbP-----END PGP SIGNATURE-----

E
E
Efraim Flashner wrote on 30 Mar 09:04 +0200
Re: [bug#47282] [PATCH v2 13/13] gnu: Add node-lts.
(name . Timothy Sample)(address . samplet@ngyro.com)
YGLNaOXpQrJL3v8M@3900XT
On Tue, Mar 30, 2021 at 01:27:43AM -0400, Timothy Sample wrote:
Toggle quote (69 lines)> From: Jelle Licht <jlicht@fsfe.org>> > * gnu/packages/node.scm (node-lts): New variable.> * guix/build-system/node.scm (default-node): Use it.> ---> gnu/packages/node.scm | 135 +++++++++++++++++++++++++++++++++++++> guix/build-system/node.scm | 2 +-> 2 files changed, 136 insertions(+), 1 deletion(-)> > diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm> index 45e5f8feca..249241f110 100644> --- a/gnu/packages/node.scm> +++ b/gnu/packages/node.scm> @@ -580,6 +580,141 @@ parser definition into a C output.")> source files.")> (license license:expat)))> > +(define-public node-lts> + (package> + (inherit node)> + (version "14.16.0")> + (source (origin> + (method url-fetch)> + (uri (string-append "https://nodejs.org/dist/v" version> + "/node-v" version ".tar.xz"))> + (sha256> + (base32> + "19nz2mhmn6ikahxqyna1dn25pb5v3z9vsz9zb2flb6zp2yk4hxjf"))> + (modules '((guix build utils)))> + (snippet> + `(begin> + ;; Remove bundled software, where possible> + (for-each delete-file-recursively> + '("deps/cares"> + "deps/icu-small"> + "deps/nghttp2"> + "deps/openssl"> + "deps/zlib"))> + (substitute* "Makefile"> + ;; Remove references to bundled software.> + (("deps/uv/uv.gyp") "")> + (("deps/zlib/zlib.gyp") ""))> + #t))))> + (arguments> + (substitute-keyword-arguments (package-arguments node)> + ((#:configure-flags configure-flags)> + ''("--shared-cares"> + "--shared-libuv"> + "--shared-nghttp2"> + "--shared-openssl"> + "--shared-zlib"> + "--shared-brotli"> + "--with-intl=system-icu"))> + ((#:phases phases)> + `(modify-phases ,phases> + (replace 'configure> + ;; Node's configure script is actually a python script, so we can't> + ;; run it with bash.> + (lambda* (#:key outputs (configure-flags '()) inputs> + #:allow-other-keys)> + (let* ((prefix (assoc-ref outputs "out"))> + (flags (cons (string-append "--prefix=" prefix)> + configure-flags)))> + (format #t "build directory: ~s~%" (getcwd))> + (format #t "configure flags: ~s~%" flags)> + ;; Node's configure script expects the CC environment variable to> + ;; be set.> + (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
again cc-for-target
Toggle quote (42 lines)> + (apply invoke> + (string-append (assoc-ref inputs "python")> + "/bin/python3")> + "configure" flags))))> + (replace 'patch-files> + (lambda* (#:key inputs #:allow-other-keys)> + ;; Fix hardcoded /bin/sh references.> + (substitute* '("lib/child_process.js"> + "lib/internal/v8_prof_polyfill.js"> + "test/parallel/test-child-process-spawnsync-shell.js"> + "test/parallel/test-fs-write-sigxfsz.js"> + "test/parallel/test-stdio-closed.js"> + "test/sequential/test-child-process-emfile.js")> + (("'/bin/sh'")> + (string-append "'" (which "sh") "'")))> +> + ;; Fix hardcoded /usr/bin/env references.> + (substitute* '("test/parallel/test-child-process-default-options.js"> + "test/parallel/test-child-process-env.js"> + "test/parallel/test-child-process-exec-env.js")> + (("'/usr/bin/env'")> + (string-append "'" (which "env") "'")))> +> + ;; FIXME: These tests fail in the build container, but they don't> + ;; seem to be indicative of real problems in practice.> + (for-each delete-file> + '("test/parallel/test-cluster-master-error.js"> + "test/parallel/test-cluster-master-kill.js"))> +> + ;; These require a DNS resolver.> + (for-each delete-file> + '("test/parallel/test-dns.js"> + "test/parallel/test-dns-lookupService-promises.js"))> +> + ;; FIXME: This test fails randomly:> + ;; https://github.com/nodejs/node/issues/31213> + (delete-file "test/parallel/test-net-listen-after-destroying-stdin.js")> +> + ;; FIXME: These tests fail on armhf-linux:> + ;; https://github.com/nodejs/node/issues/31970> + ,@(if (string-prefix? "arm" (%current-system))
This could probably be changed to ,@(when (target-arm32?)
Toggle quote (66 lines)> + '((for-each delete-file> + '("test/parallel/test-zlib.js"> + "test/parallel/test-zlib-brotli.js"> + "test/parallel/test-zlib-brotli-flush.js"> + "test/parallel/test-zlib-brotli-from-brotli.js"> + "test/parallel/test-zlib-brotli-from-string.js"> + "test/parallel/test-zlib-convenience-methods.js"> + "test/parallel/test-zlib-random-byte-pipes.js"> + "test/parallel/test-zlib-write-after-flush.js")))> + '())> +> + ;; These tests have an expiry date: they depend on the validity of> + ;; TLS certificates that are bundled with the source. We want this> + ;; package to be reproducible forever, so remove those.> + ;; TODO: Regenerate certs instead.> + (for-each delete-file> + '("test/parallel/test-tls-passphrase.js"> + "test/parallel/test-tls-server-verify.js"))> +> + ;; Replace pre-generated llhttp sources> + (let ((llhttp (assoc-ref inputs "llhttp")))> + (copy-file (string-append llhttp "/src/llhttp.c")> + "deps/llhttp/src/llhttp.c")> + (copy-file (string-append llhttp "/src/api.c")> + "deps/llhttp/src/api.c")> + (copy-file (string-append llhttp "/src/http.c")> + "deps/llhttp/src/http.c")> + (copy-file (string-append llhttp "/include/llhttp.h")> + "deps/llhttp/include/llhttp.h"))> + #t))))))> + (inputs> + `(("c-ares" ,c-ares)> + ("icu4c" ,icu4c-67)> + ("libuv" ,libuv-for-node)> + ("llhttp" ,llhttp-bootstrap)> + ("google-brotli" ,google-brotli)> + ("nghttp2" ,nghttp2 "lib")> + ("openssl" ,openssl)> + ("zlib" ,zlib)))> + (native-inputs> + (alist-replace "python" (list python-3)> + (package-native-inputs node)))))> +> (define-public libnode> (package/inherit node> (name "libnode")> diff --git a/guix/build-system/node.scm b/guix/build-system/node.scm> index 4991ed53a5..98f63f87ef 100644> --- a/guix/build-system/node.scm> +++ b/guix/build-system/node.scm> @@ -39,7 +39,7 @@> "Return the default Node package."> ;; Lazily resolve the binding to avoid a circular dependency.> (let ((node (resolve-interface '(gnu packages node))))> - (module-ref node 'node)))> + (module-ref node 'node-lts)))> > (define* (lower name> #:key source inputs native-inputs outputs system target> -- > 2.31.0> > > >
-- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנרGPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351Confidentiality cannot be guaranteed on emails sent or received unencrypted
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEoov0DD5VE3JmLRT3Qarn3Mo9g1EFAmBizWgACgkQQarn3Mo9g1GbcQ/+KZuaJXt/+fPe+vcF8NhN0UGkFYmEHXkfzzamVdi2b2e6vN9GzSAI/A5P6VVzj/Bq3URMwInJSultsni+UkXeUDI+7rw1J6tpPMPPUrmKW5mht0AexATbNQcB777jAix3iqGYnkZjofKkzatO7XQIwE9jvuJS9UTDDRGw7sL07ZBwYUKaZarPPffWUZ4CgMFrbyj3Ge3UseBYlcVMbhh2/RuZzZNZu1er023jEk1USKrhJ7YRM9I5ATNe2QydGVGsmCvhJnAlfXEwjsG3UYVz+m5Eb0oTzbZ1SaoPPv71OTxAF52eSzjm+Zpb44dCYzdLgIf9jTX/8Xn44GOgllgdcp/DU/VrLp88498WcY9gDoGs7Z2PQVOnB+UIrMFahhhr/pspgDxMDCRRjBm3J9TpeqkhCDxzYk/VoFi8tAG/uV1A7SEVzrI1wTFQHOAB5quVg2pV8Qf3Ax8CTu1NFeVtmjw5vGdMCQHfeHEQDtptyxNOrBe80nYYYg4xcllVkW8gS+qg9Var7hFUXrE82KpJt//4QMI3OwYBsbtazoB5ZJ0CeCZy/oXfLvqYddlAUQ2QqpYEtdF9IYXgu2tk9/Y6mJlEZfXKwb3HEP5XXheZt0Fmts808G4SDHyJMkwrmk84m14+Gp37zQnjGf+0fxxh7L6iUo7Gqa67kqpNSu3iHy8==PLBi-----END PGP SIGNATURE-----

J
J
Jelle Licht wrote on 2 Apr 15:17 +0200
Re: [bug#47282] [PATCH v2 12/13] gnu: Add llhttp-bootstrap.
(address . 47282@debbugs.gnu.org)
86k0pk3jwt.fsf@fsfe.org
Efraim Flashner <efraim@flashner.co.il> writes:
Toggle quote (8 lines)> On Tue, Mar 30, 2021 at 01:27:42AM -0400, Timothy Sample wrote:>> + (build-system gnu-build-system)>> + (arguments>> + `(#:tests? #f ; no tests>> + #:make-flags (list "CLANG=gcc">> This should probably be cc-for-target
Fixed in my local version, thanks.
Toggle quote (6 lines)>> + (string-append "DESTDIR=" (assoc-ref %outputs "out"))>> + "PREFIX=")>> And normally DESTDIR is empty and PREFIX is %out. Does it need to be> switched here?
It does.
- Jelle
J
J
Jelle Licht wrote on 2 Apr 15:20 +0200
Re: [bug#47282] [PATCH v2 13/13] gnu: Add node-lts.
(address . 47282@debbugs.gnu.org)
86h7ko3js7.fsf@fsfe.org
Efraim Flashner <efraim@flashner.co.il> writes:
Toggle quote (29 lines)> On Tue, Mar 30, 2021 at 01:27:43AM -0400, Timothy Sample wrote:>> + (arguments>> + (substitute-keyword-arguments (package-arguments node)>> + ((#:configure-flags configure-flags)>> + ''("--shared-cares">> + "--shared-libuv">> + "--shared-nghttp2">> + "--shared-openssl">> + "--shared-zlib">> + "--shared-brotli">> + "--with-intl=system-icu"))>> + ((#:phases phases)>> + `(modify-phases ,phases>> + (replace 'configure>> + ;; Node's configure script is actually a python script, so we can't>> + ;; run it with bash.>> + (lambda* (#:key outputs (configure-flags '()) inputs>> + #:allow-other-keys)>> + (let* ((prefix (assoc-ref outputs "out"))>> + (flags (cons (string-append "--prefix=" prefix)>> + configure-flags)))>> + (format #t "build directory: ~s~%" (getcwd))>> + (format #t "configure flags: ~s~%" flags)>> + ;; Node's configure script expects the CC environment variable to>> + ;; be set.>> + (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))>> again cc-for-target
Ack.
Toggle quote (7 lines)>> [snip]>> + ;; FIXME: These tests fail on armhf-linux:>> + ;; https://github.com/nodejs/node/issues/31970>> + ,@(if (string-prefix? "arm" (%current-system))>> This could probably be changed to ,@(when (target-arm32?)
I changed it to ,@(if (target-arm32?), as otherwise the #f-branchspliced #unspecified into the list.
J
J
Jelle Licht wrote on 2 Apr 18:18 +0200
Re: bug#47282: [PATCH 00/13] node going forward
(name . Timothy Sample)(address . samplet@ngyro.com)(address . 47282-done@debbugs.gnu.org)
86ft083bjz.fsf@fsfe.org
Timothy,
Timothy Sample <samplet@ngyro.com> writes:
Toggle quote (9 lines)> Hi Jelle,>> Jelle Licht <jlicht@fsfe.org> writes:>>> So, some people seem to be interested in this one; please review and test.>> Now that I’ve finally taken the time to dig into what you’ve done here –> I must say it’s very impressive!
If you bang your head against a wall often enough, it will crackeventually. Head or wall, either way works in this metaphor ;-).
Toggle quote (8 lines)> I’ve taken the presumptuous step of re-rolling the series. The reason> is that all the “(delete 'build)” bits were bothering me. I decided to> have the build system check the “package.json” file for a build script> before trying to run it. Since that change required changing all the> other patches, I thought it would be easier to just post the updated> patches. Also, I’m hoping to spare you some trouble (since you’ve> already gone to a lot!).
Makes sense, thanks! Please be presumptuous as often as you'd like.
Toggle quote (6 lines)>> • Change the “Fix incorrect import semantics” comments to “Fix> imports for esbuild”. To me, if TypeScript’s tsc likes the> imports, they are correct TypeScript (despite the esbuild bug> report).
"Something a native speaker of English can make sense of" != "ProperEnglish", and in that same vein I don't think a commmon mistake withworkaround in place is not a mistake.
I really don't care about what ends up in the codebase though, as longas it is clear why we do what we do, which works out just fine with yourcomment.
Toggle quote (7 lines)> The final result is still a little messy, but I don’t think we should> hold this back any longer. It’s a significant step forward, and it puts> us in better shape to improve things incrementally.>> WDYT? Let me know if I made anything worse! :) If the altered patches> look good to you, I suggest you go ahead and push them.
I still adressed some of Efraim's remarks, and pushed it to master justnow.
There are quite some ways to go from here:
* Get the 'binary' importer upstreamable (I will continue with this)
* Properly support cross-compilation of Node and Node-packages
I had a super quick look at this, but it seems that in building node, you build intermediate tools that run on the host. Perhaps some our x-compilation gurus can weigh in.
* Make a Rome-based build system, once Rome does more than linting, to help untangle the knot that is JavaScript-packaging
But for today (and the upcoming release), modern Node on guix \o/
Thanks folks! - Jelle
Closed
T
T
Timothy Sample wrote on 3 Apr 03:19 +0200
(name . Jelle Licht)(address . jlicht@fsfe.org)(address . 47282-done@debbugs.gnu.org)
87mtugjhal.fsf@ngyro.com
Hi,
Jelle Licht <jlicht@fsfe.org> writes:
Toggle quote (15 lines)> Timothy Sample <samplet@ngyro.com> writes:>>> • Change the “Fix incorrect import semantics” comments to “Fix>> imports for esbuild”. To me, if TypeScript’s tsc likes the>> imports, they are correct TypeScript (despite the esbuild bug>> report).>> "Something a native speaker of English can make sense of" != "Proper> English", and in that same vein I don't think a commmon mistake with> workaround in place is not a mistake.>> I really don't care about what ends up in the codebase though, as long> as it is clear why we do what we do, which works out just fine with your> comment.
Heh. You’re right: it’s not a big deal. Thanks for humouring me. :)
Toggle quote (10 lines)>> The final result is still a little messy, but I don’t think we should>> hold this back any longer. It’s a significant step forward, and it puts>> us in better shape to improve things incrementally.>>>> WDYT? Let me know if I made anything worse! :) If the altered patches>> look good to you, I suggest you go ahead and push them.>> I still adressed some of Efraim's remarks, and pushed it to master just> now.
Nice!!
Toggle quote (13 lines)> There are quite some ways to go from here:>> * Get the 'binary' importer upstreamable (I will continue with this)>> * Properly support cross-compilation of Node and Node-packages>> I had a super quick look at this, but it seems that in building node,> you build intermediate tools that run on the host. Perhaps some our> x-compilation gurus can weigh in.>> * Make a Rome-based build system, once Rome does more than linting, to> help untangle the knot that is JavaScript-packaging
Sounds pretty exciting!

-- Tim
Closed
?
Your comment

Commenting via the web interface is currently disabled.

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