Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/scripts/checkkconfigsymbols.sh
10814 views
1
#!/bin/sh
2
# Find Kconfig variables used in source code but never defined in Kconfig
3
# Copyright (C) 2007, Paolo 'Blaisorblade' Giarrusso <[email protected]>
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-Za-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
61