|
1 | 1 | # This file originates from node2nix |
2 | 2 |
|
3 | | -{ lib, stdenv, nodejs, python2, pkgs, libtool, runCommand, writeTextFile, writeShellScript }: |
| 3 | +{ lib, stdenv, nodejs, python2, pkgs, libtool, runCommand, writeTextFile }: |
4 | 4 |
|
5 | 5 | let |
6 | 6 | # Workaround to cope with utillinux in Nixpkgs 20.09 and util-linux in Nixpkgs master |
|
40 | 40 | ''; |
41 | 41 | }; |
42 | 42 |
|
43 | | - # Common shell logic |
44 | | - installPackage = writeShellScript "install-package" '' |
45 | | - installPackage() { |
46 | | - local packageName=$1 src=$2 |
| 43 | + includeDependencies = { dependencies }: |
| 44 | + lib.optionalString (dependencies != [ ]) |
| 45 | + (lib.concatMapStrings |
| 46 | + (dependency: |
| 47 | + '' |
| 48 | + # Bundle the dependencies of the package |
| 49 | + mkdir -p node_modules |
| 50 | + cd node_modules |
47 | 51 |
|
48 | | - local strippedName |
| 52 | + # Only include dependencies if they don't exist. They may also be bundled in the package. |
| 53 | + if [ ! -e "${dependency.name}" ] |
| 54 | + then |
| 55 | + ${composePackage dependency} |
| 56 | + fi |
| 57 | +
|
| 58 | + cd .. |
| 59 | + '' |
| 60 | + ) |
| 61 | + dependencies); |
49 | 62 |
|
50 | | - local DIR=$PWD |
| 63 | + # Recursively composes the dependencies of a package |
| 64 | + composePackage = { name, packageName, src, dependencies ? [ ], ... }@args: |
| 65 | + builtins.addErrorContext "while evaluating node package '${packageName}'" '' |
| 66 | + DIR=$(pwd) |
51 | 67 | cd $TMPDIR |
52 | 68 |
|
53 | | - unpackFile $src |
| 69 | + unpackFile ${src} |
54 | 70 |
|
55 | 71 | # Make the base dir in which the target dependency resides first |
56 | | - mkdir -p "$(dirname "$DIR/$packageName")" |
| 72 | + mkdir -p "$(dirname "$DIR/${packageName}")" |
57 | 73 |
|
58 | | - if [ -f "$src" ] |
| 74 | + if [ -f "${src}" ] |
59 | 75 | then |
60 | 76 | # Figure out what directory has been unpacked |
61 | 77 | packageDir="$(find . -maxdepth 1 -type d | tail -1)" |
|
65 | 81 | chmod -R u+w "$packageDir" |
66 | 82 |
|
67 | 83 | # Move the extracted tarball into the output folder |
68 | | - mv "$packageDir" "$DIR/$packageName" |
69 | | - elif [ -d "$src" ] |
| 84 | + mv "$packageDir" "$DIR/${packageName}" |
| 85 | + elif [ -d "${src}" ] |
70 | 86 | then |
71 | 87 | # Get a stripped name (without hash) of the source directory. |
72 | 88 | # On old nixpkgs it's already set internally. |
73 | 89 | if [ -z "$strippedName" ] |
74 | 90 | then |
75 | | - strippedName="$(stripHash $src)" |
| 91 | + strippedName="$(stripHash ${src})" |
76 | 92 | fi |
77 | 93 |
|
78 | 94 | # Restore write permissions to make building work |
79 | 95 | chmod -R u+w "$strippedName" |
80 | 96 |
|
81 | 97 | # Move the extracted directory into the output folder |
82 | | - mv "$strippedName" "$DIR/$packageName" |
| 98 | + mv "$strippedName" "$DIR/${packageName}" |
83 | 99 | fi |
84 | 100 |
|
85 | | - # Change to the package directory to install dependencies |
86 | | - cd "$DIR/$packageName" |
87 | | - } |
88 | | - ''; |
| 101 | + # Unset the stripped name to not confuse the next unpack step |
| 102 | + unset strippedName |
89 | 103 |
|
90 | | - # Bundle the dependencies of the package |
91 | | - # |
92 | | - # Only include dependencies if they don't exist. They may also be bundled in the package. |
93 | | - includeDependencies = { dependencies }: |
94 | | - lib.optionalString (dependencies != [ ]) ( |
95 | | - '' |
96 | | - mkdir -p node_modules |
97 | | - cd node_modules |
98 | | - '' |
99 | | - + (lib.concatMapStrings |
100 | | - (dependency: |
101 | | - '' |
102 | | - if [ ! -e "${dependency.name}" ]; then |
103 | | - ${composePackage dependency} |
104 | | - fi |
105 | | - '' |
106 | | - ) |
107 | | - dependencies) |
108 | | - + '' |
109 | | - cd .. |
110 | | - '' |
111 | | - ); |
112 | | - |
113 | | - # Recursively composes the dependencies of a package |
114 | | - composePackage = { name, packageName, src, dependencies ? [ ], ... }@args: |
115 | | - builtins.addErrorContext "while evaluating node package '${packageName}'" '' |
116 | | - installPackage "${packageName}" "${src}" |
| 104 | + # Include the dependencies of the package |
| 105 | + cd "$DIR/${packageName}" |
117 | 106 | ${includeDependencies { inherit dependencies; }} |
118 | 107 | cd .. |
119 | 108 | ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} |
@@ -404,15 +393,14 @@ let |
404 | 393 | , dontStrip ? true |
405 | 394 | , unpackPhase ? "true" |
406 | 395 | , buildPhase ? "true" |
407 | | - , meta ? { } |
408 | 396 | , ... |
409 | 397 | }@args: |
410 | 398 |
|
411 | 399 | let |
412 | | - extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" "meta" ]; |
| 400 | + extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" ]; |
413 | 401 | in |
414 | 402 | stdenv.mkDerivation ({ |
415 | | - name = "${name}-${version}"; |
| 403 | + name = "node_${name}-${version}"; |
416 | 404 | buildInputs = [ tarWrapper python nodejs ] |
417 | 405 | ++ lib.optional (stdenv.isLinux) utillinux |
418 | 406 | ++ lib.optional (stdenv.isDarwin) libtool |
|
429 | 417 | passAsFile = [ "compositionScript" "pinpointDependenciesScript" ]; |
430 | 418 |
|
431 | 419 | installPhase = '' |
432 | | - source ${installPackage} |
433 | | -
|
434 | 420 | # Create and enter a root node_modules/ folder |
435 | 421 | mkdir -p $out/lib/node_modules |
436 | 422 | cd $out/lib/node_modules |
|
463 | 449 | # Run post install hook, if provided |
464 | 450 | runHook postInstall |
465 | 451 | ''; |
466 | | - |
467 | | - meta = { |
468 | | - # default to Node.js' platforms |
469 | | - platforms = nodejs.meta.platforms; |
470 | | - } // meta; |
471 | 452 | } // extraArgs); |
472 | 453 |
|
473 | 454 | # Builds a node environment (a node_modules folder and a set of binaries) |
|
509 | 490 | passAsFile = [ "includeScript" "pinpointDependenciesScript" ]; |
510 | 491 |
|
511 | 492 | installPhase = '' |
512 | | - source ${installPackage} |
513 | | -
|
514 | 493 | mkdir -p $out/${packageName} |
515 | 494 | cd $out/${packageName} |
516 | 495 |
|
|
0 commit comments