0
0
Fork 0
mirror of https://github.com/NixOS/nixpkgs.git synced 2025-07-13 21:50:33 +03:00

python3: Fixing excessive memory usage for overriden python in cross-compile (#394541)

This commit is contained in:
Martin Weinelt 2025-04-04 23:26:37 +02:00 committed by GitHub
commit 175fb278c1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 28 additions and 13 deletions

View file

@ -55,6 +55,7 @@
pkgsBuildTarget,
pkgsHostHost,
pkgsTargetTarget,
__splices ? { },
# build customization
sourceVersion,
@ -145,10 +146,28 @@ let
# When we override the interpreter we also need to override the spliced versions of the interpreter
# bluez is excluded manually to break an infinite recursion.
inputs' = lib.filterAttrs (n: v: n != "bluez" && n != "passthruFun" && !lib.isDerivation v) inputs;
# Memoization of the splices to avoid re-evaluating this function for all combinations of splices e.g.
# python3.pythonOnBuildForHost.pythonOnBuildForTarget == python3.pythonOnBuildForTarget by consuming
# __splices as an arg and using the cache if populated.
splices = {
pythonOnBuildForBuild = override pkgsBuildBuild.${pythonAttr};
pythonOnBuildForHost = override pkgsBuildHost.${pythonAttr};
pythonOnBuildForTarget = override pkgsBuildTarget.${pythonAttr};
pythonOnHostForHost = override pkgsHostHost.${pythonAttr};
pythonOnTargetForTarget = lib.optionalAttrs (lib.hasAttr pythonAttr pkgsTargetTarget) (
override pkgsTargetTarget.${pythonAttr}
);
} // __splices;
override =
attr:
let
python = attr.override (inputs' // { self = python; });
python = attr.override (
inputs'
// {
self = python;
__splices = splices;
}
);
in
python;
in
@ -160,13 +179,13 @@ let
pythonVersion = with sourceVersion; "${major}.${minor}";
sitePackages = "lib/${libPrefix}/site-packages";
inherit hasDistutilsCxxPatch pythonAttr;
pythonOnBuildForBuild = override pkgsBuildBuild.${pythonAttr};
pythonOnBuildForHost = override pkgsBuildHost.${pythonAttr};
pythonOnBuildForTarget = override pkgsBuildTarget.${pythonAttr};
pythonOnHostForHost = override pkgsHostHost.${pythonAttr};
pythonOnTargetForTarget = lib.optionalAttrs (lib.hasAttr pythonAttr pkgsTargetTarget) (
override pkgsTargetTarget.${pythonAttr}
);
inherit (splices)
pythonOnBuildForBuild
pythonOnBuildForHost
pythonOnBuildForTarget
pythonOnHostForHost
pythonOnTargetForTarget
;
};
version = with sourceVersion; "${major}.${minor}.${patch}${suffix}";

View file

@ -106,10 +106,6 @@ let
python = self;
}
);
pythonOnBuildForHost_overridden = pythonOnBuildForHost.override {
inherit packageOverrides;
self = pythonOnBuildForHost_overridden;
};
in
rec {
isPy27 = pythonVersion == "2.7";
@ -144,7 +140,7 @@ rec {
pythonAtLeast = lib.versionAtLeast pythonVersion;
pythonOlder = lib.versionOlder pythonVersion;
inherit hasDistutilsCxxPatch;
pythonOnBuildForHost = pythonOnBuildForHost_overridden;
inherit pythonOnBuildForHost;
tests = callPackage ./tests.nix {
python = self;