summaryrefslogtreecommitdiff
path: root/v4l/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'v4l/scripts')
-rwxr-xr-xv4l/scripts/check_deps.pl228
-rwxr-xr-xv4l/scripts/hghead.pl42
-rwxr-xr-xv4l/scripts/release.sh2
-rwxr-xr-xv4l/scripts/strip-trailing-whitespaces.sh6
4 files changed, 257 insertions, 21 deletions
diff --git a/v4l/scripts/check_deps.pl b/v4l/scripts/check_deps.pl
new file mode 100755
index 000000000..e4d8f7a8f
--- /dev/null
+++ b/v4l/scripts/check_deps.pl
@@ -0,0 +1,228 @@
+#!/usr/bin/perl
+
+# Copyright (C) 2008 Mauro Carvalho Chehab <mchehab@infradead.org>
+
+
+use strict;
+use File::Find;
+use Fcntl ':mode';
+use FileHandle;
+
+my $debug=0;
+
+my $SRC = 'linux';
+
+my %export;
+
+#############
+# open_makefile were adapted from analyze_build.pl
+# by Copyright (C) 2006 Trent Piepho <xyzzy@speakeasy.org>
+
+# Print out some extra checks of Makefile correctness
+my $check = 0;
+
+# Root of source tree
+my $root;
+
+# List of Makefile's opened
+my %makefiles = ();
+
+# For each module that is made up of multiple source files, list of sources
+my %multi = ();
+my $multi_count = 0;
+
+my %config;
+
+my %associate;
+
+sub open_makefile($) {
+ my $file = shift;
+
+ # only open a given Makefile once
+ return if exists $makefiles{$file};
+ $makefiles{$file} = 1;
+
+ $file =~ m|^(.*)/[^/]*$|;
+ my $dir = $1;
+
+ print "opening $root$file (dir=$dir)\n" if ($debug > 2);
+ my $in = new FileHandle;
+ open $in, '<', "$root$file" or die "Unable to open Makefile '$root$file': $!";
+
+ while (<$in>) {
+ # print STDERR "Line: $_";
+ # Skip comment and blank lines
+ next if (/^\s*(#.*)?$/);
+ m/^\s*\-?include/ and die "Can't handle includes! In $file";
+
+ # Handle line continuations
+ if (/\\\n$/) {
+ $_ .= <$in>;
+ redo;
+ }
+ # Eat line continuations in string we will parse
+ s/\s*\\\n\s*/ /g;
+ # Eat comments
+ s/#.*$//;
+
+ if (/^\s*obj-(\S+)\s*([:+]?)=\s*(\S.*?)\s*$/) {
+ print STDERR "Should use '+=' in $file:$.\n$_\n" if ($check && $2 ne '+');
+ my ($var,$targets) = ($1, $3);
+ if ($var =~ /\$\(CONFIG_(\S+)\)$/) {
+ $var = $1;
+ } elsif ($var !~ /^[ym]$/) {
+ print STDERR "Confused by obj assignment '$var' in $file:$.\n$_";
+ }
+ foreach(split(/\s+/, $targets)) {
+ if (m|/$|) { # Ends in /, means it's a directory
+ open_makefile("$dir/$_".'Makefile');
+ } elsif (/^(\S+)\.o$/) {
+ $config{"$dir/$1"} = $var;
+# printf "%s -> %s\n", $var, $1 if $debug > 1;
+ } else {
+ print STDERR "Confused by target '$_' in $file:$.\n";
+ }
+ }
+ next;
+ }
+ if (/(\S+)-objs\s*([:+]?)=\s*(\S.*?)\s*$/) {
+ 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;
+ }
+ if (/^\s*EXTRA_CFLAGS\s*([:+]?)=\s*(\S.*?)\s*$/) {
+ if ($check) {
+ sub allI { /^-I/ or return 0 foreach split(/\s+/, $_[0]);return 1; }
+ my $use = allI($2) ? ':' : '+';
+ print STDERR "Should use '$use=' with EXTRA_CFLAGS in $file:$.\n$_\n"
+ if ($1 ne $use);
+ }
+ next;
+ }
+ print STDERR "Odd line $file:$.\n$_\n" if ($check);
+ }
+ close IN;
+}
+
+#
+#############
+
+sub associate_multi()
+{
+ foreach (keys %multi) {
+ my $name = $_;
+ my @files = @{$multi{$_}};
+ map { s/^(.*)$/\1.c/ } @files;
+
+ foreach (@files) {
+ my $file = $_;
+ my $var = $config{$name};
+ $associate{$file} = $var;
+ printf "$var -> $file\n" if $debug > 1;
+ }
+ delete $config{$name};
+ }
+ foreach my $file (keys %config) {
+ my $var = $config{$file};
+ $file .= ".c";
+ $associate{$file} = $var;
+ printf "$var -> $file\n" if $debug > 1;
+ }
+}
+
+sub build_exported_symbol_list {
+ my $file = $File::Find::name;
+
+ return if (!($file =~ /\.c$/));
+
+ open IN, $file;
+ while (<IN>) {
+ if (m/EXPORT_SYMBOL.*\(\s*([^\s\)]+)/) {
+ $export{$1} = $file;
+ printf "%s -> %s\n", $file , $1 if $debug > 1;
+ }
+ }
+ close IN;
+}
+
+
+sub find_usage_list {
+ my %depend;
+ my $file = $File::Find::name;
+ my $s;
+
+ return if (!($file =~ /\.c$/));
+
+ open IN, $file;
+ printf "Checking symbols at $file\n" if $debug;
+ while (<IN>) {
+ foreach my $symbol (keys %export) {
+ my $symb_file = $export{$symbol};
+
+ # Doesn't search the symbol at the file that defines it
+ next if ($symb_file eq $file);
+
+ if (m/($symbol)/) {
+ my $var = $associate{$symb_file};
+ if (!$depend{$var}) {
+ printf "$symbol found at $file. It depends on %s\n", $associate{$symb_file} if $debug;
+ $depend{$var} = 1;
+ }
+ }
+ }
+ }
+ close IN;
+
+ foreach (%depend) { $s .= "$_ && "; };
+ $s =~ s/\&\&\ $//;
+ if ($s ne "") {
+ print $associate{$file}." depends on $s\n";
+ }
+}
+
+print <<EOL;
+Dependency check tool for Kernel Symbols.
+
+Copyright(c) 2008 by Mauro Carvalho Chehab <mchehab\@infradead.org>
+This code is licenced under the terms of GPLv2.
+
+This script seeks all .c files under linux/ for their exported symbols. For
+each exported symbol, it will check what Kconfig symbol is associated. Then, it
+will cross-check that symbol usage and output a Kconfig depencency table.
+
+WARNING: The result of this tool should be used just as a hint, since, due to
+performance issues, and to simplify the tool, the checks will use a simple grep
+for the symbol string at the .c files, instead of a real symbol cross-check.
+
+Also, the same symbol may appear twice with different dependencies. This is due
+to the way it checks for symbols. The final dependency is the union (AND) of
+all showed ones for that symbol.
+
+Further patches improving this tool are welcome.
+
+EOL
+
+print "Checking makefile rules..." if $debug;
+open_makefile("$SRC/drivers/media/Makefile");
+print " ok\n" if $debug;
+
+print "Associating symbols with c files..." if $debug;
+associate_multi();
+print " ok\n" if $debug;
+
+print "finding exported symbols at $SRC..." if $debug;
+find({wanted => \&build_exported_symbol_list, no_chdir => 1}, $SRC);
+print " ok\n" if $debug;
+
+print "finding usage of symbols at $SRC\n" if $debug;
+find({wanted => \&find_usage_list, no_chdir => 1}, $SRC);
+print "finished\n" if $debug;
+
diff --git a/v4l/scripts/hghead.pl b/v4l/scripts/hghead.pl
index 1eb7355c4..2450ad136 100755
--- a/v4l/scripts/hghead.pl
+++ b/v4l/scripts/hghead.pl
@@ -91,7 +91,8 @@ while ($line = <IN>) {
}
if ($tag =~ m/^subject:/) {
- $subject="$arg\n";
+ $subject = "$arg\n";
+ $sub_ok = 1;
next;
}
@@ -125,21 +126,18 @@ while ($line = <IN>) {
next;
}
- if ($tag =~ m/^(acked-by|thanks-to|reviewed-by|cc):/) {
+ if ($tag =~ m/^(acked-by|thanks-to|reviewed-by|noticed-by|cc):/) {
$signed="$signed$line";
next;
}
- if ($line =~ m/^[a-zA-Z\-]*:/) {
- if ($line =~ m/Changeset:\s*(.*)\n/) {
- $num=$1;
- }
- print "# $line";
- next;
+ if ($tag =~ m/changeset:\s*(.*)\n/) {
+ $num=$1;
}
if ($line =~ m|^(V4L\/DVB\s*\(.+\)\s*:.*\n)|) {
$subject=$1;
+ $sub_ok = 1;
$line="\n";
}
@@ -151,17 +149,11 @@ while ($line = <IN>) {
next;
}
$sub_ok=1;
- substr( $subject, 0, 1 ) = uc (substr ($subject, 0, 1));
if ($subject =~ m|V4L\/DVB\s*(.+)|) {
$subject=$1;
}
- if ($hgimport) {
- $subject=$line;
- next;
- }
- if ($line =~ m/^\n/) {
- next;
- }
+ $subject=$line;
+ next;
}
if ($noblank) {
@@ -182,7 +174,8 @@ if ($from eq "") {
die;
}
-if (!$maint_ok) {
+if (!$maint_ok && $maintainer_name && $maintainer_email) {
+ print "#No maintainer's signature. Adding it.\n";
$signed=$signed."Signed-off-by: $maintainer_name <$maintainer_email>\n";
}
@@ -191,11 +184,20 @@ if (!$signed =~ m/$from/) {
die;
}
-$body="$from\n$body";
+$from=~s/^[\n\s]+//;
+$from=~s/[\n\s]+$//;
+
+$subject=~s/^[\n\s]+//;
+$subject=~s/[\n\s]+$//;
+
+$body=~s/^[\n\s]+//;
$body=~s/[\n\s]+$//;
+
+$body="$body\n\n$signed";
+
$body=~s/^[\n\s]+//;
+$body=~s/[\n\s]+$//;
# First from is used by hg to recognize commiter name
print "#Committer: $maintainer_name <$maintainer_email>\n";
-print "$subject\n$body\n\n$signed";
-
+print "$subject\n\n$from\n\n$body\n";
diff --git a/v4l/scripts/release.sh b/v4l/scripts/release.sh
index 557172875..4e9c810bc 100755
--- a/v4l/scripts/release.sh
+++ b/v4l/scripts/release.sh
@@ -9,7 +9,7 @@ ver_cx="0.0.4"
# common files
files_v4l="v4l*.[ch] video-buf.[ch] videodev*.h"
files_tuner="tuner.[ch] tda9887.[ch]"
-files_i2c="id.h audiochip.h i2c-compat.h"
+files_i2c="id.h audiochip.h"
files_common="$files_v4l $files_tuner $files_i2c doc"
# other files
diff --git a/v4l/scripts/strip-trailing-whitespaces.sh b/v4l/scripts/strip-trailing-whitespaces.sh
index 9bd963025..cb341ce76 100755
--- a/v4l/scripts/strip-trailing-whitespaces.sh
+++ b/v4l/scripts/strip-trailing-whitespaces.sh
@@ -20,6 +20,12 @@ else
fi
for file in `eval $files`; do
+ case "$file" in
+ *.patch)
+ continue
+ ;;
+ esac
+
perl -ne '
s/[ \t]+$//;
s<^ {8}> <\t>;