Commit:     0bce67352b580e9025059ecc71e13e0ffd281254
Parent:     aa1e5ef5c1d95e7ebf0821d9ba27debe43a87a22
Author:     Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]>
AuthorDate: Sat Aug 25 09:45:28 2007 +0200
Committer:  Sam Ravnborg <[EMAIL PROTECTED](none)>
CommitDate: Fri Oct 12 21:13:50 2007 +0200

    kbuild: script to check for undefined Kconfig symbols
    To avoid having to look manually for used but undefined Kconfig variables,
    I've written a script which tries do this efficiently, in case all other
    attention fail.  It accounts for _MODULE suffix and for UML_ prefixes to
    Kconfig variable, but otherwise looks for exact matches (i.e.  \<CONFIG_;
    this is done to exclude macros like MMCONFIG_).
    Undefined Kconfig variables should be not be removed without care, but for
    instance arch/i386/boot/ uses a bunch of undefined Kconfig vars:
    $ scripts/ arch/i386/boot/
    arch/i386/boot/video.h uses undefined symbol VIDEO_400_HACK
    arch/i386/boot/video-vga.c uses undefined symbol VIDEO_400_HACK
    arch/i386/boot/video.c uses undefined symbol VIDEO_RETAIN
    arch/i386/boot/video.h uses undefined symbol VIDEO_RETAIN
    arch/i386/boot/video.h uses undefined symbol VIDEO_SVGA
    arch/i386/boot/video.h uses undefined symbol VIDEO_VESA
    arch/i386/boot/video-vesa.c uses undefined symbol VIDEO_VESA
    It should also be mentioned in SubmittingPatches and SubmitChecklist.
    Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]>
    Cc: Roman Zippel <[EMAIL PROTECTED]>
    Cc: Adrian Bunk <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Sam Ravnborg <[EMAIL PROTECTED]>
 scripts/ |   59 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 59 insertions(+), 0 deletions(-)

diff --git a/scripts/ b/scripts/
new file mode 100755
index 0000000..39677c8
--- /dev/null
+++ b/scripts/
@@ -0,0 +1,59 @@
+# Find Kconfig variables used in source code but never defined in Kconfig
+# Copyright (C) 2007, Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]>
+# Tested with dash.
+[ -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
+       # 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 
+       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
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to