Handle peerDependencies in nodePackages

Signed-off-by: Shea Levy <shea@shealevy.com>
This commit is contained in:
Shea Levy 2013-08-18 19:28:51 -04:00
parent b0320f130a
commit 67eb2c8ad3
2 changed files with 16 additions and 9 deletions

View File

@ -1,6 +1,6 @@
{ stdenv, runCommand, nodejs, neededNatives}: { stdenv, runCommand, nodejs, neededNatives}:
args @ { name, src, deps ? [], flags ? [], ... }: args @ { name, src, deps ? [], peerDeps ? [], flags ? [], ... }:
with stdenv.lib; with stdenv.lib;
@ -12,7 +12,7 @@ let
mv *node* $out mv *node* $out
''; '';
requireName = (builtins.parseDrvName name).name; requireName = name: (builtins.parseDrvName name).name;
in in
stdenv.mkDerivation ({ stdenv.mkDerivation ({
unpackPhase = "true"; unpackPhase = "true";
@ -21,8 +21,11 @@ stdenv.mkDerivation ({
runHook preConfigure runHook preConfigure
mkdir node_modules mkdir node_modules
${stdenv.lib.concatStrings (map (dep: '' ${stdenv.lib.concatStrings (map (dep: ''
ln -sv ${dep}/lib/node_modules/${(builtins.parseDrvName dep.name).name} node_modules/ ln -sv ${dep}/lib/node_modules/${requireName dep.name} node_modules/
'') deps)} '') deps)}
${stdenv.lib.concatStrings (map (dep: ''
ln -sv ${dep}/lib/node_modules/${requireName dep.name} node_modules/
'') peerDeps)}
export HOME=$(pwd) export HOME=$(pwd)
runHook postConfigure runHook postConfigure
''; '';
@ -36,10 +39,13 @@ stdenv.mkDerivation ({
installPhase = '' installPhase = ''
runHook preInstall runHook preInstall
mkdir -p $out/lib/node_modules mkdir -p $out/lib/node_modules
mv node_modules/${requireName} $out/lib/node_modules mv node_modules/${requireName name} $out/lib/node_modules
${stdenv.lib.concatStrings (map (dep: ''
mv node_modules/${requireName dep.name} $out/lib/node_modules
'') peerDeps)}
mv node_modules/.bin $out/lib/node_modules 2>/dev/null || true mv node_modules/.bin $out/lib/node_modules 2>/dev/null || true
rm -fR $out/lib/node_modules/${requireName}/node_modules rm -fR $out/lib/node_modules/${requireName name}/node_modules
mv node_modules $out/lib/node_modules/${requireName} mv node_modules $out/lib/node_modules/${requireName name}
if [ -d "$out/lib/node_modules/.bin" ]; then if [ -d "$out/lib/node_modules/.bin" ]; then
ln -sv $out/lib/node_modules/.bin $out/bin ln -sv $out/lib/node_modules/.bin $out/bin
node=`type -p node` node=`type -p node`
@ -51,9 +57,9 @@ stdenv.mkDerivation ({
-e 's@#!/.*/node@#!'"$node"'@' \ -e 's@#!/.*/node@#!'"$node"'@' \
-e 's@#!/.*/coffee@#!'"$coffee"'@' -e 's@#!/.*/coffee@#!'"$coffee"'@'
fi fi
if [ -e "$out/lib/node_modules/${requireName}/man" ]; then if [ -e "$out/lib/node_modules/${requireName name}/man" ]; then
mkdir $out/share mkdir $out/share
ln -sv $out/lib/node_modules/${requireName}/man $out/share/man ln -sv $out/lib/node_modules/${requireName name}/man $out/share/man
fi fi
runHook postInstall runHook postInstall
''; '';
@ -66,5 +72,5 @@ stdenv.mkDerivation ({
propagatedNativeBuildInputs = (args.propagatedNativeBuildInputs or []) ++ [ nodejs ]; propagatedNativeBuildInputs = (args.propagatedNativeBuildInputs or []) ++ [ nodejs ];
# Make buildNodePackage useful with --run-env # Make buildNodePackage useful with --run-env
nativeBuildInputs = (args.nativeBuildInputs or []) ++ deps ++ neededNatives; nativeBuildInputs = (args.nativeBuildInputs or []) ++ deps ++ peerDeps ++ neededNatives;
} ) } )

View File

@ -34,6 +34,7 @@ let
sha256 = pkg.sha256 or ""; sha256 = pkg.sha256 or "";
}; };
deps = map (dep: builtins.getAttr dep.spec (builtins.getAttr dep.name self.full)) pkg.dependencies; deps = map (dep: builtins.getAttr dep.spec (builtins.getAttr dep.name self.full)) pkg.dependencies;
peerDeps = map (dep: builtins.getAttr dep.spec (builtins.getAttr dep.name self.full)) pkg.peerDependencies;
buildInputs = nativeDepsList pkg; buildInputs = nativeDepsList pkg;
}; };
} ]; } ];