diff options
| author | Matt Sturgeon <matt@sturgeon.me.uk> | 2026-01-20 11:27:58 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-20 11:27:58 +0000 |
| commit | e6959ad5283e42532baab92604a68daf4e26cdc2 (patch) | |
| tree | 2f7a20d2bb5fddf18354efd84695dc509e01d153 /pkgs/development/interpreters | |
| parent | github-runner: 2.330.0 -> 2.331.0 (#479150) (diff) | |
| parent | buildPython*: extend overrideStdenvCompat to fixed-point arguments (diff) | |
| download | nixpkgs-e6959ad5283e42532baab92604a68daf4e26cdc2.tar.gz | |
buildPython*: extend overrideStdenvCompat to fixed-point arguments (#477208)
Diffstat (limited to 'pkgs/development/interpreters')
| -rw-r--r-- | pkgs/development/interpreters/python/mk-python-derivation.nix | 1 | ||||
| -rw-r--r-- | pkgs/development/interpreters/python/python-packages-base.nix | 29 |
2 files changed, 22 insertions, 8 deletions
diff --git a/pkgs/development/interpreters/python/mk-python-derivation.nix b/pkgs/development/interpreters/python/mk-python-derivation.nix index f3e5249c189e..0fb0a1326025 100644 --- a/pkgs/development/interpreters/python/mk-python-derivation.nix +++ b/pkgs/development/interpreters/python/mk-python-derivation.nix @@ -418,6 +418,7 @@ lib.extendMkDerivation { optional-dependencies ; updateScript = nix-update-script { }; + ${if attrs ? stdenv then "__stdenvPythonCompat" else null} = attrs.stdenv; } // attrs.passthru or { }; diff --git a/pkgs/development/interpreters/python/python-packages-base.nix b/pkgs/development/interpreters/python/python-packages-base.nix index 91d733a33c3e..77ac26630161 100644 --- a/pkgs/development/interpreters/python/python-packages-base.nix +++ b/pkgs/development/interpreters/python/python-packages-base.nix @@ -53,15 +53,28 @@ let f': lib.mirrorFunctionArgs f ( args: - if !(lib.isFunction args) && (args ? stdenv) then - lib.warnIf (lib.oldestSupportedReleaseIsAtLeast 2511) '' - ${ - args.name or args.pname or "<unnamed>" - }: Passing `stdenv` directly to `buildPythonPackage` or `buildPythonApplication` is deprecated. You should use their `.override` function instead, e.g: - buildPythonPackage.override { stdenv = customStdenv; } { } - '' (f'.override { inherit (args) stdenv; } (removeAttrs args [ "stdenv" ])) + let + result = f args; + getName = x: x.pname or (lib.getName (x.name or "<unnamed>")); + applyMsgStdenvArg = + name: + lib.warnIf (lib.oldestSupportedReleaseIsAtLeast 2511) '' + ${name}: Passing `stdenv` directly to `buildPythonPackage` or `buildPythonApplication` is deprecated. You should use their `.override` function instead, e.g: + buildPythonPackage.override { stdenv = customStdenv; } { } + ''; + in + if lib.isFunction args && result ? __stdenvPythonCompat then + # Less reliable, as constructing with the wrong `stdenv` might lead to evaluation errors in the package definition. + f'.override { stdenv = applyMsgStdenvArg (getName result) result.__stdenvPythonCompat; } ( + finalAttrs: removeAttrs (args finalAttrs) [ "stdenv" ] + ) + else if (!lib.isFunction args) && (args ? stdenv) then + # More reliable, but only works when args is not `(finalAttrs: { })` + f'.override { stdenv = applyMsgStdenvArg (getName args) args.stdenv; } ( + removeAttrs args [ "stdenv" ] + ) else - f args + result ) // { # Preserve the effect of overrideStdenvCompat when calling `buildPython*.override`. |
