* Add a script to retrieve licenses of the current derivation and of all
its dependencies. To make it works, you need to change the default stdenv as documented in the error message. ./maintainers/scripts/dep-licenses.sh <attribute name> svn path=/nixpkgs/trunk/; revision=18508
This commit is contained in:
parent
86f8f47d87
commit
00efa9c2dd
57
maintainers/scripts/dep-licenses.sh
Executable file
57
maintainers/scripts/dep-licenses.sh
Executable file
@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
attr=$1
|
||||||
|
|
||||||
|
: ${NIXPKGS=/etc/nixos/nixpkgs}
|
||||||
|
|
||||||
|
tmp=$(mktemp --tmpdir -d nixpkgs-dep-license.XXXXXX)
|
||||||
|
|
||||||
|
exitHandler() {
|
||||||
|
exitCode=$?
|
||||||
|
rm -rf "$tmp"
|
||||||
|
exit $exitCode
|
||||||
|
}
|
||||||
|
|
||||||
|
trap "exitHandler" EXIT
|
||||||
|
|
||||||
|
# fetch the trace and the drvPath of the attribute.
|
||||||
|
nix-instantiate $NIXPKGS -A $attr --show-trace > "$tmp/drvPath" 2> "$tmp/trace" || {
|
||||||
|
cat 1>&2 - "$tmp/trace" <<EOF
|
||||||
|
An error occured while evaluating $attr.
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# generate a sed script based on the trace output.
|
||||||
|
sed '
|
||||||
|
\,@:.*:@, {
|
||||||
|
# \1 *.drv file
|
||||||
|
# \2 License terms
|
||||||
|
s,.*@:drv:\(.*\):\(.*\):@.*,s!\1!\1: \2!; t;,
|
||||||
|
s!Str(\\\"\([^,]*\)\\\",\[\])!\1!g
|
||||||
|
b
|
||||||
|
}
|
||||||
|
d
|
||||||
|
' "$tmp/trace" > "$tmp/filter.sed"
|
||||||
|
|
||||||
|
if test $(wc -l "$tmp/filter.sed" | sed 's/ .*//') == 0; then
|
||||||
|
echo 1>&2 "
|
||||||
|
No derivation mentionned in the stack trace. Either your derivation does
|
||||||
|
not use stdenv.mkDerivation or you forgot to use the stdenv adapter named
|
||||||
|
traceDrvLicenses.
|
||||||
|
|
||||||
|
- defaultStdenv = allStdenvs.stdenv;
|
||||||
|
+ defaultStdenv = traceDrvLicenses allStdenvs.stdenv;
|
||||||
|
"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# remove all dependencies which are using stdenv.mkDerivation
|
||||||
|
echo '
|
||||||
|
d
|
||||||
|
' >> "$tmp/filter.sed"
|
||||||
|
|
||||||
|
nix-store -q --tree $(cat "$tmp/drvPath") | sed -f "$tmp/filter.sed"
|
||||||
|
|
||||||
|
exit 0;
|
@ -202,4 +202,29 @@ rec {
|
|||||||
(stdenv.mkDerivation args)
|
(stdenv.mkDerivation args)
|
||||||
{ meta.maintainers = maintainers; };
|
{ meta.maintainers = maintainers; };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Use the trace output to report all processed derivations with their
|
||||||
|
license name.
|
||||||
|
|
||||||
|
*/
|
||||||
|
traceDrvLicenses = stdenv: stdenv //
|
||||||
|
{ mkDerivation = args:
|
||||||
|
let
|
||||||
|
pkg = stdenv.mkDerivation args;
|
||||||
|
printDrvPath = val: let
|
||||||
|
drvPath = builtins.unsafeDiscardStringContext pkg.drvPath;
|
||||||
|
license =
|
||||||
|
if pkg ? meta && pkg.meta ? license then
|
||||||
|
pkg.meta.license
|
||||||
|
else
|
||||||
|
null;
|
||||||
|
in
|
||||||
|
builtins.trace "@:drv:${toString drvPath}:${builtins.exprToString license}:@"
|
||||||
|
val;
|
||||||
|
in pkg // {
|
||||||
|
outPath = printDrvPath pkg.outPath;
|
||||||
|
drvPath = printDrvPath pkg.drvPath;
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user