mkDerivation: Set meta.position to the source file of the derivation
This requires Nix 1.7.
This commit is contained in:
parent
9fc575367d
commit
544475cb45
@ -20,6 +20,8 @@ let
|
|||||||
|
|
||||||
allowBroken = builtins.getEnv "NIXPKGS_ALLOW_BROKEN" == "1";
|
allowBroken = builtins.getEnv "NIXPKGS_ALLOW_BROKEN" == "1";
|
||||||
|
|
||||||
|
unsafeGetAttrPos = builtins.unsafeGetAttrPos or (n: as: null);
|
||||||
|
|
||||||
stdenvGenerator = setupScript: rec {
|
stdenvGenerator = setupScript: rec {
|
||||||
|
|
||||||
# The stdenv that we are producing.
|
# The stdenv that we are producing.
|
||||||
@ -51,12 +53,20 @@ let
|
|||||||
# Add a utility function to produce derivations that use this
|
# Add a utility function to produce derivations that use this
|
||||||
# stdenv and its shell.
|
# stdenv and its shell.
|
||||||
mkDerivation = attrs:
|
mkDerivation = attrs:
|
||||||
|
let
|
||||||
|
pos =
|
||||||
|
if attrs.meta.description or null != null then
|
||||||
|
unsafeGetAttrPos "description" attrs.meta
|
||||||
|
else
|
||||||
|
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) then
|
if !allowUnfree && (let l = lib.lists.toList attrs.meta.license or []; in lib.lists.elem "unfree" l || lib.lists.elem "unfree-redistributable" l) then
|
||||||
throw "package ‘${attrs.name}’ has an unfree license, refusing to evaluate"
|
throw "package ‘${attrs.name}’ in ${pos'} has an unfree license, refusing to evaluate"
|
||||||
else if !allowBroken && attrs.meta.broken or false then
|
else if !allowBroken && attrs.meta.broken or false then
|
||||||
throw "you can't use package ‘${attrs.name}’ because it has been marked as broken"
|
throw "you can't use package ‘${attrs.name}’ in ${pos'} because it has been 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
|
||||||
throw "the package ‘${attrs.name}’ is not supported on ‘${result.system}’"
|
throw "the package ‘${attrs.name}’ in ${pos'} is not supported on ‘${result.system}’"
|
||||||
else
|
else
|
||||||
lib.addPassthru (derivation (
|
lib.addPassthru (derivation (
|
||||||
(removeAttrs attrs ["meta" "passthru" "crossAttrs"])
|
(removeAttrs attrs ["meta" "passthru" "crossAttrs"])
|
||||||
@ -89,8 +99,11 @@ let
|
|||||||
# but it's not part of the actual derivation, i.e., it's not
|
# 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
|
# passed to the builder and is not a dependency. But since we
|
||||||
# include it in the result, it *is* available to nix-env for
|
# include it in the result, it *is* available to nix-env for
|
||||||
# queries.
|
# queries. We also a meta.position attribute here to
|
||||||
meta = attrs.meta or {};
|
# identify the source location of the package.
|
||||||
|
meta = attrs.meta or {} // (if pos != null then {
|
||||||
|
position = pos.file + ":" + (toString pos.line);
|
||||||
|
} else {});
|
||||||
passthru = attrs.passthru or {};
|
passthru = attrs.passthru or {};
|
||||||
} //
|
} //
|
||||||
# Pass through extra attributes that are not inputs, but
|
# Pass through extra attributes that are not inputs, but
|
||||||
|
Loading…
x
Reference in New Issue
Block a user