|
@@ -0,0 +1,59 @@
|
|
|
+#!/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*[^~]'`"
|
|
|
+
|
|
|
+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-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
|
|
|
+ echo -e "$files: \t$symb"
|
|
|
+ fi
|
|
|
+done|sort
|