apm upgrade from the command line worked, but from within Atom it failed with the following output:
```> [email protected] install /private/var/folders/19/fkg_98p137bd8y8r_5b0nz1m0000gn/T/atom-git-package-clone-116102-73422-1320kos/node_modules/nsfw
node-gyp rebuild
[email protected] /private/var/folders/19/fkg_98p137bd8y8r_5b0nz1m0000gn/T/atom-git-package-clone-116102-73422-1320kos
+-- [email protected]
+-- [email protected]
+-- [email protected]
| -- [email protected]
| +-- [email protected]
| +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| |-- [email protected]
| +-- [email protected]
| | -- [email protected]
| +-- [email protected]
| | +-- [email protected]
| | |-- [email protected]
| | -- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
|-- [email protected]
+-- [email protected]
| +-- [email protected]
| | -- [email protected]
| |-- [email protected]
| +-- [email protected]
| | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | -- [email protected]
| | | +-- [email protected]
| | | |-- [email protected]
| | | +-- [email protected]
| | | -- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | |-- [email protected]
| | +-- [email protected]
| | | +-- [email protected]
| | | | -- [email protected]
| | |-- [email protected]
| | | +-- [email protected]
| | | | +-- [email protected]
| | | | -- [email protected]
| | |-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | | +-- [email protected]
| | | | -- [email protected]
| | |-- [email protected]
| | | +-- [email protected]
| | | -- [email protected]
| | |-- [email protected]
| | +-- [email protected]
| | -- [email protected]
| | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | |-- [email protected]
| | | +-- [email protected]
| | | -- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | |-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | -- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | |-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | | -- [email protected]
| | +-- [email protected]
| | | +-- [email protected]
| | | |-- [email protected]
| | | +-- [email protected]
| | | | +-- [email protected]
| | | | +-- [email protected]
| | | | | -- [email protected]
| | | |-- [email protected]
| | | -- [email protected]
| | |-- [email protected]
| | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | -- [email protected]
| | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | | +-- [email protected]
| | | | +-- [email protected]
| | | |-- [email protected]
| | | -- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | |-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | | -- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | |-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | | -- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | |-- [email protected]
| | -- [email protected]
|-- [email protected]
| -- [email protected]
| +-- [email protected]
| +-- [email protected]
| |-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| -- [email protected]
+-- [email protected]
|-- [email protected]
+-- [email protected]
+-- [email protected]
| -- [email protected]
|-- [email protected]
| +-- [email protected]
| -- [email protected]
+-- [email protected]
|-- [email protected]
`-- [email protected]
(node) warning: possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at TLSSocket.addListener (events.js:239:17)
at TLSSocket.Readable.on (_stream_readable.js:673:33)
at Request.
at emitOne (events.js:77:13)
at Request.emit (events.js:169:7)
at ClientRequest.
at emitOne (events.js:82:20)
at ClientRequest.emit (events.js:169:7)
at tickOnSocket (_http_client.js:502:7)
at onSocketNT (_http_client.js:514:5)
(node) warning: possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at TLSSocket.addListener (events.js:239:17)
at TLSSocket.Readable.on (_stream_readable.js:673:33)
at Request.
at emitOne (events.js:77:13)
at Request.emit (events.js:169:7)
at ClientRequest.
at emitOne (events.js:82:20)
at ClientRequest.emit (events.js:169:7)
at tickOnSocket (_http_client.js:502:7)
at onSocketNT (_http_client.js:514:5)
(node) warning: possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at TLSSocket.addListener (events.js:239:17)
at TLSSocket.Readable.on (_stream_readable.js:673:33)
at Request.
at emitOne (events.js:77:13)
at Request.emit (events.js:169:7)
at ClientRequest.
at emitOne (events.js:82:20)
at ClientRequest.emit (events.js:169:7)
at tickOnSocket (_http_client.js:502:7)
at onSocketNT (_http_client.js:514:5)
(node) warning: possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at TLSSocket.addListener (events.js:239:17)
at TLSSocket.Readable.on (_stream_readable.js:673:33)
at Request.
at emitOne (events.js:77:13)
at Request.emit (events.js:169:7)
at ClientRequest.
at emitOne (events.js:82:20)
at ClientRequest.emit (events.js:169:7)
at tickOnSocket (_http_client.js:502:7)
at onSocketNT (_http_client.js:514:5)
(node) warning: possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at TLSSocket.addListener (events.js:239:17)
at TLSSocket.Readable.on (_stream_readable.js:673:33)
at Request.
at emitOne (events.js:77:13)
at Request.emit (events.js:169:7)
at ClientRequest.
at emitOne (events.js:82:20)
at ClientRequest.emit (events.js:169:7)
at tickOnSocket (_http_client.js:502:7)
at onSocketNT (_http_client.js:514:5)
(node) warning: possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at TLSSocket.addListener (events.js:239:17)
at TLSSocket.Readable.on (_stream_readable.js:673:33)
at Request.
at emitOne (events.js:77:13)
at Request.emit (events.js:169:7)
at ClientRequest.
at emitOne (events.js:82:20)
at ClientRequest.emit (events.js:169:7)
at tickOnSocket (_http_client.js:502:7)
at onSocketNT (_http_client.js:514:5)
(node) warning: possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at TLSSocket.addListener (events.js:239:17)
at TLSSocket.Readable.on (_stream_readable.js:673:33)
at Request.
at emitOne (events.js:77:13)
at Request.emit (events.js:169:7)
at ClientRequest.
at emitOne (events.js:82:20)
at ClientRequest.emit (events.js:169:7)
at tickOnSocket (_http_client.js:502:7)
at onSocketNT (_http_client.js:514:5)
(node) warning: possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at TLSSocket.addListener (events.js:239:17)
at TLSSocket.Readable.on (_stream_readable.js:673:33)
at Request.
at emitOne (events.js:77:13)
at Request.emit (events.js:169:7)
at ClientRequest.
at emitOne (events.js:82:20)
at ClientRequest.emit (events.js:169:7)
at tickOnSocket (_http_client.js:502:7)
at onSocketNT (_http_client.js:514:5)
make: * No rule to make target ../../../../../../../../../../Applications/Atom', needed byMakefile'. Stop.
gyp ERR! build error
gyp ERR! stack Error: make failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/Applications/Atom Beta.app/Contents/Resources/app/apm/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack at emitTwo (events.js:87:13)
gyp ERR! stack at ChildProcess.emit (events.js:172:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Darwin 16.1.0
gyp ERR! command "/Applications/Atom Beta.app/Contents/Resources/app/apm/bin/node" "/Applications/Atom Beta.app/Contents/Resources/app/apm/node_modules/.bin/node-gyp" "rebuild"
gyp ERR! cwd /private/var/folders/19/fkg_98p137bd8y8r_5b0nz1m0000gn/T/atom-git-package-clone-116102-73422-1320kos/node_modules/nsfw
gyp ERR! node -v v4.4.5
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok
npm ERR! Darwin 16.1.0
npm ERR! argv "/Applications/Atom Beta.app/Contents/Resources/app/apm/bin/node" "/Applications/Atom Beta.app/Contents/Resources/app/apm/node_modules/npm/bin/npm-cli.js" "--globalconfig" "/Users/iolsen/.atom/.apm/.apmrc" "--userconfig" "/Users/iolsen/.atom/.apmrc" "install" "--runtime=electron" "--target=1.3.6" "--arch=x64"
npm ERR! node v4.4.5
npm ERR! npm v3.10.5
npm ERR! code ELIFECYCLE
npm ERR! [email protected] install: node-gyp rebuild
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the nsfw package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs nsfw
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls nsfw
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR! /private/var/folders/19/fkg_98p137bd8y8r_5b0nz1m0000gn/T/atom-git-package-clone-116102-73422-1320kos/npm-debug.log```
@iolsen are you still seeing this
This may have been fixed by https://github.com/atom/atom/pull/13042.
Unfortunately I'm up-to-date at the moment, but I'll try it again when I can.
I'm still seeing this trying to update within 1.14.0-beta0.
Updating to latest sha failed.Hide output…
> [email protected] install /private/var/folders/19/fkg_98p137bd8y8r_5b0nz1m0000gn/T/atom-git-package-clone-117011-854-11cp3bh/node_modules/nsfw
> node-gyp rebuild
[email protected] /private/var/folders/19/fkg_98p137bd8y8r_5b0nz1m0000gn/T/atom-git-package-clone-117011-854-11cp3bh
+-- [email protected]
+-- [email protected]
| +-- [email protected]
| | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | | `-- [email protected]
| | | +-- [email protected]
| | | `-- [email protected]
| | +-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | | `-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| +-- [email protected]
| | +-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| | `-- [email protected]
| | +-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| `-- [email protected]
+-- [email protected]
| +-- [email protected]
| | `-- [email protected]
| | `-- [email protected]
| | `-- [email protected]
| `-- [email protected]
+-- [email protected]
| +-- [email protected]
| `-- [email protected]
+-- [email protected]
| +-- [email protected]
| `-- [email protected]
+-- [email protected]
| `-- [email protected]
+-- [email protected]
+-- [email protected]
| `-- [email protected]
+-- [email protected]
| +-- [email protected]
| | `-- [email protected]
| `-- [email protected]
+-- [email protected]
| `-- [email protected]
+-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| `-- [email protected]
+-- [email protected]
+-- [email protected]
+-- [email protected]
+-- [email protected]
| `-- [email protected]
| +-- [email protected]
| +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| | +-- [email protected]
| | | `-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| `-- [email protected]
+-- [email protected]
| +-- [email protected]
| | `-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | `-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | `-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | `-- [email protected]
| | +-- [email protected]
| | | +-- [email protected]
| | | | `-- [email protected]
| | | `-- [email protected]
| | | +-- [email protected]
| | | | +-- [email protected]
| | | | `-- [email protected]
| | | `-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | | +-- [email protected]
| | | `-- [email protected]
| | | +-- [email protected]
| | | `-- [email protected]
| | | `-- [email protected]
| | +-- [email protected]
| | `-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | | `-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | | `-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | | `-- [email protected]
| | +-- [email protected]
| | | +-- [email protected]
| | | | `-- [email protected]
| | | +-- [email protected]
| | | | +-- [email protected]
| | | | +-- [email protected]
| | | | | `-- [email protected]
| | | | `-- [email protected]
| | | `-- [email protected]
| | | `-- [email protected]
| | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | `-- [email protected]
| | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | | +-- [email protected]
| | | | +-- [email protected]
| | | | `-- [email protected]
| | | `-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | | `-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | | `-- [email protected]
| | | +-- [email protected]
| | | +-- [email protected]
| | | `-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | | `-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | | `-- [email protected]
| | +-- [email protected]
| | `-- [email protected]
| `-- [email protected]
| `-- [email protected]
| +-- [email protected]
| +-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| `-- [email protected]
+-- [email protected]
| `-- [email protected]
+-- [email protected]
+-- [email protected]
+-- [email protected]
| +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | | +-- [email protected]
| | | | `-- [email protected]
| | | | `-- [email protected]
| | | `-- [email protected]
| | +-- [email protected]
| | | `-- [email protected]
| | +-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| `-- [email protected]
+-- [email protected]
+-- [email protected]
| `-- [email protected]
+-- [email protected]
+-- [email protected]
| `-- [email protected]
+-- [email protected]
`-- [email protected]
(node) warning: possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at TLSSocket.addListener (events.js:239:17)
at TLSSocket.Readable.on (_stream_readable.js:673:33)
at Request.<anonymous> (/Applications/Atom Beta.app/Contents/Resources/app/apm/node_modules/npm-registry-client/lib/request.js:153:7)
at emitOne (events.js:77:13)
at Request.emit (events.js:169:7)
at ClientRequest.<anonymous> (/Applications/Atom Beta.app/Contents/Resources/app/apm/node_modules/request/request.js:823:10)
at emitOne (events.js:82:20)
at ClientRequest.emit (events.js:169:7)
at tickOnSocket (_http_client.js:502:7)
at onSocketNT (_http_client.js:514:5)
(node) warning: possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at TLSSocket.addListener (events.js:239:17)
at TLSSocket.Readable.on (_stream_readable.js:673:33)
at Request.<anonymous> (/Applications/Atom Beta.app/Contents/Resources/app/apm/node_modules/npm-registry-client/lib/request.js:153:7)
at emitOne (events.js:77:13)
at Request.emit (events.js:169:7)
at ClientRequest.<anonymous> (/Applications/Atom Beta.app/Contents/Resources/app/apm/node_modules/request/request.js:823:10)
at emitOne (events.js:82:20)
at ClientRequest.emit (events.js:169:7)
at tickOnSocket (_http_client.js:502:7)
at onSocketNT (_http_client.js:514:5)
(node) warning: possible EventEmitter memory leak detected. 11 error listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at TLSSocket.addListener (events.js:239:17)
at TLSSocket.Readable.on (_stream_readable.js:673:33)
at Request.<anonymous> (/Applications/Atom Beta.app/Contents/Resources/app/apm/node_modules/npm-registry-client/lib/request.js:153:7)
at emitOne (events.js:77:13)
at Request.emit (events.js:169:7)
at ClientRequest.<anonymous> (/Applications/Atom Beta.app/Contents/Resources/app/apm/node_modules/request/request.js:823:10)
at emitOne (events.js:82:20)
at ClientRequest.emit (events.js:169:7)
at tickOnSocket (_http_client.js:502:7)
at onSocketNT (_http_client.js:514:5)
make: *** No rule to make target `../../../../../../../../../../Applications/Atom', needed by `Makefile'. Stop.
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/Applications/Atom Beta.app/Contents/Resources/app/apm/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack at emitTwo (events.js:87:13)
gyp ERR! stack at ChildProcess.emit (events.js:172:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Darwin 16.1.0
gyp ERR! command "/Applications/Atom Beta.app/Contents/Resources/app/apm/bin/node" "/Applications/Atom Beta.app/Contents/Resources/app/apm/node_modules/.bin/node-gyp" "rebuild"
gyp ERR! cwd /private/var/folders/19/fkg_98p137bd8y8r_5b0nz1m0000gn/T/atom-git-package-clone-117011-854-11cp3bh/node_modules/nsfw
gyp ERR! node -v v4.4.5
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok
npm ERR! Darwin 16.1.0
npm ERR! argv "/Applications/Atom Beta.app/Contents/Resources/app/apm/bin/node" "/Applications/Atom Beta.app/Contents/Resources/app/apm/node_modules/npm/bin/npm-cli.js" "--globalconfig" "/Users/iolsen/.atom/.apm/.apmrc" "--userconfig" "/Users/iolsen/.atom/.apmrc" "install" "--runtime=electron" "--target=1.3.13" "--arch=x64"
npm ERR! node v4.4.5
npm ERR! npm v3.10.5
npm ERR! code ELIFECYCLE
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the nsfw package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs nsfw
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls nsfw
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR! /private/var/folders/19/fkg_98p137bd8y8r_5b0nz1m0000gn/T/atom
As before, apm update worked fine:
iolsen:~/github/atom/atom (master=)$ apm update
Package Updates Available (1)
└── github dc57ad95 -> fcf47497
Would you like to install these updates? (yes)
Cloning https://github.com/atom/github.git ✓
Moving github to /Users/iolsen/.atom/packages/github ✓
This looks like the same thing as atom/github#427. Basically, apm-beta fails to build native extensions when there's whitespace in the path, which is always the case for beta-channel installs.
It's already been fixed in atom/apm#666, but not released. Worth a hotfix do you think?
Unless I'm missing something, https://github.com/atom/apm/issues/666 is a Windows-only fix?
Once we do have a fix for Mac, I'm 👍 on a hotfix for beta.
@iolsen Oh you're right... @damieng's commit only touches .cmd files. I'm guessing that there's a similar fix for the bash scripts... ?
I'll see if I can repro and correct. 🔧
Yeah sorry guys I've only been fixing the Windows areas with spaces in the name - wasn't aware we also had this issue on macOS/Linux.
Yeah sorry guys I've only been fixing the Windows areas with spaces in the name - wasn't aware we also had this issue on macOS/Linux.
Turns out I was wrong about this. It's _this_ issue (atom/apm#499), which is fundamentally a node-gyp problem (nodejs/node-gyp#65) which has been open for... four years now.
On one hand, this won't be a one-line hotfix like I was hoping it would. On the other, this is actually breaking beta install of _any_ Atom package that has any native dependency.
It looks like node-gyp lets you interpose custom generators for build files (as a Python module), which means that I should be able to modify the built-in Makefile generator as a vendored file in apm and configure node-gyp to use the patched version instead. That'd let us unbreak apm-beta install without having to wait for PR to node-gyp (then a release, then a version-bump in npm...) to make its way through the pipeline.
I have a PR that fixes this now at atom/apm#673. :sparkles:
Just needs tests, then an upstream patch to gyp.
Fixed upstream!
Most helpful comment
I have a PR that fixes this now at atom/apm#673. :sparkles:
Just needs tests, then an upstream patch to gyp.