Commit 03b550d3f9faf912d935ea310363e8e96d3aeeea

Authored by Roland Dreier
Committed by Michal Marek
1 parent 073ed10363

checkkconfigsymbols.sh: Kconfig symbols sometimes have lowercase letters

Quite a few Kconfig symbols contain lowercase letters.  The current
checkkconfigsymbols.sh code only contains A-Z in the regexp it uses to
find config symbols in source code, so it comes up with the wrong symbol
to look for in Kconfig files and then generates false positives when it
doesn't find that wrong symbol.  For example checking drivers/net
generates a false positive for MAC89 because the the actual config
option is MAC89x0.

Fix this by also adding a-z to the regexp.

Signed-off-by: Roland Dreier <rolandd@cisco.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Michal Marek <mmarek@suse.cz>

Showing 1 changed file with 1 additions and 1 deletions Inline Diff

scripts/checkkconfigsymbols.sh
1 #!/bin/sh 1 #!/bin/sh
2 # Find Kconfig variables used in source code but never defined in Kconfig 2 # Find Kconfig variables used in source code but never defined in Kconfig
3 # Copyright (C) 2007, Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> 3 # Copyright (C) 2007, Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
4 4
5 # Tested with dash. 5 # Tested with dash.
6 paths="$@" 6 paths="$@"
7 [ -z "$paths" ] && paths=. 7 [ -z "$paths" ] && paths=.
8 8
9 # Doing this once at the beginning saves a lot of time, on a cache-hot tree. 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*[^~]'`" 10 Kconfigs="`find . -name 'Kconfig' -o -name 'Kconfig*[^~]'`"
11 11
12 /bin/echo -e "File list \tundefined symbol used" 12 /bin/echo -e "File list \tundefined symbol used"
13 find $paths -name '*.[chS]' -o -name 'Makefile' -o -name 'Makefile*[^~]'| while read i 13 find $paths -name '*.[chS]' -o -name 'Makefile' -o -name 'Makefile*[^~]'| while read i
14 do 14 do
15 # Output the bare Kconfig variable and the filename; the _MODULE part at 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). 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 17 sed -ne 's!^.*\<\(UML_\)\?CONFIG_\([0-9A-Za-z_]\+\).*!\2 '$i'!p' < $i
18 done | \ 18 done | \
19 # Smart "sort|uniq" implemented in awk and tuned to collect the names of all 19 # Smart "sort|uniq" implemented in awk and tuned to collect the names of all
20 # files which use a given symbol 20 # files which use a given symbol
21 awk '{map[$1, count[$1]++] = $2; } 21 awk '{map[$1, count[$1]++] = $2; }
22 END { 22 END {
23 for (combIdx in map) { 23 for (combIdx in map) {
24 split(combIdx, separate, SUBSEP); 24 split(combIdx, separate, SUBSEP);
25 # The value may have been removed. 25 # The value may have been removed.
26 if (! ( (separate[1], separate[2]) in map ) ) 26 if (! ( (separate[1], separate[2]) in map ) )
27 continue; 27 continue;
28 symb=separate[1]; 28 symb=separate[1];
29 printf "%s ", symb; 29 printf "%s ", symb;
30 #Use gawk extension to delete the names vector 30 #Use gawk extension to delete the names vector
31 delete names; 31 delete names;
32 #Portably delete the names vector 32 #Portably delete the names vector
33 #split("", names); 33 #split("", names);
34 for (i=0; i < count[symb]; i++) { 34 for (i=0; i < count[symb]; i++) {
35 names[map[symb, i]] = 1; 35 names[map[symb, i]] = 1;
36 # Unfortunately, we may still encounter symb, i in the 36 # Unfortunately, we may still encounter symb, i in the
37 # outside iteration. 37 # outside iteration.
38 delete map[symb, i]; 38 delete map[symb, i];
39 } 39 }
40 i=0; 40 i=0;
41 for (name in names) { 41 for (name in names) {
42 if (i > 0) 42 if (i > 0)
43 printf ", %s", name; 43 printf ", %s", name;
44 else 44 else
45 printf "%s", name; 45 printf "%s", name;
46 i++; 46 i++;
47 } 47 }
48 printf "\n"; 48 printf "\n";
49 } 49 }
50 }' | 50 }' |
51 while read symb files; do 51 while read symb files; do
52 # Remove the _MODULE suffix when checking the variable name. This should 52 # Remove the _MODULE suffix when checking the variable name. This should
53 # be done only on tristate symbols, actually, but Kconfig parsing is 53 # be done only on tristate symbols, actually, but Kconfig parsing is
54 # beyond the purpose of this script. 54 # beyond the purpose of this script.
55 symb_bare=`echo $symb | sed -e 's/_MODULE//'` 55 symb_bare=`echo $symb | sed -e 's/_MODULE//'`
56 if ! grep -q "\<$symb_bare\>" $Kconfigs; then 56 if ! grep -q "\<$symb_bare\>" $Kconfigs; then
57 /bin/echo -e "$files: \t$symb" 57 /bin/echo -e "$files: \t$symb"
58 fi 58 fi
59 done|sort 59 done|sort
60 60