summary refs log tree commit diff
path: root/maintainers/scripts/dep-licenses.sh
blob: 28ad22c334fc1e8603e067b89602159051b3a1c6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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 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;