mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-12-24 03:43:53 +03:00
* 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)
|
||||
{ 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