summaryrefslogtreecommitdiff
path: root/v4l/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'v4l/scripts')
-rwxr-xr-xv4l/scripts/analyze_build.pl8
-rwxr-xr-xv4l/scripts/cardlist3
-rwxr-xr-xv4l/scripts/make_kconfig.pl140
-rwxr-xr-xv4l/scripts/make_makefile.pl14
-rwxr-xr-xv4l/scripts/make_myconfig.pl2
-rwxr-xr-xv4l/scripts/prep_commit_msg.pl25
-rwxr-xr-xv4l/scripts/saa7134.pl6
-rwxr-xr-xv4l/scripts/usbvision.pl40
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";
+}