at 15.09-beta 96 lines 3.4 kB view raw
1{ 2 stdenv, pkgs, nodejs 3 4 # Self-reference 5, self 6 7 # Needed natives for installation 8, neededNatives ? [pkgs.python] ++ stdenv.lib.optionals stdenv.isLinux [ pkgs.utillinux ] 9 10 # Attribute set of generated packages 11, generated ? pkgs.callPackage ./node-packages-generated.nix { inherit self; } 12 13 # Attribute set of overrides 14, overrides ? {} 15, ... 16} @ args: 17 18with stdenv.lib; 19 20let 21 removeDeps = remove: deps: filterAttrs (n: d: all (r: r != d.pkgName) remove) deps; 22 replaceDep = replace: deps: mapAttrs (n: d: if d.pkgName == replace.pkgName then replace else d) deps; 23in rec { 24 overrides = { 25 phantomjs.buildInputs = [ pkgs.phantomjs ]; 26 "node-expat".buildInputs = [ pkgs.expat ]; 27 "node-stringprep".buildInputs = [ pkgs.icu pkgs.which ]; 28 "node-protobuf".buildInputs = [ pkgs.protobuf ]; 29 30 "tap-0.3.3".patchPhase = '' 31 substituteInPlace package.json --replace '"tap-consumer",' "" 32 ''; 33 "node-uptime" = (p: { 34 # Net-ping is not really used 35 patchPhase = '' 36 ${self.json}/bin/json -I -f package.json -e 'delete this.dependencies["net-ping"]' 37 ''; 38 deps = removeDeps ["net-ping"] p.deps; 39 }); 40 bipio = (p: { 41 patchPhase = '' 42 substituteInPlace src/bootstrap.js --replace "memwatch = require('memwatch')," "" 43 ${self.json}/bin/json -I -f package.json -e 'this.scripts.install=""' 44 ${self.json}/bin/json -I -f package.json -e 'delete this.dependencies.sleep' 45 ${self.json}/bin/json -I -f package.json -e 'delete this.dependencies.memwatch' 46 ${self.json}/bin/json -I -f package.json -e 'delete this.dependencies["webkit-devtools-agent"]' 47 ''; 48 deps = replaceDep self.sleep (removeDeps ["memwatch" "webkit-devtools-agent"] p.deps); 49 }); 50 bip-pod.patchPhase = '' 51 substituteInPlace index.js --replace \ 52 "__dirname + (literal ? '/' : '/../bip-pod-') + podName" \ 53 "(literal ? __dirname + '/' : \"bip-pod-\") + podName" 54 ''; 55 webdrvr.preBuild = '' 56 mkdir ../webdrvr 57 ln -s ${pkgs.fetchurl { 58 url = "https://selenium-release.storage.googleapis.com/2.43/selenium-server-standalone-2.43.1.jar"; 59 sha1 = "ef1b5f8ae9c99332f99ba8794988a1d5b974d27b"; 60 }} ../webdrvr/selenium-server-standalone-2.43.1.jar 61 ln -s ${pkgs.fetchurl { 62 url = "http://chromedriver.storage.googleapis.com/2.10/chromedriver_linux64.zip"; 63 sha1 = "26220f7e43ee3c0d714860db61c4d0ecc9bb3d89"; 64 }} ../webdrvr/chromedriver_linux64.zip 65 ''; 66 } // args.overrides or {}; 67 68 # Apply overrides and back compatiblity transformations 69 buildNodePackage = {...} @ args: 70 let 71 pkg = makeOverridable ( 72 pkgs.callPackage ../development/web/nodejs/build-node-package.nix { 73 inherit nodejs neededNatives; 74 } 75 ) (args // (optionalAttrs (isList args.src) { 76 # Backwards compatibility 77 src = head args.src; 78 }) // (optionalAttrs (attrByPath ["passthru" "names"] null args != null) { 79 pkgName = head args.passthru.names; 80 })); 81 82 override = overrides.${args.name} or overrides.${pkg.pkgName} or {}; 83 84 in pkg.override override; 85 86 # Backwards compatibility 87 patchSource = fn: srcAttrs: fn srcAttrs; 88 patchLatest = patchSource pkgs.fetchurl; 89 90 /* Put manual packages below here (ideally eventually managed by npm2nix */ 91} // ( 92 if isAttrs generated then generated 93 94 # Backwards compatiblity 95 else pkgs.callPackage generated { inherit self; } 96)