From 5be6505720773c84b669912bbdfc412082baa516 Mon Sep 17 00:00:00 2001 From: Igor Pashev Date: Sat, 5 Oct 2019 09:44:26 +0200 Subject: Add fibers --- npmPackages/fibers/default.nix | 25 ++++++ npmPackages/fibers/nix.patch | 184 +++++++++++++++++++++++++++++++++++++++++ npmPackages/index.nix | 1 + 3 files changed, 210 insertions(+) create mode 100644 npmPackages/fibers/default.nix create mode 100644 npmPackages/fibers/nix.patch 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 +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 (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 {}; -- cgit v1.2.3