diff options
author | Jan Malakhovski <oxij@oxij.org> | 2017-12-25 17:38:45 +0000 |
---|---|---|
committer | Jan Malakhovski <oxij@oxij.org> | 2018-01-03 12:20:25 +0000 |
commit | d1d5ecb3bf730984fcc7d8ef8ec322f1f67d0574 (patch) | |
tree | 324f9c8518371180e2ca241d40ac9e137a18b495 /pkgs | |
parent | b1ca8517ee54b89c24c77af3b9408066cee57d74 (diff) | |
download | nixpkgs-d1d5ecb3bf730984fcc7d8ef8ec322f1f67d0574.tar nixpkgs-d1d5ecb3bf730984fcc7d8ef8ec322f1f67d0574.tar.gz nixpkgs-d1d5ecb3bf730984fcc7d8ef8ec322f1f67d0574.tar.bz2 nixpkgs-d1d5ecb3bf730984fcc7d8ef8ec322f1f67d0574.tar.lz nixpkgs-d1d5ecb3bf730984fcc7d8ef8ec322f1f67d0574.tar.xz nixpkgs-d1d5ecb3bf730984fcc7d8ef8ec322f1f67d0574.tar.zst nixpkgs-d1d5ecb3bf730984fcc7d8ef8ec322f1f67d0574.zip |
stdenv: perform checks only when evaluating .drv and .out
This pushes check-meta evaluation to derivation evaluation step, leaving all other attributes accessible. Before this commit: > $ HOME=/homeless-shelter NIX_PATH=nixpkgs=$(pwd) nix-instantiate --eval --strict ./default.nix -A xen --argstr system aarch64-linux > Package ‘xen-4.5.5’ in pkgs/applications/virtualization/xen/generic.nix:226 is not supported on ‘aarch64-linux’, refusing to evaluate. as expected > $ HOME=/homeless-shelter NIX_PATH=nixpkgs=$(pwd) nix-instantiate --eval --strict ./default.nix -A xen.name --argstr system aarch64-linux > Package ‘xen-4.5.5’ in pkgs/applications/virtualization/xen/generic.nix:226 is not supported on ‘aarch64-linux’, refusing to evaluate. > $ HOME=/homeless-shelter NIX_PATH=nixpkgs=$(pwd) nix-instantiate --eval --strict ./default.nix -A xen.meta.description --argstr system aarch64-linux > Package ‘xen-4.5.5’ in pkgs/applications/virtualization/xen/generic.nix:226 is not supported on ‘aarch64-linux’, refusing to evaluate. which is unfortunate since its impossible to use packages in autogenerated documentation on all platforms. After this commit: > $ HOME=/homeless-shelter NIX_PATH=nixpkgs=$(pwd) nix-instantiate --eval --strict ./default.nix -A xen --argstr system aarch64-linux still fails > $ HOME=/homeless-shelter NIX_PATH=nixpkgs=$(pwd) nix-instantiate --eval --strict ./default.nix -A xen.name --argstr system aarch64-linux > "xen-4.5.5" > $ HOME=/homeless-shelter NIX_PATH=nixpkgs=$(pwd) nix-instantiate --eval --strict ./default.nix -A xen.meta.description --argstr system aarch64-linux > "Xen hypervisor and related components (vanilla)"
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/stdenv/generic/check-meta.nix | 21 | ||||
-rw-r--r-- | pkgs/stdenv/generic/make-derivation.nix | 37 |
2 files changed, 29 insertions, 29 deletions
diff --git a/pkgs/stdenv/generic/check-meta.nix b/pkgs/stdenv/generic/check-meta.nix index cd20c4a3cef..0a8dc006dc5 100644 --- a/pkgs/stdenv/generic/check-meta.nix +++ b/pkgs/stdenv/generic/check-meta.nix @@ -1,6 +1,5 @@ -# Extend a derivation with checks for brokenness, license, etc. Throw a -# descriptive error when the check fails; return `derivationArg` otherwise. -# Note: no dependencies are checked in this step. +# Checks derivation meta and attrs for problems (like brokenness, +# licenses, etc). { lib, config, system, meta, derivationArg, mkDerivationArg }: @@ -196,13 +195,11 @@ let { valid = false; reason = "unknown-meta"; errormsg = "has an invalid meta attrset:${lib.concatMapStrings (x: "\n\t - " + x) res}"; } else { valid = true; }; + validity = checkValidity attrs; + +in validity // { # Throw an error if trying to evaluate an non-valid derivation - validityCondition = - let v = checkValidity attrs; - in if !v.valid - then handleEvalIssue (removeAttrs v ["valid"]) - else true; - -in - assert validityCondition; - derivationArg + handled = if !validity.valid + then handleEvalIssue (removeAttrs validity ["valid"]) + else true; +} diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix index 2d702ab389e..6038e2c339b 100644 --- a/pkgs/stdenv/generic/make-derivation.nix +++ b/pkgs/stdenv/generic/make-derivation.nix @@ -182,6 +182,14 @@ rec { outputs = outputs'; } else { })); + validity = import ./check-meta.nix { + inherit lib config meta derivationArg; + mkDerivationArg = attrs; + # Nix itself uses the `system` field of a derivation to decide where + # to build it. This is a bit confusing for cross compilation. + inherit (stdenv) system; + }; + # The meta attribute is passed in the resulting attribute set, # but it's not part of the actual derivation, i.e., it's not # passed to the builder and is not a dependency. But since we @@ -207,21 +215,16 @@ rec { in - lib.addPassthru - (derivation (import ./check-meta.nix - { - inherit lib config meta derivationArg; - mkDerivationArg = attrs; - # Nix itself uses the `system` field of a derivation to decide where - # to build it. This is a bit confusing for cross compilation. - inherit (stdenv) system; - })) - ( { - overrideAttrs = f: mkDerivation (attrs // (f attrs)); - inherit meta passthru; - } // - # Pass through extra attributes that are not inputs, but - # should be made available to Nix expressions using the - # derivation (e.g., in assertions). - passthru); + lib.extendDerivation + validity.handled + ({ + overrideAttrs = f: mkDerivation (attrs // (f attrs)); + inherit meta passthru; + } // + # Pass through extra attributes that are not inputs, but + # should be made available to Nix expressions using the + # derivation (e.g., in assertions). + passthru) + (derivation derivationArg); + } |