aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2019-10-05 09:44:26 +0200
committerIgor Pashev <pashev.igor@gmail.com>2019-10-05 09:44:26 +0200
commit5be6505720773c84b669912bbdfc412082baa516 (patch)
treef118417c6ea8304eef4e8d0f32225f0d32442c35
parenta556e2837a4f96a81e5fe1bd9134c19399b50748 (diff)
downloadnpm.nix-5be6505720773c84b669912bbdfc412082baa516.tar.gz
Add fibers
-rw-r--r--npmPackages/fibers/default.nix25
-rw-r--r--npmPackages/fibers/nix.patch184
-rw-r--r--npmPackages/index.nix1
3 files changed, 210 insertions, 0 deletions
diff --git a/npmPackages/fibers/default.nix b/npmPackages/fibers/default.nix
new file mode 100644
index 0000000..4f35ede
--- /dev/null
+++ b/npmPackages/fibers/default.nix
@@ -0,0 +1,25 @@
+{ fetchgit, buildNpmPackage, python }:
+
+buildNpmPackage {
+ pname = "fibers";
+ version = "4.0.1";
+ src = fetchgit {
+ url = "https://github.com/laverdet/node-fibers.git";
+ rev = "5c24f960bc8d2a5a4e1aaf5de5ded3587566a86f";
+ sha256 = "16mdy2i04zhi6qb775iq1izwn839235k59hpqyp1b5qmxd7h3gnp";
+ };
+
+ meta = {
+ description = "Cooperative multi-tasking for Javascript";
+ homepage = "https://github.com/laverdet/node-fibers";
+ license = "MIT";
+ };
+
+ buildInputs = [ python ];
+
+ patches = [ ./nix.patch ];
+
+ npmInputs = [
+ ];
+}
+
diff --git a/npmPackages/fibers/nix.patch b/npmPackages/fibers/nix.patch
new file mode 100644
index 0000000..52a164b
--- /dev/null
+++ b/npmPackages/fibers/nix.patch
@@ -0,0 +1,184 @@
+commit 42c2e3daa2a2858720dbce2cc328610b1a89f928
+Author: Igor Pashev <pashev.igor@gmail.com>
+Date: Sat Oct 5 09:37:14 2019 +0200
+
+ Patch for building from source with Nix
+
+diff --git a/build.js b/build.js
+deleted file mode 100755
+index 7a93f0e..0000000
+--- a/build.js
++++ /dev/null
+@@ -1,110 +0,0 @@
+-#!/usr/bin/env node
+-var cp = require('child_process'),
+- fs = require('fs'),
+- path = require('path'),
+- detectLibc = require('detect-libc');
+-
+-// Parse args
+-var force = false, debug = false;
+-var
+- arch = process.arch,
+- platform = process.platform;
+-var args = process.argv.slice(2).filter(function(arg) {
+- if (arg === '-f') {
+- force = true;
+- return false;
+- } else if (arg.substring(0, 13) === '--target_arch') {
+- arch = arg.substring(14);
+- } else if (arg === '--debug') {
+- debug = true;
+- }
+- return true;
+-});
+-if (!debug) {
+- args.push('--release');
+-}
+-if (!{ia32: true, x64: true, arm: true, arm64: true, ppc: true, ppc64: true, s390: true, s390x: true}.hasOwnProperty(arch)) {
+- console.error('Unsupported (?) architecture: `'+ arch+ '`');
+- process.exit(1);
+-}
+-
+-// Test for pre-built library
+-var modPath = platform+ '-'+ arch+ '-'+ process.versions.modules+ ((platform === 'linux') ? '-'+ detectLibc.family : '');
+-if (!force) {
+- try {
+- fs.statSync(path.join(__dirname, 'bin', modPath, 'fibers.node'));
+- console.log('`'+ modPath+ '` exists; testing');
+- cp.execFile(process.execPath, ['quick-test'], function(err, stdout, stderr) {
+- if (err || stdout !== 'pass' || stderr) {
+- console.log('Problem with the binary; manual build incoming');
+- build();
+- } else {
+- console.log('Binary is fine; exiting');
+- }
+- });
+- } catch (ex) {
+- // Stat failed
+- build();
+- }
+-} else {
+- build();
+-}
+-
+-// Build it
+-function build() {
+- if (process.versions.electron) {
+- args.push('--target='+ process.versions.electron, '--dist-url=https://atom.io/download/atom-shell');
+- }
+- cp.spawn(
+- process.platform === 'win32' ? 'node-gyp.cmd' : 'node-gyp',
+- ['rebuild'].concat(args),
+- {stdio: [process.stdin, process.stdout, process.stderr]})
+- .on('exit', function(err) {
+- if (err) {
+- console.error(
+- 'node-gyp exited with code: '+ err+ '\n'+
+- 'Please make sure you are using a supported platform and node version. If you\n'+
+- 'would like to compile fibers on this machine please make sure you have setup your\n'+
+- 'build environment--\n'+
+- 'Windows + OS X instructions here: https://github.com/nodejs/node-gyp\n'+
+- 'Ubuntu users please run: `sudo apt-get install g++ build-essential`\n'+
+- 'RHEL users please run: `yum install gcc-c++` and `yum groupinstall \'Development Tools\'` \n'+
+- 'Alpine users please run: `sudo apk add python make g++`'
+- );
+- return process.exit(err);
+- }
+- afterBuild();
+- })
+- .on('error', function(err) {
+- console.error(
+- 'node-gyp not found! Please ensure node-gyp is in your PATH--\n'+
+- 'Try running: `sudo npm install -g node-gyp`'
+- );
+- console.log(err.message);
+- process.exit(1);
+- });
+-}
+-
+-// Move it to expected location
+-function afterBuild() {
+- var targetPath = path.join(__dirname, 'build', debug ? 'Debug' : 'Release', 'fibers.node');
+- var installPath = path.join(__dirname, 'bin', modPath, 'fibers.node');
+-
+- try {
+- fs.mkdirSync(path.join(__dirname, 'bin', modPath));
+- } catch (ex) {}
+-
+- try {
+- fs.statSync(targetPath);
+- } catch (ex) {
+- console.error('Build succeeded but target not found');
+- process.exit(1);
+- }
+- fs.renameSync(targetPath, installPath);
+- console.log('Installed in `'+ installPath+ '`');
+- if (process.versions.electron) {
+- process.nextTick(function() {
+- require('electron').app.quit();
+- });
+- }
+-}
+diff --git a/fibers.js b/fibers.js
+index 960d311..78d83e6 100644
+--- a/fibers.js
++++ b/fibers.js
+@@ -1,27 +1,11 @@
+ if (process.fiberLib) {
+ module.exports = process.fiberLib;
+ } else {
+- var fs = require('fs'), path = require('path'), detectLibc = require('detect-libc');
+
+ // Seed random numbers [gh-82]
+ Math.random();
+
+- // Look for binary for this platform
+- var modPath = path.join(__dirname, 'bin', process.platform+ '-'+ process.arch+ '-'+ process.versions.modules+
+- ((process.platform === 'linux') ? '-'+ detectLibc.family : ''), 'fibers');
+- try {
+- // Pull in fibers implementation
+- process.fiberLib = module.exports = require(modPath).Fiber;
+- } catch (ex) {
+- // No binary!
+- console.error(
+- '## There is an issue with `node-fibers` ##\n'+
+- '`'+ modPath+ '.node` is missing.\n\n'+
+- 'Try running this to fix the issue: '+ process.execPath+ ' '+ __dirname.replace(' ', '\\ ')+ '/build'
+- );
+- console.error(ex.stack || ex.message || ex);
+- throw new Error('Missing binary. See message above.');
+- }
++ process.fiberLib = module.exports = require('./build/Release/fibers.node').Fiber;
+
+ setupAsyncHacks(module.exports);
+ }
+diff --git a/package.json b/package.json
+index 4f491b1..c887684 100644
+--- a/package.json
++++ b/package.json
+@@ -6,10 +6,9 @@
+ "fiber", "fibers", "coroutine", "thread", "async", "parallel", "worker", "future", "promise"],
+ "homepage": "https://github.com/laverdet/node-fibers",
+ "author": "Marcel Laverdet <marcel@laverdet.com> (https://github.com/laverdet/)",
+- "main": "fibers",
++ "main": "fibers.js",
+ "scripts": {
+- "install": "node build.js || nodejs build.js",
+- "test": "node test.js || nodejs test.js"
++ "test": "node test.js"
+ },
+ "repository": {
+ "type": "git",
+@@ -19,7 +18,8 @@
+ "engines": {
+ "node": ">=10.0.0"
+ },
+- "dependencies": {
+- "detect-libc": "^1.0.3"
+- }
++ "files": [
++ "build/Release/fibers.node",
++ "fibers.js"
++ ]
+ }
diff --git a/npmPackages/index.nix b/npmPackages/index.nix
index 6aeebb4..24720f3 100644
--- a/npmPackages/index.nix
+++ b/npmPackages/index.nix
@@ -7,6 +7,7 @@ in {
chartjs-color-string = callPackage ./chartjs-color-string {};
color-convert = callPackage ./color-convert {};
color-name = callPackage ./color-name {};
+ fibers = callPackage ./fibers {};
minimist = callPackage ./minimist {};
mkdirp = callPackage ./mkdirp {};
npm4nix = callPackage ./npm4nix {};