diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-16 11:23:06 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-16 11:23:06 -0700 |
commit | 821f3eff7cdb9d6c7076effabd46c96c322daed1 (patch) | |
tree | 60f13155196fd6c84424c8aebc133ca4a5f56749 /scripts/checkkconfigsymbols.sh | |
parent | ebc283118ee448dcb6e6cae74a8a43f17a1ccc3f (diff) | |
parent | f77bf01425b11947eeb3b5b54685212c302741b8 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild
* git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild: (40 commits)
kbuild: introduce ccflags-y, asflags-y and ldflags-y
kbuild: enable 'make CPPFLAGS=...' to add additional options to CPP
kbuild: enable use of AFLAGS and CFLAGS on commandline
kbuild: enable 'make AFLAGS=...' to add additional options to AS
kbuild: fix AFLAGS use in h8300 and m68knommu
kbuild: check for wrong use of CFLAGS
kbuild: enable 'make CFLAGS=...' to add additional options to CC
kbuild: fix up CFLAGS usage
kbuild: make modpost detect unterminated device id lists
kbuild: call export_report from the Makefile
kbuild: move Kai Germaschewski to CREDITS
kconfig/menuconfig: distinguish between selected-by-another options and comments
kconfig: tristate choices with mixed tristate and boolean values
include/linux/Kbuild: remove duplicate entries
kbuild: kill backward compatibility checks
kbuild: kill EXTRA_ARFLAGS
kbuild: fix documentation in makefiles.txt
kbuild: call make once for all targets when O=.. is used
kbuild: pass -g to assembler under CONFIG_DEBUG_INFO
kbuild: update _shipped files for kconfig syntax cleanup
...
Fix up conflicts in arch/um/sys-{x86_64,i386}/Makefile manually.
Diffstat (limited to 'scripts/checkkconfigsymbols.sh')
-rwxr-xr-x | scripts/checkkconfigsymbols.sh | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/scripts/checkkconfigsymbols.sh b/scripts/checkkconfigsymbols.sh new file mode 100755 index 00000000000..39677c82747 --- /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 |