 03b550d3f9
			
		
	
	
	03b550d3f9
	
	
	
		
			
			Quite a few Kconfig symbols contain lowercase letters. The current checkkconfigsymbols.sh code only contains A-Z in the regexp it uses to find config symbols in source code, so it comes up with the wrong symbol to look for in Kconfig files and then generates false positives when it doesn't find that wrong symbol. For example checking drivers/net generates a false positive for MAC89 because the the actual config option is MAC89x0. Fix this by also adding a-z to the regexp. Signed-off-by: Roland Dreier <rolandd@cisco.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Michal Marek <mmarek@suse.cz>
		
			
				
	
	
		
			59 lines
		
	
	
	
		
			1.8 KiB
			
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
	
		
			1.8 KiB
			
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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*[^~]'`"
 | |
| 
 | |
| /bin/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-Za-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
 | |
| 		/bin/echo -e "$files: \t$symb"
 | |
| 	fi
 | |
| done|sort
 |