Merge pull request #11309 from Profpatsch/refactor-stdenv-generic

stdenv: `licenseAllowed` -> `checkValidity`
This commit is contained in:
Peter Simons 2015-11-29 16:04:03 +01:00
commit 5e46f431f4

View File

@ -111,30 +111,41 @@ let
builtins.unsafeGetAttrPos "name" attrs; builtins.unsafeGetAttrPos "name" attrs;
pos'' = if pos' != null then "" + pos'.file + ":" + toString pos'.line + "" else "«unknown-file»"; pos'' = if pos' != null then "" + pos'.file + ":" + toString pos'.line + "" else "«unknown-file»";
throwEvalHelp = unfreeOrBroken: whatIsWrong: throwEvalHelp = { reason, errormsg }:
assert builtins.elem unfreeOrBroken ["Unfree" "Broken" "blacklisted"]; # uppercase the first character of string s
let up = s: with lib;
let cs = lib.stringToCharacters s;
in concatStrings (singleton (toUpper (head cs)) ++ tail cs);
in
assert builtins.elem reason ["unfree" "broken" "blacklisted"];
throw ("Package ${attrs.name or "«name-missing»"} in ${pos''} ${whatIsWrong}, refusing to evaluate." throw ("Package ${attrs.name or "«name-missing»"} in ${pos''} ${errormsg}, refusing to evaluate."
+ (lib.strings.optionalString (unfreeOrBroken != "blacklisted") '' + (lib.strings.optionalString (reason != "blacklisted") ''
For `nixos-rebuild` you can set For `nixos-rebuild` you can set
{ nixpkgs.config.allow${unfreeOrBroken} = true; } { nixpkgs.config.allow${up reason} = true; }
in configuration.nix to override this. in configuration.nix to override this.
For `nix-env` you can add For `nix-env` you can add
{ allow${unfreeOrBroken} = true; } { allow${up reason} = true; }
to ~/.nixpkgs/config.nix. to ~/.nixpkgs/config.nix.
'')); ''));
licenseAllowed = attrs: # Check if a derivation is valid, that is whether it passes checks for
# e.g brokenness or license.
#
# Return { valid: Bool } and additionally
# { reason: String; errormsg: String } if it is not valid, where
# reason is one of "unfree", "blacklisted" or "broken".
checkValidity = attrs:
if hasDeniedUnfreeLicense attrs && !(hasWhitelistedLicense attrs) then if hasDeniedUnfreeLicense attrs && !(hasWhitelistedLicense attrs) then
throwEvalHelp "Unfree" "has an unfree license (${showLicense attrs.meta.license})" { valid = false; reason = "unfree"; errormsg = "has an unfree license (${showLicense attrs.meta.license})"; }
else if hasBlacklistedLicense attrs then else if hasBlacklistedLicense attrs then
throwEvalHelp "blacklisted" "has a blacklisted license (${showLicense attrs.meta.license})" { valid = false; reason = "blacklisted"; errormsg = "has a blacklisted license (${showLicense attrs.meta.license})"; }
else if !allowBroken && attrs.meta.broken or false then else if !allowBroken && attrs.meta.broken or false then
throwEvalHelp "Broken" "is marked as broken" { valid = false; reason = "broken"; errormsg = "is marked as broken"; }
else if !allowBroken && attrs.meta.platforms or null != null && !lib.lists.elem result.system attrs.meta.platforms then else if !allowBroken && attrs.meta.platforms or null != null && !lib.lists.elem result.system attrs.meta.platforms then
throwEvalHelp "Broken" "is not supported on ${result.system}" { valid = false; reason = "broken"; errormsg = "is not supported on ${result.system}"; }
else true; else { valid = true; };
outputs' = outputs' =
outputs ++ outputs ++
@ -144,7 +155,12 @@ let
(if separateDebugInfo then [ ../../build-support/setup-hooks/separate-debug-info.sh ] else []); (if separateDebugInfo then [ ../../build-support/setup-hooks/separate-debug-info.sh ] else []);
in in
assert licenseAllowed attrs;
# Throw an error if trying to evaluate an non-valid derivation
assert let v = checkValidity attrs;
in if !v.valid
then throwEvalHelp (removeAttrs v ["valid"])
else true;
lib.addPassthru (derivation ( lib.addPassthru (derivation (
(removeAttrs attrs (removeAttrs attrs