From 37655d3b3646c5f4357b643a232c8217fa587ac0 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Sun, 26 Oct 2025 08:58:30 +0000 Subject: [PATCH 1/4] buildPython*: rename override param in makeOverridablePythonPackage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `fdrv` → `newArgs`; the parameter is not a derivation, so fdrv is confusing. --- pkgs/development/interpreters/python/python-packages-base.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/python/python-packages-base.nix b/pkgs/development/interpreters/python/python-packages-base.nix index 97ec3f5076f2..ff0699365ef3 100644 --- a/pkgs/development/interpreters/python/python-packages-base.nix +++ b/pkgs/development/interpreters/python/python-packages-base.nix @@ -38,7 +38,9 @@ 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 = From 9d87f178edb75e42633703a4cb7cfc351bea897a Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Sun, 26 Oct 2025 08:40:40 +0000 Subject: [PATCH 2/4] buildPython*: switch overrideStdenvCompat to mirrorFunctionArgs The underlying `mk-python-derivation.nix` functions do not have `stdenv` in their functionArgs, so it was redundant to explicitly remove it. --- .../interpreters/python/python-packages-base.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/interpreters/python/python-packages-base.nix b/pkgs/development/interpreters/python/python-packages-base.nix index ff0699365ef3..61cf3f2b941b 100644 --- a/pkgs/development/interpreters/python/python-packages-base.nix +++ b/pkgs/development/interpreters/python/python-packages-base.nix @@ -45,16 +45,16 @@ let overrideStdenvCompat = f: - lib.setFunctionArgs ( + 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 { stdenv = args.stdenv; } args) + '' (f.override { inherit (args) stdenv; } args) else f args - ) (removeAttrs (lib.functionArgs f) [ "stdenv" ]) + ) // { # Intentionally drop the effect of overrideStdenvCompat when calling `buildPython*.override`. inherit (f) override; From 32ecc2256b1767d8126428d46918bd543971142f Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Sun, 26 Oct 2025 08:40:40 +0000 Subject: [PATCH 3/4] buildPython*: remove stdenv arg in overrideStdenvCompat Avoid passing `stdenv` to the underlying function when it is already handled in overrideStdenvCompat. --- pkgs/development/interpreters/python/python-packages-base.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/python/python-packages-base.nix b/pkgs/development/interpreters/python/python-packages-base.nix index 61cf3f2b941b..b6203ae0a0b0 100644 --- a/pkgs/development/interpreters/python/python-packages-base.nix +++ b/pkgs/development/interpreters/python/python-packages-base.nix @@ -51,7 +51,7 @@ let 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; } args) + '' (f.override { inherit (args) stdenv; } (removeAttrs args [ "stdenv" ])) else f args ) From 553a6c3d3a181a57dc87b250643bac59317ae9fc Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Sun, 26 Oct 2025 08:48:30 +0000 Subject: [PATCH 4/4] buildPython*: preserve overrideStdenvCompat on subsequent overrides This is needed to support the deprecated method of overriding `stdenv` via `overridePythonAttrs`. --- .../python/python-packages-base.nix | 31 ++++++++++--------- pkgs/test/overriding.nix | 7 +++++ 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/pkgs/development/interpreters/python/python-packages-base.nix b/pkgs/development/interpreters/python/python-packages-base.nix index b6203ae0a0b0..c513561ce6fb 100644 --- a/pkgs/development/interpreters/python/python-packages-base.nix +++ b/pkgs/development/interpreters/python/python-packages-base.nix @@ -45,20 +45,23 @@ let overrideStdenvCompat = 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 - ) - // { - # 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 21baca35e927..9ee13e3778d2 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;