summaryrefslogtreecommitdiff
path: root/v4l
diff options
context:
space:
mode:
authorTrent Piepho <xyzzy@speakeasy.org>2007-05-03 11:06:09 -0700
committerTrent Piepho <xyzzy@speakeasy.org>2007-05-03 11:06:09 -0700
commit4408f03fed048fabc1d1cbbd2914924b31ed78b5 (patch)
treea2c19620adf8133aa97080a9d0bfd82e415d8303 /v4l
parenta6b7ebca06389b14a9b4fa995ad5a004f9f6ccc4 (diff)
downloadmediapointer-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-xv4l/scripts/make_kconfig.pl93
-rwxr-xr-xv4l/scripts/make_myconfig.pl2
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/) {