nodePackages: correctly handle platforms and optional dependencies

Changed files
+17 -12
pkgs
development
+17 -12
pkgs/development/web/nodejs/build-node-package.nix
···
mv $(find . -type d -mindepth 1 -maxdepth 1) $out
'';
-
platforms = fold (entry: platforms:
-
let
-
filterPlatforms = attrByPath [(removePrefix "!" entry)] [] stdenv.lib.platforms;
-
in
-
if hasPrefix "!" entry then
-
filter (p: any (f: p != f) filterPlatforms) platforms
-
else
-
filter (p: any (f: p == f) filterPlatforms) platforms
-
) nodejs.meta.platforms os;
+
platforms = if os == [] then nodejs.meta.platforms else
+
fold (entry: platforms:
+
let
+
filterPlatforms =
+
stdenv.lib.platforms.${removePrefix "!" entry} or [];
+
in
+
# Ignore unknown platforms
+
if filterPlatforms == [] then platforms
+
else
+
if hasPrefix "!" entry then
+
substract (intersect filterPlatforms nodejs.meta.platforms) platforms
+
else
+
platforms ++ (intersect filterPlatforms nodejs.meta.platforms)
+
) [] os;
mapDependencies = deps: f: rec {
# Convert deps to attribute set
···
_dependencies = mapDependencies deps (name: dep:
dep.pkgName != pkgName);
_optionalDependencies = mapDependencies optionalDependencies (name: dep:
-
any (platform: stdenv.system == platform) dep.meta.platforms &&
-
all (d: d != dep.pkgName) skipOptionalDependencies
+
(builtins.tryEval dep).success &&
+
!(elem dep.pkgName skipOptionalDependencies)
);
_peerDependencies = mapDependencies peerDependencies (name: dep:
dep.pkgName != pkgName);
···
dontStrip = true;
meta = {
-
platforms = platforms;
+
inherit platforms;
maintainers = [ stdenv.lib.maintainers.offline ];
};