From 06ece659f09716f744ee5e6fcf5565d7dcbab30b Mon Sep 17 00:00:00 2001 From: Dennis Gosnell Date: Mon, 29 Aug 2022 14:41:03 +0900 Subject: [PATCH] coqPackages.mkCoqDerivation: add a coqPackages.lib.overrideCoqDerivation function `overrideCoqDerivation` allows end-users the ability to easily override arguments to the underlying call to `mkCoqDerivation` for a given Coq library. This is similar to `haskell.lib.overrideCabal` for Haskell packages and `.overridePythonAttrs` for Python packges. --- pkgs/build-support/coq/extra-lib.nix | 37 ++++++++++++++++++++++++++++ pkgs/top-level/coq-packages.nix | 2 +- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/pkgs/build-support/coq/extra-lib.nix b/pkgs/build-support/coq/extra-lib.nix index 65b48f51126..90600271d42 100644 --- a/pkgs/build-support/coq/extra-lib.nix +++ b/pkgs/build-support/coq/extra-lib.nix @@ -142,4 +142,41 @@ with builtins; with lib; recursiveUpdate lib (rec { if cl?case then compare cl.case var else all (equal true) (zipListsWith compare cl.cases var); in switch-if (map (cl: { cond = combine cl var; inherit (cl) out; }) clauses) default; + + /* Override arguments to mkCoqDerivation for a Coq library. + + This function allows you to easily override arguments to mkCoqDerivation, + even when they are not exposed by the Coq library directly. + + Type: overrideCoqDerivation :: AttrSet -> CoqLibraryDerivation -> CoqLibraryDerivation + + Example: + + ```nix + coqPackages.lib.overrideCoqDerivation + { + defaultVersion = "9999"; + release."9999".sha256 = "1lq8x86vd3vqqh2yq6hvyagpnhfq5wmk5pg2z0xq7b7dbbbhyfkw"; + } + coqPackages.QuickChick; + ``` + + This example overrides the `defaultVersion` and `release` arguments that + are passed to `mkCoqDerivation` in the QuickChick derivation. + + Note that there is a difference between using `.override` on a Coq + library vs this `overrideCoqDerivation` function. `.override` allows you + to modify arguments to the derivation itself, for instance by passing + different versions of dependencies: + + ```nix + coqPackages.QuickCick.override { ssreflect = my-cool-ssreflect; } + ``` + + whereas `overrideCoqDerivation` allows you to override arguments to the + call to `mkCoqDerivation` in the Coq library. + */ + overrideCoqDerivation = f: drv: (drv.override (args: { + mkCoqDerivation = drv_: (args.mkCoqDerivation drv_).override f; + })); }) diff --git a/pkgs/top-level/coq-packages.nix b/pkgs/top-level/coq-packages.nix index e013bf7cd1b..0cf24f1d8b9 100644 --- a/pkgs/top-level/coq-packages.nix +++ b/pkgs/top-level/coq-packages.nix @@ -11,7 +11,7 @@ let metaFetch = import ../build-support/coq/meta-fetch/default.nix {inherit lib stdenv fetchzip; }; - mkCoqDerivation = callPackage ../build-support/coq {}; + mkCoqDerivation = lib.makeOverridable (callPackage ../build-support/coq {}); contribs = recurseIntoAttrs (callPackage ../development/coq-modules/contribs {});