summaryrefslogtreecommitdiff
path: root/util/lint/kconfig_lint
diff options
context:
space:
mode:
Diffstat (limited to 'util/lint/kconfig_lint')
-rwxr-xr-xutil/lint/kconfig_lint27
1 files changed, 15 insertions, 12 deletions
diff --git a/util/lint/kconfig_lint b/util/lint/kconfig_lint
index bec86e4be8..adb42c8c3c 100755
--- a/util/lint/kconfig_lint
+++ b/util/lint/kconfig_lint
@@ -42,14 +42,14 @@ my $exclude_dirs_and_files =
'^build/\|^coreboot-builds/\|^payloads/libpayload\|^payloads/coreinfo\|^configs/\|^util/\|^\.git/'
. '\|' . # directories to exclude when searching for used symbols
'\.txt$\|\.tex$\|\.tags'; #files to exclude when looking for symbols
-my $config_file = ""; # name of config file to load symbol values from.
-my @wholeconfig; # document the entire kconfig structure
-my %loaded_files; # list of each Kconfig file loaded
-my %symbols; # main structure of all symbols declared
-my %referenced_symbols; # list of symbols referenced by expressions or select statements
-my %used_symbols; # structure of symbols used in the tree, and where they're found
-my @collected_symbols; #
-my %selected_symbols; # list of symbols that are enabled by a select statement
+my $config_file = ""; # name of config file to load symbol values from.
+my @wholeconfig; # document the entire kconfig structure
+my %loaded_files; # list of each Kconfig file loaded
+my %symbols; # main structure of all symbols declared
+my %referenced_symbols; # list of symbols referenced by expressions or select statements
+my %used_symbols; # structure of symbols used in the tree, and where they're found
+my @collected_symbols; #
+my %selected_symbols; # list of symbols that are enabled by a select statement
my $exclude_unused = '_SPECIFIC_OPTIONS|SOUTH_BRIDGE_OPTIONS';
@@ -419,7 +419,6 @@ sub build_and_parse_kconfig_tree {
#start the tree off by loading the top level kconfig
@config_to_parse = load_kconfig_file( $top_level_kconfig, "", 0, 0, "", 0 );
-
while ( ( @parseline = shift(@config_to_parse) ) && ( exists $parseline[0]{text} ) ) {
my $line = $parseline[0]{text};
my $filename = $parseline[0]{filename};
@@ -504,6 +503,8 @@ sub build_and_parse_kconfig_tree {
$inside_config = "";
$inside_choice = "$filename $line_no";
$configs_inside_choice = 0;
+
+ # Kconfig verifies that choice blocks have a prompt
}
# endchoice
@@ -535,6 +536,10 @@ sub build_and_parse_kconfig_tree {
# mainmenu <prompt>
elsif ( $line =~ /^\s*mainmenu/ ) {
$inside_config = "";
+
+ # Kconfig alread checks for multiple 'mainmenu' entries and mainmenu entries with no prompt
+ # Possible check: look for 'mainmenu ""'
+ # Possible check: verify that a mainmenu has been specified
}
# menu <prompt>
@@ -564,7 +569,6 @@ sub build_and_parse_kconfig_tree {
my $expr = $1;
push( @inside_if, $expr );
handle_expressions( $expr, $inside_config, $filename, $line_no );
-
}
# endif
@@ -679,7 +683,6 @@ sub add_symbol {
}
}
-
# add the location of this instance
my $symcount = $symbols{$symbol}{count};
$symbols{$symbol}{$symcount}{file} = $filename;
@@ -987,6 +990,7 @@ sub handle_prompt {
$prompt = $1;
}
+ #display an error if there's a prompt at the top menu level
if ( !defined @$menu_array_ref[0] ) {
show_error( "Symbol '$inside_config' with prompt '$prompt' appears outside of a menu"
. " at $filename:$line_no." );
@@ -1145,7 +1149,6 @@ sub load_kconfig_file {
return @dir_file_data;
}
-
#-------------------------------------------------------------------------------
# print_wholeconfig - prints out the parsed Kconfig file
#-------------------------------------------------------------------------------