diff options
Diffstat (limited to 'v4l/scripts')
-rwxr-xr-x | v4l/scripts/analyze_build.pl | 8 | ||||
-rwxr-xr-x | v4l/scripts/cardlist | 3 | ||||
-rwxr-xr-x | v4l/scripts/make_kconfig.pl | 140 | ||||
-rwxr-xr-x | v4l/scripts/make_makefile.pl | 14 | ||||
-rwxr-xr-x | v4l/scripts/make_myconfig.pl | 2 | ||||
-rwxr-xr-x | v4l/scripts/prep_commit_msg.pl | 25 | ||||
-rwxr-xr-x | v4l/scripts/saa7134.pl | 6 | ||||
-rwxr-xr-x | v4l/scripts/usbvision.pl | 40 |
8 files changed, 194 insertions, 44 deletions
diff --git a/v4l/scripts/analyze_build.pl b/v4l/scripts/analyze_build.pl index 945377fa4..9a291a2e3 100755 --- a/v4l/scripts/analyze_build.pl +++ b/v4l/scripts/analyze_build.pl @@ -97,9 +97,15 @@ sub open_makefile($) { next; } if (/(\S+)-objs\s*([:+]?)=\s*(\S.*?)\s*$/) { - print STDERR "Should use ':=' in $file:$.\n$_\n" if ($check && $2 ne ':'); my @files = split(/\s+/, $3); map { s|^(.*)\.o$|$dir/\1| } @files; + if ($2 eq '+') { + # Adding to files + print STDERR "Should use ':=' in $file:$.\n$_\n" if ($check && !exists $multi{"$dir/$1"}); + push @files, @{$multi{"$dir/$1"}}; + } else { + print STDERR "Setting objects twice in $file:$.\n$_\n" if ($check && exists $multi{"$dir/$1"}); + } $multi{"$dir/$1"} = \@files; next; } diff --git a/v4l/scripts/cardlist b/v4l/scripts/cardlist index 901d3fb18..0225d6ebd 100755 --- a/v4l/scripts/cardlist +++ b/v4l/scripts/cardlist @@ -15,3 +15,6 @@ scripts/tuner.pl ../linux/include/media/tuner.h ../linux/drivers/media/video/tun scripts/saa7134.pl ../linux/drivers/media/video/saa7134/saa7134.h ../linux/drivers/media/video/saa7134/saa7134-cards.c \ | perl -ne 's/[ \t]+$//; print' > ../linux/Documentation/video4linux/CARDLIST.saa7134 +scripts/usbvision.pl ../linux/drivers/media/video/usbvision/usbvision-cards.h ../linux/drivers/media/video/usbvision/usbvision-cards.c \ + | perl -ne 's/[ \t]+$//; print' > ../linux/Documentation/video4linux/CARDLIST.usbvision + diff --git a/v4l/scripts/make_kconfig.pl b/v4l/scripts/make_kconfig.pl index 4fc39383f..d558aaeb6 100755 --- a/v4l/scripts/make_kconfig.pl +++ b/v4l/scripts/make_kconfig.pl @@ -5,6 +5,7 @@ use strict; my %depend = (); my %minver = (); my %config = (); +my %stringopt = (); my %intopt = (); my %hexopt = (); my %tristate = (); @@ -70,6 +71,7 @@ sub add_int($) { my $arg=shift; + print "Int: $arg\n" if $debug; exists $config{$arg} or die "Adding unknown int '$arg'"; $intopt{$arg} = 0; } @@ -78,10 +80,20 @@ sub add_hex($) { my $arg=shift; + print "Hex: $arg\n" if $debug; exists $config{$arg} or die "Adding unknown hex '$arg'"; $hexopt{$arg} = 0; } +sub add_string($) +{ + my $arg=shift; + + print "String: $arg\n" if $debug; + exists $config{$arg} or die "Adding unknown string '$arg'"; + $stringopt{$arg} = ""; +} + sub set_int_value($$) { my $key = shift; @@ -100,6 +112,15 @@ sub set_hex_value($$) $hexopt{$key} = "0x$val"; } +sub set_string_value($$) +{ + my $key = shift; + my $val = shift; + + exists $stringopt{$key} or die "Default for unknown string option '$key'"; + $stringopt{$key} = "\"$val\""; +} + sub add_config($) { my $arg = shift; @@ -140,10 +161,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; } @@ -200,7 +219,9 @@ sub checkdeps() my $key = shift; my $deps = $depends{$key}; foreach (@$deps) { + next if($_ eq ''); if (!eval(toperl($_))) { + print "Disabling $key, dependency '$_' not met\n" if $debug; $allconfig{$key} = 0; return 0; } @@ -238,6 +259,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 +314,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 +323,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 +338,89 @@ 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'; + push @kifs, ''; # placeholder for any depends on clauses + } elsif (m|^\s*if\s+(.+?)\s*$|) { + push @kifs, $1; + } elsif (/^\s*end(if|menu)\s*(?:#.*)?$/) { + # Won't handle menu/if blocks that aren't strictly + # nested, but no one should do that! + $#kifs >= 0 or die "Unmatched end$1 at $file:$.\n"; + pop @kifs; + } else { + $nothandled = 1; } + next unless ($nothandled); # Remaining Kconfig directives only makse sense inside Kconfig blocks - next unless(defined $key); - - # 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); + unless(defined $key) { + print "Skipping $file:$. $_" if $debug; next; } - # Get default for hex options - if (m|^\s*default "(0x)?([[:xdigit:]]+)"| && exists $hexopt{$key}) { - set_hex_value($key, $2); + + # Don't process any directives in comment blocks + next if ($key eq 'comment'); + + # Only depends on lines are accepted in menus + if ($key eq 'menu') { + if (m|^\s*depends on\s+(.+?)\s*$|) { + my $x = pop @kifs; + $x .= ' && ' if($x ne ''); + $x .= "($1)"; + push @kifs, $x; + } else { + print "Skipping unexpected line in menu stanza $file:$.$_" if $debug; + } 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); + } elsif (/^\s*string\s/) { + add_string($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); + # Get default for string options + } elsif ($o =~ m|^"(.*)"$| && exists $stringopt{$key}) { + set_string_value($key, $1); + + # 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 $_; @@ -461,6 +535,7 @@ close OUT; disable_config('DVB_AV7110_FIRMWARE'); disable_config('DVB_CINERGYT2_TUNING'); disable_config('DVB_FE_CUSTOMISE'); +disable_config('VIDEO_HELPER_CHIPS_AUTO'); # ACI needs some kernel includes that might not be there disable_config('SOUND_ACI_MIXER') if (! -e "$kernel/sound/oss/sound_config.h"); @@ -506,6 +581,9 @@ if ($force_kconfig==1 || !-e '.config') { while (my ($key,$value) = each %hexopt) { print OUT "CONFIG_$key=$value\n" if($config{$key}); } + while (my ($key,$value) = each %stringopt) { + print OUT "CONFIG_$key=$value\n" if($config{$key}); + } close OUT; print "Created default (all yes) .config file\n"; } diff --git a/v4l/scripts/make_makefile.pl b/v4l/scripts/make_makefile.pl index e1e08b578..8711cc5a8 100755 --- a/v4l/scripts/make_makefile.pl +++ b/v4l/scripts/make_makefile.pl @@ -134,12 +134,12 @@ print OUT "\t\@strip --strip-debug \$(inst-m)\n\n"; while (my ($dir, $files) = each %instdir) { print OUT "\t\@echo -e \"\\nInstalling \$(KDIR26)/$dir files:\"\n"; - print OUT "\t\@install -d \$(KDIR26)/$dir\n"; + print OUT "\t\@install -d \$(DESTDIR)\$(KDIR26)/$dir\n"; print OUT "\t\@for i in ", join(' ', keys %$files), ";do "; print OUT "if [ -e \"\$\$i\" ]; then echo -n \"\$\$i \";"; - print OUT " install -m 644 -c \$\$i \$(KDIR26)/$dir; fi; done; echo;\n\n"; + print OUT " install -m 644 -c \$\$i \$(DESTDIR)\$(KDIR26)/$dir; fi; done; echo;\n\n"; } -print OUT "\t/sbin/depmod -a \${KERNELRELEASE}\n\n"; +print OUT "\t/sbin/depmod -a \$(KERNELRELEASE) \$(if \$(DESTDIR),-b \$(DESTDIR))\n\n"; # Creating Remove rule print OUT "media-rminstall::\n"; @@ -149,13 +149,13 @@ while ( my ($dir, $files) = each(%instdir) ) { print OUT "\t\@echo -e \"\\nRemoving old \$(KDIR26)/$dir files:\"\n"; print OUT "\t\@files='", join(' ', keys %$files), "'; "; - print OUT "for i in \$\$files;do if [ -e \$(KDIR26)/$dir/\$\$i ]; then "; + print OUT "for i in \$\$files;do if [ -e \$(DESTDIR)\$(KDIR26)/$dir/\$\$i ]; then "; print OUT "echo -n \"\$\$i \";"; - print OUT " rm \$(KDIR26)/$dir/\$\$i; fi; done; "; + print OUT " rm \$(DESTDIR)\$(KDIR26)/$dir/\$\$i; fi; done; "; - print OUT "for i in \$\$files;do if [ -e \$(KDIR26)/$dir/\$\$i.gz ]; then "; + print OUT "for i in \$\$files;do if [ -e \$(DESTDIR)\$(KDIR26)/$dir/\$\$i.gz ]; then "; print OUT "echo -n \"\$\$i.gz \";"; - print OUT " rm \$(KDIR26)/$dir/\$\$i.gz; fi; done; echo;\n\n"; + print OUT " rm \$(DESTDIR)\$(KDIR26)/$dir/\$\$i.gz; fi; done; echo;\n\n"; } # Print dependencies of Makefile.media 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/) { diff --git a/v4l/scripts/prep_commit_msg.pl b/v4l/scripts/prep_commit_msg.pl index f4047c6ba..cb0740a5d 100755 --- a/v4l/scripts/prep_commit_msg.pl +++ b/v4l/scripts/prep_commit_msg.pl @@ -1,5 +1,10 @@ #!/usr/bin/perl +my $diff = 'diff'; +if ($ARGV[0] eq '-q') { + $diff = 'qdiff'; + shift; +} my $autopatch = shift; # Get Hg username from environment @@ -45,13 +50,31 @@ if ($user eq "") { } print "# Added/removed/changed files:\n"; -system "hg diff | diffstat -p1 -c"; +system "hg $diff | diffstat -p1 -c"; if (-s $autopatch) { print "#\n# Note, a problem with your patch was detected! These changes were made\n"; print "# automatically: $autopatch\n"; system "diffstat -p0 -c $autopatch"; print "#\n# Please review these changes and see if they belong in your patch or not.\n"; } +if ($diff eq 'qdiff') { + # Use existing mq patch logfile? + open IN, "hg qheader |"; + my @header = <IN>; + close IN; + + if ($#header > 0) { + # Use existing header + print @header; + exit; + } + # No header, use pre-made log message below + + # Hg will strip lines that start with "From: " from mq patch headers! + # In order to stop it, we insert this extra From line at the top, + # Hg will strip it and then leave the real from line alone. + print "From: $user\n\n"; +} print <<"EOF"; # # For better log display, please keep a blank line after subject, after from, diff --git a/v4l/scripts/saa7134.pl b/v4l/scripts/saa7134.pl index 69648339a..2778bdccc 100755 --- a/v4l/scripts/saa7134.pl +++ b/v4l/scripts/saa7134.pl @@ -39,9 +39,9 @@ while (<>) { } # saa7134_pci_tbl - $subvendor = fix_id($1) if (/\.subvendor\s*=\s*(\w+),/); - $subdevice = fix_id($1) if (/\.subdevice\s*=\s*(\w+),/); - if (/.driver_data\s*=\s*(\w+),/) { + $subvendor = fix_id($1) if (/\.subvendor\s*=\s*(\w+)\s*,*/); + $subdevice = fix_id($1) if (/\.subdevice\s*=\s*(\w+)\s*,*/); + if (/.driver_data\s*=\s*(\w+)\s*,*/) { if (defined($data{$1}) && defined($subvendor) && $subvendor ne "0" && defined($subdevice) && $subdevice ne "0") { diff --git a/v4l/scripts/usbvision.pl b/v4l/scripts/usbvision.pl new file mode 100755 index 000000000..3976e8bd1 --- /dev/null +++ b/v4l/scripts/usbvision.pl @@ -0,0 +1,40 @@ +#!/usr/bin/perl -w +use strict; + +my $new_entry = -1; +my $nr = 0; +my ($id,$subvendor,$subdevice); +my %data; + +while (<>) { + # defines in header file + if (/#define\s*(\w+)\s*(\d+)/) { + $data{$1}->{nr} = $2; + next; + } + # boards + if (/^\s*\[([\w\d_]+)\]\s*=\s*{/) { + $id = $1; + $data{$id}->{id} = $id; + }; + + next unless defined($id); + + if (/USB_DEVICE.*0x([0-9a-fA-F]*).*0x([0-9a-fA-F]*).*driver_info\s*=\s*([\w\d_]+)/) +{ + $subvendor=$1; + $subdevice=$2; + push @{$data{$3}->{subid}}, "$subvendor:$subdevice"; + } + + if (!defined($data{$id}) || !defined($data{$id}->{name})) { + $data{$id}->{name} = $1 if (/\.ModelString\s*=\s*\"([^\"]+)\"/); + } +} + +foreach my $item (sort { $data{$a}->{nr} <=> $data{$b}->{nr} } keys %data) { + printf("%3d -> %-56s", $data{$item}->{nr}, $data{$item}->{name}); + printf(" [%s]",join(",",@{$data{$item}->{subid}})) + if defined($data{$item}->{subid}); + print "\n"; +} |