Subject: [bug#36599] [PATCH] gnu: Add node-semver.

From: [email-masked]
Date: Mon, 02 Sep 2019 17:13:09 +0000

Hello everybody,
I also forgot about this patch: I was actually conviced that another 
patch providing node-semver was merged with the new node-build-system.

Here's the updated package (greatly simplified, as foreseen by Julien, 
thanks to the new node-build-system). I added it in a new npm.scm file 
to maintain consistency with i.e. Haskell, Python or Rust. If you think 
this should be put in node.scm, don't hesitate to tell!

Bye,

Giacomo

On 2019-09-02 14:50, Julien Lepiller wrote:
> Le 2 septembre 2019 14:49:08 GMT+02:00, "Ludovic Courtès"
> <[email-masked]> a écrit :
>> Hi Giacomo,
>> 
>> This patch seems to have been forgotten…
>> 
>> Giacomo Leidi <[email-masked]> skribis:
>> 
>>> * gnu/packages/node.scm (node-semver): New variable.
>> 
>> [...]
>> 
>>> +(define-public node-semver
>>> +  (package
>>> +    (name "node-semver")
>>> +    (version "6.2.0")
>>> +    (source (origin
>>> +              (method git-fetch)
>>> +              (uri (git-reference
>>> +                    (url "https://github.com/npm/node-semver.git")
>>> +                    (commit (string-append "v" version))))
>>> +              (file-name (git-file-name name version))
>>> +              (sha256
>>> +               (base32
>>> +
>> "0lqb0v7frrdr7yvxy8b2yg6rp1jilninzk76qnx5qnswxnr4gj5m"))))
>> 
>> The nice thing is that the source doesn’t contain any binaries (or
>> “minified” code),.
>> 
>>> +    (build-system trivial-build-system)
>>> +    (propagated-inputs
>>> +     `(("node" ,node)))
>>> +    (arguments
>>> +     '(#:modules ((guix build utils))
>>> +       #:builder
>>> +       (begin
>>> +         (use-modules (guix build utils))
>>> +         (let* ((source (assoc-ref %build-inputs "source"))
>>> +                (out (assoc-ref %outputs "out"))
>>> +                (semver-js "semver.js")
>>> +                (entry-point (string-append "bin/" semver-js)))
>>> +           (mkdir-p (string-append out "/bin"))
>>> +           (setenv "PATH" (string-append (assoc-ref %build-inputs
>>> +                                                    "node")
>>> +                                         "/bin:" (getenv "PATH")))
>>> +           (map (lambda (file)
>>> +                  (install-file (string-append source "/" file)
>> out))
>>> +                (list semver-js "LICENSE" "package.json"
>> "package-lock.json" "range.bnf"))
>>> +           (install-file (string-append source "/" entry-point)
>>> +                         (string-append out "/bin"))
>>> +           (patch-shebang (string-append out "/" entry-point))
>>> +           #t))))
>> 
>> This installs files in non-standard locations:
>> 
>> --8<---------------cut here---------------start------------->8---
>> $ find $(./pre-inst-env guix build node-semver)
>> /gnu/store/dmclr4h1jwqp02j9bpp9xsr5pzacdmnl-node-semver-6.2.0
>> /gnu/store/dmclr4h1jwqp02j9bpp9xsr5pzacdmnl-node-semver-6.2.0/package-lock.json
>> /gnu/store/dmclr4h1jwqp02j9bpp9xsr5pzacdmnl-node-semver-6.2.0/bin
>> /gnu/store/dmclr4h1jwqp02j9bpp9xsr5pzacdmnl-node-semver-6.2.0/bin/semver.js
>> /gnu/store/dmclr4h1jwqp02j9bpp9xsr5pzacdmnl-node-semver-6.2.0/package.json
>> /gnu/store/dmclr4h1jwqp02j9bpp9xsr5pzacdmnl-node-semver-6.2.0/semver.js
>> /gnu/store/dmclr4h1jwqp02j9bpp9xsr5pzacdmnl-node-semver-6.2.0/range.bnf
>> /gnu/store/dmclr4h1jwqp02j9bpp9xsr5pzacdmnl-node-semver-6.2.0/LICENSE
>> --8<---------------cut here---------------end--------------->8---
>> 
>> bin/ is fine, though should the binary be called ‘semver’ instead of
>> ‘semver.js’?
>> 
>> Could you arrange so that ‘LICENSE’ goes to ‘share/doc/node-semver’?
>> 
>> As for the other files, I don’t know.   Are they needed?  Should they
>> go
>> to share/node-semver?
>> 
>> Thanks in advance, and apologies for the loooong delay!
>> 
>> Ludo’.
> 
> Actually we have a node-build-system now which woull work much better
> than the trivial-build-system.
From 88991ab20c81b86ae82ed9c7102d3cd163ee3f98 Mon Sep 17 00:00:00 2001
From: Giacomo Leidi <[email-masked]>
Date: Mon, 2 Sep 2019 19:03:17 +0200
Subject: [PATCH] gnu: Add node-semver.

* gnu/packages/npm.scm: New file.
* gnu/local.mk: Add it.
* gnu/packages/npm.scm (node-semver): New variable.
---
 gnu/local.mk         |  2 ++
 gnu/packages/npm.scm | 47 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+)
 create mode 100644 gnu/packages/npm.scm

diff --git a/gnu/local.mk b/gnu/local.mk
index dbae857c38..81e52a8b9a 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -22,6 +22,7 @@
 # Copyright © 2018 Maxim Cournoyer <[email-masked]>
 # Copyright © 2019 Guillaume Le Vaillant <[email-masked]>
 # Copyright © 2019 John Soo <[email-masked]>
+# Copyright © 2019 Giacomo Leidi <[email-masked]>
 #
 # This file is part of GNU Guix.
 #
@@ -354,6 +355,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/ninja.scm			\
   %D%/packages/node.scm				\
   %D%/packages/noweb.scm			\
+  %D%/packages/npm.scm				\
   %D%/packages/nss.scm				\
   %D%/packages/ntp.scm				\
   %D%/packages/nutrition.scm			\
diff --git a/gnu/packages/npm.scm b/gnu/packages/npm.scm
new file mode 100644
index 0000000000..1c47dc0500
--- /dev/null
+++ b/gnu/packages/npm.scm
@@ -0,0 +1,47 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Giacomo Leidi <[email-masked]>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages npm)
+  #:use-module (guix build-system node)
+  #:use-module (guix git-download)
+  #:use-module ((guix licenses) #:select (isc))
+  #:use-module (guix packages))
+
+(define-public node-semver
+  (package
+    (name "node-semver")
+    (version "6.3.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/npm/node-semver.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "15xqmj5h1gz2p3v3gczjl07rm75miavqr70xw2fxgz3n880s4iyn"))))
+    (build-system node-build-system)
+    (arguments
+     `(;; FIXME: Tests depend on node-tap
+       #:tests? #f))
+    (home-page "https://github.com/npm/node-semver")
+    (synopsis "Parses semantic versions strings")
+    (description
+     "node-semver is a JavaScript implementation of the
+@uref{https://semver.org/, SemVer.org} specification.")
+    (license isc)))
-- 
2.23.0