guix-patches
[Top][All Lists]
Advanced

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

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


From: Philip McGrath
Subject: [bug#49946] [PATCH 08/31] gnu: node: Patch /usr/bin/env in node-gyp.
Date: Wed, 29 Sep 2021 00:45:56 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0

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 node@10.24.0 as `node` (via `define-public`), but node@14.16.0 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





reply via email to

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