Allow marking licenses as unfree

This allows licenses like the Amazon Software License to be identified
properly while still preventing packages with those licenses from
being distributed in the Nixpkgs/NixOS channels.
This commit is contained in:
Eelco Dolstra 2014-11-05 15:15:00 +01:00
parent 858cfbc993
commit af0557cf82
2 changed files with 18 additions and 4 deletions

View file

@ -25,6 +25,7 @@ rec {
shortName = "asl";
fullName = "Amazon Software License";
url = http://aws.amazon.com/asl/;
free = false;
};
amd = {
@ -290,11 +291,21 @@ rec {
url = http://www.tcl.tk/software/tcltk/license.html;
};
unfree = "unfree";
unfree = {
fullName = "Unfree";
free = false;
};
unfreeRedistributable = "unfree-redistributable";
unfreeRedistributable = {
fullName = "Unfree redistributable";
free = false;
};
unfreeRedistributableFirmware = "unfree-redistributable-firmware";
unfreeRedistributableFirmware = {
fullName = "Unfree redistributable firmware";
# Note: we currently consider these "free" for inclusion in the
# channel and NixOS images.
};
unlicense = {
shortName = "Unlicense";

View file

@ -41,6 +41,9 @@ let
unsafeGetAttrPos = builtins.unsafeGetAttrPos or (n: as: null);
isUnfree = licenses: lib.lists.any (l:
!l.free or true || l == "unfree" || l == "unfree-redistributable") licenses;
# The stdenv that we are producing.
result =
@ -84,7 +87,7 @@ let
unsafeGetAttrPos "name" attrs;
pos' = if pos != null then "" + pos.file + ":" + toString pos.line + "" else "«unknown-file»";
in
if !allowUnfree && (let l = lib.lists.toList attrs.meta.license or []; in lib.lists.elem "unfree" l || lib.lists.elem "unfree-redistributable" l) && !(allowUnfreePredicate attrs) then
if !allowUnfree && isUnfree (lib.lists.toList attrs.meta.license or []) && !allowUnfreePredicate attrs then
throw ''
Package ${attrs.name} in ${pos'} has an unfree license, refusing to evaluate.
${forceEvalHelp "Unfree"}''