Subject: Re: [bug#49946] [PATCH 08/31] gnu: node: Patch /usr/bin/env in node-gyp.

From: Philip McGrath <[email-masked]>
Date: Wed, 29 Sep 2021 00:45:56 -0400

On 9/27/21 6:11 AM, Maxime Devos wrote:
> Philip McGrath schreef op zo 26-09-2021 om 18:02 [-0400]:
>> Looking at `gnu-build-system`, it seems that the `'patch-shebangs` phase
>> only operates on files installed in the "/bin" and "/sbin"
>> subdirectories of the package's outputs. That restriction doesn't make
>> sense to me in general: for instance, what about "/libexec"?
> 
> 'libexec' is included on core-updates{,-frozen}.  I believe the idea of the
> restriction is to avoid patching too much.  E.g., "autoconf" has a file
> share/autoconf/build-aux/config.guess with a #!/bin/sh shebang.  It should
> not be patched, otherwise tarballs created with "make dist" would include
> a store path and hence be Guix-specific and architecture-specific.

That makes some sense. I would have thought checking that the file is 
executable would catch most such cases, but, if this works for 
`gnu-build-system`, great.

As I look at potentially making a patch, another thing that seems odd is 
that `(gnu packages node)` exports [email-masked] as `node` (via 
`define-public`), but [email-masked] as `node-lts`. Normally, if I saw 
that there were packages `node` and `node-lts`, I'd assume that 
`node-lts` was *older*. It's especially confusing because, at the 
command line, `guix install node` refers to what in Scheme you have to 
write as `node-lts`.

I wonder if it was a mistake, and should have used `define` rather than 
`define-public`, since this code:

```
;; This should be the latest version of node that still builds without
;; depending on llhttp.
(define-public node-bootstrap
   (hidden-package node))
```

seems to be trying to hide the older node.

It looks like `node` has only a few dependents, and it seems like at 
least several of them only used it because it had the more obvious name. 
The `node-build-system` uses `node-lts` as the `(default-node)`.

Would it make sense to change the names? Or just to remove the 
`define-public` of `node`?

-Philip