at master 1.2 kB view raw
1#!/bin/sh 2 3attr=$1 4 5: ${NIXPKGS=/etc/nixos/nixpkgs} 6 7tmp=$(mktemp --tmpdir -d nixpkgs-dep-license.XXXXXX) 8 9exitHandler() { 10 exitCode=$? 11 rm -rf "$tmp" 12 return $exitCode 13} 14 15trap "exitHandler" EXIT 16 17# fetch the trace and the drvPath of the attribute. 18nix-instantiate $NIXPKGS -A $attr --show-trace > "$tmp/drvPath" 2> "$tmp/trace" || { 19 cat 1>&2 - "$tmp/trace" <<EOF 20An error occurred while evaluating $attr. 21EOF 22 exit 1 23} 24 25# generate a sed script based on the trace output. 26sed ' 27 \,@:.*:@, { 28 # \1 *.drv file 29 # \2 License terms 30 s,.*@:drv:\(.*\):\(.*\):@.*,s!\1!\1: \2!; t;, 31 s!Str(\\\"\([^,]*\)\\\",\[\])!\1!g 32 b 33 } 34 d 35' "$tmp/trace" > "$tmp/filter.sed" 36 37if test $(wc -l "$tmp/filter.sed" | sed 's/ .*//') == 0; then 38 echo 1>&2 " 39No derivation mentionned in the stack trace. Either your derivation does 40not use stdenv.mkDerivation or you forgot to use the stdenv adapter named 41traceDrvLicenses. 42 43- defaultStdenv = allStdenvs.stdenv; 44+ defaultStdenv = traceDrvLicenses allStdenvs.stdenv; 45" 46 exit 1 47fi 48 49 50# remove all dependencies which are using stdenv.mkDerivation 51echo ' 52d 53' >> "$tmp/filter.sed" 54 55nix-store -q --tree $(cat "$tmp/drvPath") | sed -f "$tmp/filter.sed" 56 57exit 0;