58 lines
1.2 KiB
Bash
58 lines
1.2 KiB
Bash
|
#!/bin/sh
|
||
|
|
||
|
attr=$1
|
||
|
|
||
|
: ${NIXPKGS=/etc/nixos/nixpkgs}
|
||
|
|
||
|
tmp=$(mktemp --tmpdir -d nixpkgs-dep-license.XXXXXX)
|
||
|
|
||
|
exitHandler() {
|
||
|
exitCode=$?
|
||
|
rm -rf "$tmp"
|
||
|
return $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 occurred 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;
|