From 510d273b37ac28813b752585262dd4bae6552ded Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Wed, 28 May 2025 16:40:27 +0200 Subject: [PATCH 01/10] mkDerivation: Call functor when __functor is passed Considering that no attribute value passed to mkDerivation was allowed to be a function anyway, this does not cause any changes for code that used the previous interpretation of __functor, because that could wouldn't have worked anyway. In practice, this fixes a problem when an option value from `lib.types.functionTo` is passed as an argument here. (`functionTo` returns a `lib.setFunctionArgs` result, which is a __functor) --- pkgs/stdenv/generic/make-derivation.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix index 499602a94448..0b775da748f9 100644 --- a/pkgs/stdenv/generic/make-derivation.nix +++ b/pkgs/stdenv/generic/make-derivation.nix @@ -24,6 +24,7 @@ let isAttrs isBool isDerivation + isFunction isInt isList isString @@ -63,7 +64,7 @@ let */ mkDerivation = fnOrAttrs: - if builtins.isFunction fnOrAttrs then + if isFunction fnOrAttrs then makeDerivationExtensible fnOrAttrs else makeDerivationExtensibleConst fnOrAttrs; From 54cd1f7264f9414c3c3cfa67ef4ad8fa206536bb Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Wed, 28 May 2025 16:51:05 +0200 Subject: [PATCH 02/10] mkDerivation: Un-inline makeDerivationExtensible from makeDerivationExtensibleConst Considering the code was out of sync, this adds the `version`/`src` warning to non-"finalAttrs" calls to `mkDerivation`. That didn't work. (I un-DRY-ed this as a micro-optimization at some point, and I apologize... while simultaneously blaming contributors who change the file without understanding it, therefore implicating myself *yet again* and making myself a hypocrite) --- pkgs/stdenv/generic/make-derivation.nix | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix index 0b775da748f9..fda9158ff179 100644 --- a/pkgs/stdenv/generic/make-derivation.nix +++ b/pkgs/stdenv/generic/make-derivation.nix @@ -136,24 +136,7 @@ let in finalPackage; - #makeDerivationExtensibleConst = attrs: makeDerivationExtensible (_: attrs); - # but pre-evaluated for a slight improvement in performance. - makeDerivationExtensibleConst = - attrs: - mkDerivationSimple ( - f0: - let - f = - self: super: - let - x = f0 super; - in - if builtins.isFunction x then f0 self super else x; - in - makeDerivationExtensible ( - self: attrs // (if builtins.isFunction f0 || f0 ? __functor then f self attrs else f0) - ) - ) attrs; + makeDerivationExtensibleConst = attrs: makeDerivationExtensible (_: attrs); knownHardeningFlags = [ "bindnow" From 7dd49427b5d42bbba33063ec5b9ed633f196a646 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Wed, 28 May 2025 16:52:26 +0200 Subject: [PATCH 03/10] mkDerivation: Inline makeDerivationExtensibleConst --- pkgs/stdenv/generic/make-derivation.nix | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix index fda9158ff179..5998625c7be1 100644 --- a/pkgs/stdenv/generic/make-derivation.nix +++ b/pkgs/stdenv/generic/make-derivation.nix @@ -67,7 +67,7 @@ let if isFunction fnOrAttrs then makeDerivationExtensible fnOrAttrs else - makeDerivationExtensibleConst fnOrAttrs; + makeDerivationExtensible (_: fnOrAttrs); checkMeta = import ./check-meta.nix { inherit lib config; @@ -136,8 +136,6 @@ let in finalPackage; - makeDerivationExtensibleConst = attrs: makeDerivationExtensible (_: attrs); - knownHardeningFlags = [ "bindnow" "format" From 3ac2a8b171b340e5301220ec62d89209419910ed Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Wed, 28 May 2025 16:54:41 +0200 Subject: [PATCH 04/10] mkDerivation: Distribute makeDerivationExtensible and if-then-else --- pkgs/stdenv/generic/make-derivation.nix | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix index 5998625c7be1..5fae0012db0e 100644 --- a/pkgs/stdenv/generic/make-derivation.nix +++ b/pkgs/stdenv/generic/make-derivation.nix @@ -64,10 +64,12 @@ let */ mkDerivation = fnOrAttrs: - if isFunction fnOrAttrs then - makeDerivationExtensible fnOrAttrs - else - makeDerivationExtensible (_: fnOrAttrs); + makeDerivationExtensible ( + if isFunction fnOrAttrs then + fnOrAttrs + else + (_: fnOrAttrs) + ); checkMeta = import ./check-meta.nix { inherit lib config; From 754c8e4b29a03d6d5dcfacaea646a0d0ab2fc1eb Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Wed, 28 May 2025 16:55:34 +0200 Subject: [PATCH 05/10] mkDerivation: Reuse toFunction --- pkgs/stdenv/generic/make-derivation.nix | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix index 5fae0012db0e..e9760ee1be27 100644 --- a/pkgs/stdenv/generic/make-derivation.nix +++ b/pkgs/stdenv/generic/make-derivation.nix @@ -24,7 +24,6 @@ let isAttrs isBool isDerivation - isFunction isInt isList isString @@ -37,6 +36,7 @@ let remove splitString subtractLists + toFunction unique zipAttrsWith ; @@ -62,14 +62,7 @@ let Most arguments are also passed through to the underlying call of [`builtins.derivation`](https://nixos.org/manual/nix/stable/language/derivations). ::: */ - mkDerivation = - fnOrAttrs: - makeDerivationExtensible ( - if isFunction fnOrAttrs then - fnOrAttrs - else - (_: fnOrAttrs) - ); + mkDerivation = fnOrAttrs: makeDerivationExtensible (toFunction fnOrAttrs); checkMeta = import ./check-meta.nix { inherit lib config; From 5833d2d46ffa8b60e08518de165935f7b7f80741 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Wed, 28 May 2025 18:09:41 +0200 Subject: [PATCH 06/10] makeDerivation: Define a version of override to require a prev version Setting a previously unset `version` attribute is hardly an override, and more likely just a feature of constructing a package in steps. --- pkgs/stdenv/generic/make-derivation.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix index e9760ee1be27..9b7fdddb8683 100644 --- a/pkgs/stdenv/generic/make-derivation.nix +++ b/pkgs/stdenv/generic/make-derivation.nix @@ -95,6 +95,7 @@ let thisOverlay = overlay final prev; warnForBadVersionOverride = ( thisOverlay ? version + && prev ? version && !(thisOverlay ? src) && !(thisOverlay.__intentionallyOverridingVersion or false) ); From 3138024ae22b38436dfa71678ad94fa27a76dfbe Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Wed, 28 May 2025 18:25:03 +0200 Subject: [PATCH 07/10] libcollectdclient: Refactor: drop redundant inherit This triggered a warning. Arguably setting the version to the same value doesn't require a `src` override (suggestion of the warning), but let's use this opportunity to just clean it up. --- pkgs/by-name/li/libcollectdclient/package.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/pkgs/by-name/li/libcollectdclient/package.nix b/pkgs/by-name/li/libcollectdclient/package.nix index ae8b2dc671fc..b9247629c574 100644 --- a/pkgs/by-name/li/libcollectdclient/package.nix +++ b/pkgs/by-name/li/libcollectdclient/package.nix @@ -2,7 +2,6 @@ collectd.overrideAttrs (oldAttrs: { pname = "libcollectdclient"; - inherit (collectd) version; buildInputs = [ ]; configureFlags = (oldAttrs.configureFlags or [ ]) ++ [ From 7758a59808b86dbec2021d9c8e6b17fa93dd9213 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Wed, 28 May 2025 18:27:29 +0200 Subject: [PATCH 08/10] stdenv/darwin: Ignore version override warning I don't suppose we need to set `src`, the suggestion of the warning. This is presumably just to signify that it's not the final build (not *really*) a version. --- pkgs/stdenv/darwin/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/stdenv/darwin/default.nix b/pkgs/stdenv/darwin/default.nix index 00ce52edd947..49f0ff040a41 100644 --- a/pkgs/stdenv/darwin/default.nix +++ b/pkgs/stdenv/darwin/default.nix @@ -439,6 +439,7 @@ assert bootstrapTools.passthru.isFromBootstrapFiles or false; # sanity check (superDarwin.binutils-unwrapped.override { enableManpages = false; }).overrideAttrs (old: { version = "boot"; + __intentionallyOverridingVersion = true; # to avoid a warning suggesting to provide src passthru = (old.passthru or { }) // { isFromBootstrapFiles = true; }; From c50933c33f960f8813d57e1f7ef80b09a8e7e5bf Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Wed, 28 May 2025 18:38:20 +0200 Subject: [PATCH 09/10] isabelle/polyml: Ignore version override warning for now --- pkgs/top-level/all-packages.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 68f275e9a295..aa14d56cf923 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15900,6 +15900,7 @@ with pkgs; polyml = polyml.overrideAttrs { pname = "polyml-for-isabelle"; version = "2025"; + __intentionallyOverridingVersion = true; # avoid a warning, no src override configureFlags = [ "--enable-intinf-as-int" "--with-gmp" From 1af65a4adcae8091d1fb74202b877b4ed7d0aa27 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Wed, 28 May 2025 18:39:03 +0200 Subject: [PATCH 10/10] mkDerivation: Add comment about version override check --- pkgs/stdenv/generic/make-derivation.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix index 9b7fdddb8683..7bd3301169c9 100644 --- a/pkgs/stdenv/generic/make-derivation.nix +++ b/pkgs/stdenv/generic/make-derivation.nix @@ -96,6 +96,9 @@ let warnForBadVersionOverride = ( thisOverlay ? version && prev ? version + # We could check that the version is actually distinct, but that + # would probably just delay the inevitable, or preserve tech debt. + # && prev.version != thisOverlay.version && !(thisOverlay ? src) && !(thisOverlay.__intentionallyOverridingVersion or false) );