Root/
1 | #!/bin/sh |
2 | # Find Kconfig variables used in source code but never defined in Kconfig |
3 | # Copyright (C) 2007, Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> |
4 | |
5 | # Tested with dash. |
6 | paths="$@" |
7 | [ -z "$paths" ] && paths=. |
8 | |
9 | # Doing this once at the beginning saves a lot of time, on a cache-hot tree. |
10 | Kconfigs="`find . -name 'Kconfig' -o -name 'Kconfig*[^~]'`" |
11 | |
12 | /bin/echo -e "File list \tundefined symbol used" |
13 | find $paths -name '*.[chS]' -o -name 'Makefile' -o -name 'Makefile*[^~]'| while read i |
14 | do |
15 | # Output the bare Kconfig variable and the filename; the _MODULE part at |
16 | # the end is not removed here (would need perl an not-hungry regexp for that). |
17 | sed -ne 's!^.*\<\(UML_\)\?CONFIG_\([0-9A-Z_]\+\).*!\2 '$i'!p' < $i |
18 | done | \ |
19 | # Smart "sort|uniq" implemented in awk and tuned to collect the names of all |
20 | # files which use a given symbol |
21 | awk '{map[$1, count[$1]++] = $2; } |
22 | END { |
23 | for (combIdx in map) { |
24 | split(combIdx, separate, SUBSEP); |
25 | # The value may have been removed. |
26 | if (! ( (separate[1], separate[2]) in map ) ) |
27 | continue; |
28 | symb=separate[1]; |
29 | printf "%s ", symb; |
30 | #Use gawk extension to delete the names vector |
31 | delete names; |
32 | #Portably delete the names vector |
33 | #split("", names); |
34 | for (i=0; i < count[symb]; i++) { |
35 | names[map[symb, i]] = 1; |
36 | # Unfortunately, we may still encounter symb, i in the |
37 | # outside iteration. |
38 | delete map[symb, i]; |
39 | } |
40 | i=0; |
41 | for (name in names) { |
42 | if (i > 0) |
43 | printf ", %s", name; |
44 | else |
45 | printf "%s", name; |
46 | i++; |
47 | } |
48 | printf "\n"; |
49 | } |
50 | }' | |
51 | while read symb files; do |
52 | # Remove the _MODULE suffix when checking the variable name. This should |
53 | # be done only on tristate symbols, actually, but Kconfig parsing is |
54 | # beyond the purpose of this script. |
55 | symb_bare=`echo $symb | sed -e 's/_MODULE//'` |
56 | if ! grep -q "\<$symb_bare\>" $Kconfigs; then |
57 | /bin/echo -e "$files: \t$symb" |
58 | fi |
59 | done|sort |
60 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9