Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.24-rc6 /scripts/checkkconfigsymbols.sh

Filename:/scripts/checkkconfigsymbols.sh
Lines Added:59
Lines Deleted:0
Also changed in: (Previous) 2.6.24-rc5  2.6.24-rc4  2.6.24-rc3  2.6.24-rc2  2.6.24-rc1  2.6.23-git19 
(Following) 2.6.24-rc7  2.6.24-rc8  2.6.24 

Location
[  2.6.24-rc6
  [  scripts
     o  checkkconfigsymbols.sh

Patch

diff --git a/scripts/checkkconfigsymbols.sh b/scripts/checkkconfigsymbols.sh
new file mode 100755
index 0000000..39677c8
--- /dev/null
+++ b/scripts/checkkconfigsymbols.sh
@@ -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


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.