summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2020-11-18 12:12:34 -0500
committerJohn Ericson <John.Ericson@Obsidian.Systems>2020-11-19 00:07:14 -0500
commita6218c058b3e994779147dd7286606c750be7d73 (patch)
tree6d7bf3a5bbf43d953004ea725e9e4f6035d16184 /lib
parentf01bfd6843cada594383a5ab67c01f30b571a185 (diff)
lib: Create `makeScopeWithSplicing`
It's ugly as hell, but I suppose it is needed to codify how to make spliced package sets.
Diffstat (limited to 'lib')
-rw-r--r--lib/customisation.nix27
-rw-r--r--lib/default.nix2
2 files changed, 28 insertions, 1 deletions
diff --git a/lib/customisation.nix b/lib/customisation.nix
index dc5dd7691976..37a7951896b0 100644
--- a/lib/customisation.nix
+++ b/lib/customisation.nix
@@ -217,4 +217,31 @@ rec {
};
in self;
+ /* Like the above, but aims to support cross compilation. It's still ugly, but
+ hopefully it helps a little bit. */
+ makeScopeWithSplicing = splicePackages: newScope: otherSplices: keep: f:
+ let
+ spliced = splicePackages {
+ pkgsBuildBuild = otherSplices.selfBuildBuild;
+ pkgsBuildHost = otherSplices.selfBuildHost;
+ pkgsBuildTarget = otherSplices.selfBuildTarget;
+ pkgsHostHost = otherSplices.selfHostHost;
+ pkgsHostTarget = self; # Not `otherSplices.selfHostTarget`;
+ pkgsTargetTarget = otherSplices.selfTargetTarget;
+ } // keep self;
+ self = f self // {
+ newScope = scope: newScope (spliced // scope);
+ callPackage = newScope spliced; # == self.newScope {};
+ # N.B. the other stages of the package set spliced in are *not*
+ # overridden.
+ overrideScope = g: makeScopeWithSplicing
+ splicePackages
+ newScope
+ otherSplices
+ keep
+ (lib.fixedPoints.extends g f);
+ packages = f;
+ };
+ in self;
+
}
diff --git a/lib/default.nix b/lib/default.nix
index e3c1ed713463..f985266ed938 100644
--- a/lib/default.nix
+++ b/lib/default.nix
@@ -101,7 +101,7 @@ let
noDepEntry fullDepEntry packEntry stringAfter;
inherit (self.customisation) overrideDerivation makeOverridable
callPackageWith callPackagesWith extendDerivation hydraJob
- makeScope;
+ makeScope makeScopeWithSplicing;
inherit (self.meta) addMetaAttrs dontDistribute setName updateName
appendToName mapDerivationAttrset setPrio lowPrio lowPrioSet hiPrio
hiPrioSet;