diff --git a/pkgs/development/interpreters/python/python-packages-base.nix b/pkgs/development/interpreters/python/python-packages-base.nix index 97ec3f5076f20..c513561ce6fb3 100644 --- a/pkgs/development/interpreters/python/python-packages-base.nix +++ b/pkgs/development/interpreters/python/python-packages-base.nix @@ -38,25 +38,30 @@ let // { # Support overriding `f` itself, e.g. `buildPythonPackage.override { }`. # Ensure `makeOverridablePythonPackage` is applied to the result. - override = lib.mirrorFunctionArgs f.override (fdrv: makeOverridablePythonPackage (f.override fdrv)); + override = lib.mirrorFunctionArgs f.override ( + newArgs: makeOverridablePythonPackage (f.override newArgs) + ); }; overrideStdenvCompat = f: - lib.setFunctionArgs ( - args: - if !(lib.isFunction args) && (args ? stdenv) then - lib.warnIf (lib.oldestSupportedReleaseIsAtLeast 2511) '' - Passing `stdenv` directly to `buildPythonPackage` or `buildPythonApplication` is deprecated. You should use their `.override` function instead, e.g: - buildPythonPackage.override { stdenv = customStdenv; } { } - '' (f.override { stdenv = args.stdenv; } args) - else - f args - ) (removeAttrs (lib.functionArgs f) [ "stdenv" ]) - // { - # Intentionally drop the effect of overrideStdenvCompat when calling `buildPython*.override`. - inherit (f) override; - }; + lib.fix ( + f': + lib.mirrorFunctionArgs f ( + args: + if !(lib.isFunction args) && (args ? stdenv) then + lib.warnIf (lib.oldestSupportedReleaseIsAtLeast 2511) '' + 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" ])) + else + f args + ) + // { + # Preserve the effect of overrideStdenvCompat when calling `buildPython*.override`. + override = lib.mirrorFunctionArgs f.override (newArgs: overrideStdenvCompat (f.override newArgs)); + } + ); mkPythonDerivation = if python.isPy3k then ./mk-python-derivation.nix else ./python2/mk-python-derivation.nix; diff --git a/pkgs/test/overriding.nix b/pkgs/test/overriding.nix index 21baca35e927b..9ee13e3778d25 100644 --- a/pkgs/test/overriding.nix +++ b/pkgs/test/overriding.nix @@ -453,6 +453,13 @@ let })).stdenv; expected = pkgs.clangStdenv; }; + overridePythonAttrs-override-clangStdenv-deprecated-nested = { + expr = + (package-stub-gcc.overridePythonAttrs { + stdenv = pkgs.clangStdenv; + }).stdenv; + expected = pkgs.clangStdenv; + }; overridePythonAttrs = { expr = (applyOverridePythonAttrs package-stub).overridePythonAttrsFlag;