diff options
author | Mauro Carvalho Chehab <mchehab@infradead.org> | 2006-06-11 17:58:04 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2006-06-11 17:58:04 -0300 |
commit | da2ce09c5417a5fe750ac5310d6e518bdc5bba49 (patch) | |
tree | ff46e3f2e6cba83ccf725b0ee485b6428e68f55c /v4l/scripts/make_kconfig.pl | |
parent | c0e1a168c8871c030502120b0f02fda348e14db7 (diff) | |
parent | 49e6c586ba2502f5cdce194081b3b9cfb590efec (diff) | |
download | mediapointer-dvb-s2-da2ce09c5417a5fe750ac5310d6e518bdc5bba49.tar.gz mediapointer-dvb-s2-da2ce09c5417a5fe750ac5310d6e518bdc5bba49.tar.bz2 |
merge: http://linuxtv.org/hg/~mcisely/v4l-dvb
From: Mauro Carvalho Chehab <mchehab@infradead.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'v4l/scripts/make_kconfig.pl')
-rwxr-xr-x | v4l/scripts/make_kconfig.pl | 149 |
1 files changed, 110 insertions, 39 deletions
diff --git a/v4l/scripts/make_kconfig.pl b/v4l/scripts/make_kconfig.pl index a95e4512a..0d396c8f4 100755 --- a/v4l/scripts/make_kconfig.pl +++ b/v4l/scripts/make_kconfig.pl @@ -14,6 +14,7 @@ sub add_bool($) { my $arg=shift; + exists $config{$arg} or die "Adding unknown boolean '$arg'"; $tristate{$arg}="bool"; # printf "Boolean:%s\n",$arg; } @@ -22,13 +23,17 @@ sub add_tristate($) { my $arg=shift; + exists $config{$arg} or die "Adding unknown tristate '$arg'"; $tristate{$arg}="tristate"; # printf "Tristate:%s\n",$arg; } sub add_int($) { - $intopt{$_[0]} = '0'; + my $arg=shift; + + exists $config{$arg} or die "Adding unknown int '$arg'"; + $intopt{$arg} = 0; } sub set_int_value($$) @@ -36,6 +41,7 @@ sub set_int_value($$) my $key = shift; my $val = shift; + exists $intopt{$key} or die "Default for unknown int option '$key'"; $intopt{$key} = $val; } @@ -43,11 +49,22 @@ sub add_config($) { my $arg=shift; - if ($arg =~ m/^([A-Z0-9_]+)/) { + if ($arg =~ m/^(\w+)/) { + # Have option default to 'on' $config{$1} = 1; + } else { + die "Do not understand config variable '$arg'"; } } +# Turn option off, iff it already exists +sub disable_config($) +{ + my $key = shift; + + $config{$key} = 0 if (exists $config{$key}); +} + sub check_deps($) { my $arg=shift; @@ -66,7 +83,7 @@ sub check_deps($) sub open_kconfig($$) { my ($dir,$file)=@_; my $in = new FileHandle; - my $skip=0; + my $disabled=0; my $key; #print "opening $file\n"; @@ -75,29 +92,64 @@ sub open_kconfig($$) { # if (m;^\s*source[\s\"]+drivers/media/(video|dvb)/Kconfig;) { # next; # } - if (m|^\s*source[\s\"]+([^\n\s\"]+)[\n\s\"]|) { + + # start of a new stanza, reset + if (m/^\w/) { + $disabled = 0; + $default_seen = 0; + $key = undef; + } + + if (m|^\s*source\s+"([^"]+)"\s*$| || + m|^\s*source\s+(\S+)\s*$|) { open_kconfig($dir,"$dir/$1"); next; } - if (m|^\s+depends on (.*)\n|) { + if (m|^\s+depends on\s+(.*)\n|) { check_deps ($1); } - if (m|^\s+select (.*)\n|) { + if (m|^\s+select\s+(.*)\n|) { check_deps ($1); } - if (m|^\s*bool\s+|) { + if (m|^\s+bool(ean)?\s|) { add_bool($key); } - if (m|^\s*tristate\s+|) { + if (m|^\s+tristate\s|) { add_tristate($key); } - if (m|^\s*int\s|) { + if (m|^\s+int\s|) { + add_int($key); + } + if (m|^\s+hex\s|) { add_int($key); } - if (m|^\s*default "(\d+)"| && exists $intopt{$key}) { + # Get default for int options + if (m|^\s+default "(\d+)"| && exists $intopt{$key}) { set_int_value($key, $1); } - if (m|^\s*config (.*)\n|) { + # Override default for disabled tri/bool options + if (m/^\s+default (y|n|m|"yes"|"no")\s+(if .*)?$/ && + exists $tristate{$key} && $disabled) { + $default_seen = 1; + $_ = "\tdefault n\n"; + } + + # check for end of config definition for disabled drivers + # we need to make sure we've disabled it, and add a bit + # to the help text + if (m|^\s*(---)?help(---)?\s*$| && $disabled) { + print OUT "\tdefault n\n" unless($default_seen); + print OUT <<"EOF"; + depends on VIDEO_KERNEL_VERSION + help + WARNING! This driver needs at least kernel $minver{$key}! It may not + compile or work correctly on your kernel, which is too old. + +EOF + next; + } + + if (m|^\s*config (\w+)\s*$|) { $key=$1; add_config ($1); @@ -110,27 +162,22 @@ sub open_kconfig($$) { } else { die "Minimum version for $key not found at versions.txt"; } - if ( ($version < $minversion) | - ($level < $minlevel) | + if ( ($version < $minversion) || + ($level < $minlevel) || ($sublevel < $minsublevel) ) { - $skip=1; - printf "$key requires version $minversion.$minlevel.$minsublevel\n"; - - print OUT "# $key disabled due to incorrect version\nconfig $key\n\ttristate\n\tdefault n\n\n"; - next; + $disabled=1; + disable_config ($key); + print "$key requires version $minversion.$minlevel.$minsublevel\n"; + print OUT "# $key disabled for insufficient kernel version\n"; } else { -# printf "OK: $key requires version $minversion.$minlevel.$minsublevel\n"; - $skip=0; +# print "OK: $key requires version $minversion.$minlevel.$minsublevel\n"; + $disabled=0; } } s/^main(menu\s\"[^\"]+)/\1 - DON'T CHANGE IT!/; - if (m/^[\w]/) { - $skip=0; - } - if (!$skip) { - print OUT $_; - } + + print OUT $_; } close $in; } @@ -170,9 +217,31 @@ close IN; printf "Preparing to compile for kernel version %d.%d.%d\n",$version,$level,$sublevel; open OUT,">Kconfig"; -print OUT "mainmenu \"V4L/DVB menu\"\n"; -print OUT "source Kconfig.kern\n"; +print OUT <<"EOF"; +mainmenu "V4L/DVB menu" +source Kconfig.kern +config VIDEO_KERNEL_VERSION + bool "Enable drivers not supported by this kernel" + default n + ---help--- + Normally drivers that require a kernel newer $version.$level.$sublevel, + the kernel you are compiling for now, will be disabled. + + Turning this switch on will let you enabled them, but be warned + they may not work properly or even compile. + + They may also work fine, and the only reason they are listed as + requiring a newer kernel is that no one has tested them with an + older one yet. + + If the driver works, please post a report at V4L mailing list: + video4linux-list\@redhat.com. + + Unless you know what you are doing, you should answer N. + +EOF + open_kconfig ("../linux","../linux/drivers/media/Kconfig"); close OUT; @@ -183,26 +252,28 @@ while ( my ($key, $value) = each(%config) ) { open OUT,">Kconfig.kern"; print OUT "config MODULES\n\tboolean\n\tdefault y\n\n"; -$tristate{"MODULES"}="bool"; +add_config('MODULES'); +add_bool('MODULES'); while ( my ($key, $value) = each(%depend) ) { print OUT "# $key with $value refs\nconfig $key\n\ttristate\n\tdefault m\n\n"; } close OUT; +# These options should default to off +disable_config('DVB_AV7110_FIRMWARE'); +disable_config('DVB_CINERGYT2_TUNING'); + +# Produce a .config file if it's forced or one doesn't already exist if (($force_kconfig eq 1) || !open IN,".config") { open OUT,">.config"; while ( my ($key,$value) = each(%tristate) ) { - - if ( ($key eq "DVB_AV7110_FIRMWARE") || - ($key eq "DVB_CINERGYT2_TUNING") ) { - printf OUT "CONFIG_%s=n\n",$key; - } else { - if ($value eq "tristate") { - printf OUT "CONFIG_%s=m\n",$key; - } else { - printf OUT "CONFIG_%s=y\n",$key; - } + if (!$config{$key}) { + print OUT "CONFIG_$key=n\n"; + } elsif ($value eq 'tristate') { + print OUT "CONFIG_$key=m\n"; + } else { # must be 'bool' + print OUT "CONFIG_$key=y\n"; } } while ( my ($key,$value) = each(%intopt) ) { |