Loading pkgs/top-level/splice.nix +99 −79 Original line number Diff line number Diff line Loading @@ -18,10 +18,15 @@ lib: pkgs: actuallySplice: let spliceReal = { pkgsBuildBuild, pkgsBuildHost, pkgsBuildTarget , pkgsHostHost, pkgsHostTarget spliceReal = { pkgsBuildBuild , pkgsBuildHost , pkgsBuildTarget , pkgsHostHost , pkgsHostTarget , pkgsTargetTarget }: let }: let mash = # Other pkgs sets pkgsBuildBuild // pkgsBuildTarget // pkgsHostHost // pkgsTargetTarget Loading @@ -29,7 +34,8 @@ let // pkgsBuildHost // pkgsHostTarget; merge = name: { inherit name; value = let value = let defaultValue = mash.${name}; # `or {}` is for the non-derivation attsert splicing case, where `{}` is the identity. valueBuildBuild = pkgsBuildBuild.${name} or { }; Loading @@ -49,15 +55,18 @@ let // (lib.optionalAttrs (pkgsBuildTarget ? ${name}) { buildTarget = valueBuildTarget; }) // (lib.optionalAttrs (pkgsHostHost ? ${name}) { hostHost = valueHostHost; }) // (lib.optionalAttrs (pkgsHostTarget ? ${name}) { hostTarget = valueHostTarget; }) // (lib.optionalAttrs (pkgsTargetTarget ? ${name}) { targetTarget = valueTargetTarget; // (lib.optionalAttrs (pkgsTargetTarget ? ${name}) { targetTarget = valueTargetTarget; }); }; # Get the set of outputs of a derivation. If one derivation fails to # evaluate we don't want to diverge the entire splice, so we fall back # on {} tryGetOutputs = value0: let tryGetOutputs = value0: let inherit (builtins.tryEval value0) success value; in getOutputs (lib.optionalAttrs success value); in getOutputs (lib.optionalAttrs success value); getOutputs = value: lib.genAttrs (value.outputs or (lib.optional (value ? out) "out")) (output: value.${output}); Loading @@ -72,7 +81,9 @@ let pkgsHostTarget = getOutputs valueHostTarget; pkgsTargetTarget = tryGetOutputs valueTargetTarget; # Just recur on plain attrsets } else if lib.isAttrs defaultValue then spliceReal { } else if lib.isAttrs defaultValue then spliceReal { pkgsBuildBuild = valueBuildBuild; pkgsBuildHost = valueBuildHost; pkgsBuildTarget = valueBuildTarget; Loading @@ -83,15 +94,21 @@ let # `__functor__` for functions instead. } else defaultValue; }; in lib.listToAttrs (map merge (lib.attrNames mash)); in lib.listToAttrs (map merge (lib.attrNames mash)); splicePackages = { pkgsBuildBuild, pkgsBuildHost, pkgsBuildTarget , pkgsHostHost, pkgsHostTarget splicePackages = { pkgsBuildBuild , pkgsBuildHost , pkgsBuildTarget , pkgsHostHost , pkgsHostTarget , pkgsTargetTarget } @ args: if actuallySplice then spliceReal args else pkgsHostTarget; splicedPackages = splicePackages { splicedPackages = splicePackages { inherit (pkgs) pkgsBuildBuild pkgsBuildHost pkgsBuildTarget pkgsHostHost pkgsHostTarget Loading @@ -109,7 +126,10 @@ let }; splicedPackagesWithXorg = splicedPackages // builtins.removeAttrs splicedPackages.xorg [ "callPackage" "newScope" "overrideScope" "packages" "callPackage" "newScope" "overrideScope" "packages" ]; in Loading Loading
pkgs/top-level/splice.nix +99 −79 Original line number Diff line number Diff line Loading @@ -18,10 +18,15 @@ lib: pkgs: actuallySplice: let spliceReal = { pkgsBuildBuild, pkgsBuildHost, pkgsBuildTarget , pkgsHostHost, pkgsHostTarget spliceReal = { pkgsBuildBuild , pkgsBuildHost , pkgsBuildTarget , pkgsHostHost , pkgsHostTarget , pkgsTargetTarget }: let }: let mash = # Other pkgs sets pkgsBuildBuild // pkgsBuildTarget // pkgsHostHost // pkgsTargetTarget Loading @@ -29,7 +34,8 @@ let // pkgsBuildHost // pkgsHostTarget; merge = name: { inherit name; value = let value = let defaultValue = mash.${name}; # `or {}` is for the non-derivation attsert splicing case, where `{}` is the identity. valueBuildBuild = pkgsBuildBuild.${name} or { }; Loading @@ -49,15 +55,18 @@ let // (lib.optionalAttrs (pkgsBuildTarget ? ${name}) { buildTarget = valueBuildTarget; }) // (lib.optionalAttrs (pkgsHostHost ? ${name}) { hostHost = valueHostHost; }) // (lib.optionalAttrs (pkgsHostTarget ? ${name}) { hostTarget = valueHostTarget; }) // (lib.optionalAttrs (pkgsTargetTarget ? ${name}) { targetTarget = valueTargetTarget; // (lib.optionalAttrs (pkgsTargetTarget ? ${name}) { targetTarget = valueTargetTarget; }); }; # Get the set of outputs of a derivation. If one derivation fails to # evaluate we don't want to diverge the entire splice, so we fall back # on {} tryGetOutputs = value0: let tryGetOutputs = value0: let inherit (builtins.tryEval value0) success value; in getOutputs (lib.optionalAttrs success value); in getOutputs (lib.optionalAttrs success value); getOutputs = value: lib.genAttrs (value.outputs or (lib.optional (value ? out) "out")) (output: value.${output}); Loading @@ -72,7 +81,9 @@ let pkgsHostTarget = getOutputs valueHostTarget; pkgsTargetTarget = tryGetOutputs valueTargetTarget; # Just recur on plain attrsets } else if lib.isAttrs defaultValue then spliceReal { } else if lib.isAttrs defaultValue then spliceReal { pkgsBuildBuild = valueBuildBuild; pkgsBuildHost = valueBuildHost; pkgsBuildTarget = valueBuildTarget; Loading @@ -83,15 +94,21 @@ let # `__functor__` for functions instead. } else defaultValue; }; in lib.listToAttrs (map merge (lib.attrNames mash)); in lib.listToAttrs (map merge (lib.attrNames mash)); splicePackages = { pkgsBuildBuild, pkgsBuildHost, pkgsBuildTarget , pkgsHostHost, pkgsHostTarget splicePackages = { pkgsBuildBuild , pkgsBuildHost , pkgsBuildTarget , pkgsHostHost , pkgsHostTarget , pkgsTargetTarget } @ args: if actuallySplice then spliceReal args else pkgsHostTarget; splicedPackages = splicePackages { splicedPackages = splicePackages { inherit (pkgs) pkgsBuildBuild pkgsBuildHost pkgsBuildTarget pkgsHostHost pkgsHostTarget Loading @@ -109,7 +126,10 @@ let }; splicedPackagesWithXorg = splicedPackages // builtins.removeAttrs splicedPackages.xorg [ "callPackage" "newScope" "overrideScope" "packages" "callPackage" "newScope" "overrideScope" "packages" ]; in Loading