Unverified Commit 2f7c8043 authored by Yueh-Shun Li's avatar Yueh-Shun Li Committed by GitHub
Browse files

buildPython*: simplify overrideStdenvCompat and add nested-override support (#455764)

parents d0b337fd 553a6c3d
Loading
Loading
Loading
Loading
+20 −15
Original line number Diff line number Diff line
@@ -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 (
    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 { stdenv = args.stdenv; } args)
          '' (f'.override { inherit (args) stdenv; } (removeAttrs args [ "stdenv" ]))
        else
          f args
    ) (removeAttrs (lib.functionArgs f) [ "stdenv" ])
      )
      // {
      # Intentionally drop the effect of overrideStdenvCompat when calling `buildPython*.override`.
      inherit (f) override;
    };
        # 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;
+7 −0
Original line number Diff line number Diff line
@@ -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;