mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 16:54:20 +08:00
03b550d3f9
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>
60 lines
1.8 KiB
Bash
Executable File
60 lines
1.8 KiB
Bash
Executable File
#!/bin/sh
|
|
# Find Kconfig variables used in source code but never defined in Kconfig
|
|
# Copyright (C) 2007, Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
|
|
|
|
# Tested with dash.
|
|
paths="$@"
|
|
[ -z "$paths" ] && paths=.
|
|
|
|
# Doing this once at the beginning saves a lot of time, on a cache-hot tree.
|
|
Kconfigs="`find . -name 'Kconfig' -o -name 'Kconfig*[^~]'`"
|
|
|
|
/bin/echo -e "File list \tundefined symbol used"
|
|
find $paths -name '*.[chS]' -o -name 'Makefile' -o -name 'Makefile*[^~]'| while read i
|
|
do
|
|
# Output the bare Kconfig variable and the filename; the _MODULE part at
|
|
# the end is not removed here (would need perl an not-hungry regexp for that).
|
|
sed -ne 's!^.*\<\(UML_\)\?CONFIG_\([0-9A-Za-z_]\+\).*!\2 '$i'!p' < $i
|
|
done | \
|
|
# Smart "sort|uniq" implemented in awk and tuned to collect the names of all
|
|
# files which use a given symbol
|
|
awk '{map[$1, count[$1]++] = $2; }
|
|
END {
|
|
for (combIdx in map) {
|
|
split(combIdx, separate, SUBSEP);
|
|
# The value may have been removed.
|
|
if (! ( (separate[1], separate[2]) in map ) )
|
|
continue;
|
|
symb=separate[1];
|
|
printf "%s ", symb;
|
|
#Use gawk extension to delete the names vector
|
|
delete names;
|
|
#Portably delete the names vector
|
|
#split("", names);
|
|
for (i=0; i < count[symb]; i++) {
|
|
names[map[symb, i]] = 1;
|
|
# Unfortunately, we may still encounter symb, i in the
|
|
# outside iteration.
|
|
delete map[symb, i];
|
|
}
|
|
i=0;
|
|
for (name in names) {
|
|
if (i > 0)
|
|
printf ", %s", name;
|
|
else
|
|
printf "%s", name;
|
|
i++;
|
|
}
|
|
printf "\n";
|
|
}
|
|
}' |
|
|
while read symb files; do
|
|
# Remove the _MODULE suffix when checking the variable name. This should
|
|
# be done only on tristate symbols, actually, but Kconfig parsing is
|
|
# beyond the purpose of this script.
|
|
symb_bare=`echo $symb | sed -e 's/_MODULE//'`
|
|
if ! grep -q "\<$symb_bare\>" $Kconfigs; then
|
|
/bin/echo -e "$files: \t$symb"
|
|
fi
|
|
done|sort
|