diff options
author | Trent Piepho <xyzzy@speakeasy.org> | 2007-05-03 11:06:09 -0700 |
---|---|---|
committer | Trent Piepho <xyzzy@speakeasy.org> | 2007-05-03 11:06:09 -0700 |
commit | 4408f03fed048fabc1d1cbbd2914924b31ed78b5 (patch) | |
tree | a2c19620adf8133aa97080a9d0bfd82e415d8303 /v4l | |
parent | a6b7ebca06389b14a9b4fa995ad5a004f9f6ccc4 (diff) | |
download | mediapointer-dvb-s2-4408f03fed048fabc1d1cbbd2914924b31ed78b5.tar.gz mediapointer-dvb-s2-4408f03fed048fabc1d1cbbd2914924b31ed78b5.tar.bz2 |
build: Update build scripts to handle menuconfig/if/endif
From: Trent Piepho <xyzzy@speakeasy.org>
Update make_myconfig.pl and make_kconfig.pl to handle menuconfig options the
same way as config options.
Update make_kconfig.pl to process if/endif directives. All config options
inside an if/endif block gain a dependency on the 'if' expression.
Make the script a little more efficient by not trying to match a line after it
has already found a match for it. This helped to enhance debug mode, so
that it will print lines which were not understood rather than silently
skipping them.
Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
Diffstat (limited to 'v4l')
-rwxr-xr-x | v4l/scripts/make_kconfig.pl | 93 | ||||
-rwxr-xr-x | v4l/scripts/make_myconfig.pl | 2 |
2 files changed, 63 insertions, 32 deletions
diff --git a/v4l/scripts/make_kconfig.pl b/v4l/scripts/make_kconfig.pl index 4fc39383f..8ed189aef 100755 --- a/v4l/scripts/make_kconfig.pl +++ b/v4l/scripts/make_kconfig.pl @@ -140,10 +140,8 @@ sub depends($$) my $key = shift; my $deps = shift; - if(!defined $key || $key eq '') { - print "Got bad key with $deps\n"; - return; - } + (!defined $key || $key eq '') and + die "Got bad key with $deps\n"; finddeps($key, $deps); push @{$depends{$key}}, $deps; } @@ -201,6 +199,7 @@ sub checkdeps() my $deps = $depends{$key}; foreach (@$deps) { if (!eval(toperl($_))) { + print "Disabling $key, dependency '$_' not met\n" if $debug; $allconfig{$key} = 0; return 0; } @@ -238,6 +237,9 @@ EOF # output combined Kconfig file. my @kconfigfiles = (); +# "if" statements found in Kconfig files. +my @kifs = (); + # Read and parse a Kconfig file. First argument is base of source # directory tree, the second is the file to open (with path). Recursivly # parses Kconfig files from 'source' directives. @@ -290,6 +292,7 @@ sub open_kconfig($$) { $default_seen = 0; $key = undef; } + next if (/^\s*#/ || /^\s*$/); # skip comments and blank lines if (m|^\s*source\s+"([^"]+)"\s*$| || m|^\s*source\s+(\S+)\s*$|) { @@ -298,8 +301,10 @@ sub open_kconfig($$) { next; } - if (m|^\s*config (\w+)\s*$|) { + my $nothandled = 0; + if (m|^\s*(?:menu)?config (\w+)\s*$|) { $key = $1; + print "Found config '$key' at $file:$.\n" if $debug; add_config($key); if (exists $minver{$key} && @@ -311,42 +316,68 @@ sub open_kconfig($$) { } else { $disabled=0; } + # Add dependencies from enclosing if/endif blocks + depends($key, $_) foreach (@kifs); } elsif (m|^\s*comment\s+"[^"]*"\s*$|) { $key = 'comment'; } elsif (m|^\s*menu\s+"[^"]*"\s*$|) { $key = 'menu'; + } elsif (m|^\s*if\s+(.+?)\s*$|) { + push @kifs, $1; + } elsif (m|^\s*endif\s*(?:#.*)?$|) { + $#kifs >= 0 or die "Unmatched endif at $file:$.\n"; + pop @kifs; + } else { + $nothandled = 1; } + next unless ($nothandled); # Remaining Kconfig directives only makse sense inside Kconfig blocks - next unless(defined $key); + unless(defined $key) { + print "Skipping $file:$. $_" if $debug; + next; + } # Don't process any directives in comment blocks (or menus) next if ($key eq 'comment' || $key eq 'menu'); - add_bool($key) if(/^\s*bool(ean)?\s/); - add_tristate($key) if (/^\s*tristate\s/); - add_int($key) if (/^\s*int\s/); - add_hex($key) if (/^\s*hex\s/); - - depends($key, $1) if (m|^\s*depends on\s+(.+?)\s*$|); - selects($key, $1, $3) if (m|^\s*select\s+(\w+)(\s+if\s+(.+?))?\s*$|); - - # Get default for int options - if (m|^\s*default "(\d+)"| && exists $intopt{$key}) { - set_int_value($key, $1); - next; - } - # Get default for hex options - if (m|^\s*default "(0x)?([[:xdigit:]]+)"| && exists $hexopt{$key}) { - set_hex_value($key, $2); - next; - } - # Override default for disabled tri/bool options - # We don't care about the default for tri/bool options otherwise - if (m/^\s*default (y|n|m|"yes"|"no")(\s+if .*)?\s*$/ && - exists $tristate{$key} && $disabled) { - $default_seen = 1; - $_ = "\tdefault n\n"; - next; + # config type + if(/^\s*bool(ean)?\s/) { + add_bool($key); + } elsif (/^\s*tristate\s/) { + add_tristate($key); + } elsif (/^\s*int\s/) { + add_int($key); + } elsif (/^\s*hex\s/) { + add_hex($key); + + # select and depend lines + } elsif (m|^\s*depends on\s+(.+?)\s*$|) { + depends($key, $1); + } elsif (m|^\s*select\s+(\w+)(\s+if\s+(.+?))?\s*$|) { + selects($key, $1, $3); + + # default lines + } elsif (m|^\s*default\s+(.+?)(?:\s+if .*)?\s*$|) { + my $o = $1; + # Get default for int options + if ($o =~ m|^"(\d+)"$| && exists $intopt{$key}) { + set_int_value($key, $1); + # Get default for hex options + } elsif ($o =~ m|^"(0x)?([[:xdigit:]]+)"$| && exists $hexopt{$key}) { + set_hex_value($key, $2); + + # Override default for disabled tri/bool options + # We don't care about the default for tri/bool options otherwise + } elsif ($o =~ /^(y|n|m|"yes"|"no")$/i && exists $tristate{$key}) { + if ($disabled) { + $default_seen = 1; + $_ = "\tdefault n\n"; + } + } else { + print "Unknown default at $file:$. $_\n" if $debug; + } + } else { + print "Skipping $file:$. $_" if $debug; } } continue { print OUT $_; diff --git a/v4l/scripts/make_myconfig.pl b/v4l/scripts/make_myconfig.pl index 0bde6f6c0..84651762d 100755 --- a/v4l/scripts/make_myconfig.pl +++ b/v4l/scripts/make_myconfig.pl @@ -24,7 +24,7 @@ close IN; my $key = 0; open IN,"Kconfig"; while (<IN>) { - if (/^config\s+(\w+)\s*$/) { + if (/^(?:menu)?config\s+(\w+)\s*$/) { $key == 0 or die "Couldn't find type of config '$key'"; $key = "CONFIG_$1"; } elsif (/^\s+bool(ean)?\s/) { |