about summary refs log tree commit diff
path: root/pkgs/stdenv/generic
diff options
context:
space:
mode:
authorJan Malakhovski <oxij@oxij.org>2018-01-02 14:52:27 +0000
committerJan Malakhovski <oxij@oxij.org>2018-01-14 13:24:30 +0000
commiteaee2a119916b2761d08cb8f68f1b4afbde15e51 (patch)
tree68d5cead0b2bc61317ad48071e19b3714e78d780 /pkgs/stdenv/generic
parentecd3990cd4bd76e15658975f2e6f523f805ce52e (diff)
downloadnixlib-eaee2a119916b2761d08cb8f68f1b4afbde15e51.tar
nixlib-eaee2a119916b2761d08cb8f68f1b4afbde15e51.tar.gz
nixlib-eaee2a119916b2761d08cb8f68f1b4afbde15e51.tar.bz2
nixlib-eaee2a119916b2761d08cb8f68f1b4afbde15e51.tar.lz
nixlib-eaee2a119916b2761d08cb8f68f1b4afbde15e51.tar.xz
nixlib-eaee2a119916b2761d08cb8f68f1b4afbde15e51.tar.zst
nixlib-eaee2a119916b2761d08cb8f68f1b4afbde15e51.zip
stdenv: implement `config.checkMetaRecursively`
This option makes `meta.evaluate` into a close approximation of the result of
evaluating `.outPath` by checking all the dependencies recursively at a cost of
2x slowdown. Note that actually evaluating `.outPath` costs some
5x-7x more because `.outPath` also computes all the hashes.
Diffstat (limited to 'pkgs/stdenv/generic')
-rw-r--r--pkgs/stdenv/generic/make-derivation.nix8
1 files changed, 7 insertions, 1 deletions
diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix
index 78e558daff1b..ab5edfcd17c0 100644
--- a/pkgs/stdenv/generic/make-derivation.nix
+++ b/pkgs/stdenv/generic/make-derivation.nix
@@ -72,6 +72,9 @@ rec {
       inherit erroneousHardeningFlags hardeningDisable hardeningEnable supportedHardeningFlags;
     })
     else let
+      references = nativeBuildInputs ++ buildInputs
+                ++ propagatedNativeBuildInputs ++ propagatedBuildInputs;
+
       dependencies = map (map lib.chooseDevOutputs) [
         [
           (map (drv: drv.__spliced.buildBuild or drv) depsBuildBuild)
@@ -213,7 +216,10 @@ rec {
           position = pos.file + ":" + toString pos.line;
         # Expose the result of the checks for everyone to see.
         } // {
-          evaluates = validity.valid;
+          evaluates = validity.valid
+                   && (if config.checkMetaRecursively or false
+                       then lib.all (d: d.meta.evaluates or true) references
+                       else true);
         };
 
     in