Unverified Commit 78e50a38 authored by sternenseemann's avatar sternenseemann Committed by GitHub
Browse files

haskellPackages.callPackage: preserve functionArgs (#443442)

parents 18c86721 1a14dc6e
Loading
Loading
Loading
Loading
+24 −18
Original line number Diff line number Diff line
@@ -107,14 +107,17 @@ let
      # is that nix has no way to "passthrough" args while preserving the reflection
      # info that callPackage uses to determine the arguments).
      drv = if lib.isFunction fn then fn else import fn;
      auto = builtins.intersectAttrs (lib.functionArgs drv) scope;
      drvFunctionArgs = lib.functionArgs drv;
      auto = builtins.intersectAttrs drvFunctionArgs scope;

      # Converts a returned function to a functor attribute set if necessary
      ensureAttrs = v: if builtins.isFunction v then { __functor = _: v; } else v;

      # this wraps the `drv` function to add `scope` and `overrideScope` to the result.
      drvScope =
        allArgs:
      # it's a functor, so that we can pass through `functionArgs`
      drvScope = {
        __functor =
          _: allArgs:
          ensureAttrs (drv allArgs)
          // {
            inherit scope;
@@ -130,6 +133,9 @@ let
              # nothing.
              callPackageWithScope newScope drv manualArgs;
          };
        # `drvScope` accepts the same arguments as `drv`
        __functionArgs = drvFunctionArgs;
      };
    in
    lib.makeOverridable drvScope (auto // manualArgs);