summaryrefslogtreecommitdiff
path: root/v4l/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'v4l/scripts')
-rwxr-xr-xv4l/scripts/make_makefile.pl257
1 files changed, 115 insertions, 142 deletions
diff --git a/v4l/scripts/make_makefile.pl b/v4l/scripts/make_makefile.pl
index e0a099e9b..f49edb0f8 100755
--- a/v4l/scripts/make_makefile.pl
+++ b/v4l/scripts/make_makefile.pl
@@ -1,186 +1,159 @@
#!/usr/bin/perl
use FileHandle;
-my $kernel=shift;
-my $instdir = ();
-
+my %instdir = ();
+
+# Take a Makefile line of the form:
+# obj-XXXXX = some_directory/ some_module.o
+#
+# All directories are processed by including the referenced Makefile and
+# removing the directory. The modules are added to the list of modules
+# to install. Prints the edited line to OUT.
+# Arguments: directory Makefile is in, the objects, original line(s) from
+# Makefile (with newlines intact).
sub check_line($$$)
{
- my $dir=shift;
- my $obj=shift;
- my $arg=shift;
- my $arg2="";
-
- my $idir = $dir;
-
- $idir =~ s|^../linux/drivers/media/||;
-
- $arg=$arg." ";
-
- while ($arg ne "") {
- if ($arg =~ m|^([^ /]+)/ |) {
- my $newdir=$1;
-# print "include $dir/$newdir/Makefile\n";
- open_makefile("$dir/$newdir/Makefile");
- $arg =~ s/^[^ ]+ //;
- } else {
- $arg =~ s/^([^ ]+ )//;
- my $cur=$1;
- $arg2 = $arg2.$cur;
-
- $cur =~ s/\s+$//;
- $cur =~ s/\\$//;
- $cur =~ s/\s+$//;
- $cur =~ s/\.o$/.ko/;
-
- if ( ($cur ne "") && (! ($instdir { $idir } =~ m/($cur) /))) {
- $instdir { $idir } = $instdir { $idir }.$cur." ";
- }
+ my $dir = shift;
+ my $objs = shift;
+ my $orig = shift;
+ my $count = 0;
+
+ foreach(split /\s+/, $objs) {
+ if (m|/$|) { # Ends in /, means it's a directory
+ # Delete this directory from original Makefile line
+ $orig =~ s/$_[ \t]*//;
+ $_ .= 'Makefile';
+ # print STDERR "open new makefile $dir/$_\n";
+ open_makefile("$dir/$_");
+ next;
}
+
+ # It's a file, add it to list of files to install
+ s/\.o$/.ko/;
+ my $idir = $dir;
+ $idir =~ s|^../linux/drivers/media/||;
+ $instdir{$idir}{$_} = 1;
+ $count++;
}
- $arg2 =~ s/\s+$//;
- if ($arg2 ne "") {
-# print "arg=$arg2\n";
- print OUT "$obj$arg2\n";
- }
+ # Removing any tailling whitespace, just to be neat
+ $orig =~ s/[ \t]+$//mg;
+
+ # Print out original line, less directories, if there is anything
+ # still there
+ print OUT $orig if($count);
}
+# Uses the string being assigned from a line of the form:
+# EXTRA_CFLAGS += -Idrivers/media/something -Dwhatever
+#
+# All the -Idrivers/media/something options get deleted. All the source
+# files are linked into the v4l directory and built from there, so and -I
+# option for them is unnecessary. The line is printed to OUT if there is
+# anything left after that.
sub remove_includes($$)
{
- my $obj=shift;
- my $arg=shift;
- my $arg2="";
-
- $arg=$arg." ";
-
- while ($arg ne "") {
- if (!$arg =~ m|^(-I\s*[^ ]+) |) {
- $arg2 = $arg2.$1;
- $arg =~ s|^[^ ] ||;
- } else {
- $arg =~ s|^(-I\s*[^ ]+) ||;
+ my $flags = shift;
+ my $orig = shift;
+ my $count = 0;
+
+ foreach(split /\s+/, $flags) {
+ if (m|^-Idrivers/media|) {
+ # Remove any -I flags from original Makefile line
+ $orig =~ s/$_[ \t]*//;
+ next;
}
+ $count++; # Something wasn't deleted
}
- if ($arg2 ne "") {
- print OUT "$obj$arg2\n";
- }
+ $orig =~ s/[ \t]+$//mg;
+
+ # Print out original line if there is anything we didn't delete
+ print OUT $orig if($count);
}
sub open_makefile($) {
- my $file= shift;
+ my $file = shift;
my $in = new FileHandle;
- my $dir= "";
- my $count=0;
+ my $orig;
- $file=~ m|^(.*)/[^/]*$|;
- $dir=$1;
+ $file =~ m|^(.*)/[^/]*$|;
+ my $dir = $1;
-#print "opening $file (dir=$dir)\n";
- open $in,"$file";
+ # print STDERR "opening $file (dir=$dir)\n";
+ open $in, $file;
while (<$in>) {
- if (m|\s*#|) {
+ # print STDERR "Line: $_";
+ # Skip comment lines
+ if (/^\s*#/) {
print OUT $_;
next;
}
- if (m|^\s*include|) {
- next;
+ m/^\s*-?include/ and die "Can't handle includes! In $file";
+
+ # Handle line continuations
+ if (/\\\n$/) {
+ $_ .= <$in>;
+ redo;
}
- if (count==1 || m|(^\s*EXTRA_CFLAGS.*=\s*)(.*/.*)\n|) {
- remove_includes($1,$2);
- if (m|[\\]\n|) {
- $count=1;
- } else {
- $count=0;
- }
+
+ # $orig is what we will print, $_ is what we will parse
+ $orig = $_;
+ # Eat line continuations in string we will parse
+ s/\s*\\\n\s*/ /g;
+ # Eat comments
+ s/#.*$//;
+
+ if (/^\s*obj-.*:?=\s*(\S.*?)\s*$/) {
+ # print STDERR "obj matched '$1'\n";
+ check_line($dir, $1, $orig); # will print line for us
next;
}
-# if (m|(^\s*obj.*=\s*)(.*/.*)\n|) {
- if (count==2 || m|(^\s*obj.*=\s*)(.*)\n|) {
- check_line($dir,$1,$2);
- if (m|\\\n|) {
- $count=1;
- } else {
- $count=0;
- }
+ if (/^\s*EXTRA_CFLAGS\s+\+?=\s*(\S.*?)\s*$/) {
+ # print STDERR "cflags matched '$1'\n";
+ remove_includes($1, $orig); # will print line for us
next;
}
- print OUT $_;
+ print OUT $orig;
}
close $in;
}
-open OUT,">Makefile.media.new";
-open_makefile ("../linux/drivers/media/Makefile");
+open OUT, '>Makefile.media' or die 'Unable to write Makefile.media';
+open_makefile('../linux/drivers/media/Makefile');
# Creating Install rule
-printf OUT "media-install::\n";
-printf OUT "\t\@echo \"Stripping debug info from files:\"\n";
-printf OUT "\t\@strip --strip-debug \$(inst-m)\n\n";
-
-while ( my ($key, $value) = each(%instdir) ) {
- printf OUT "\t\@echo -e \"\\nInstalling \$(KDIR26)/$key files:\"\n";
- printf OUT "\t\@install -d \$(KDIR26)/$key\n";
-
- printf OUT "\t\@files='$value'; ";
- printf OUT "for i in \$\$files;do if [ -e \$\$i ]; then echo -n \"\$\$i \";";
- printf OUT " install -m 644 -c \$\$i \$(KDIR26)/$key; fi; done; echo;\n\n";
+print OUT "media-install::\n";
+print OUT "\t\@echo \"Stripping debug info from files:\"\n";
+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\@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";
}
-printf OUT "\t/sbin/depmod -a \${KERNELRELEASE}\n\n";
+print OUT "\t/sbin/depmod -a \${KERNELRELEASE}\n\n";
# Creating Remove rule
-printf OUT "media-rminstall::\n";
-printf OUT "\t\@echo -e \"\\nRemoving old \$(DEST) files\\n\"\n";
+print OUT "media-rminstall::\n";
+print OUT "\t\@echo -e \"\\nRemoving old \$(DEST) files\\n\"\n";
-while ( my ($key, $value) = each(%instdir) ) {
- printf OUT "\t\@echo -e \"\\nRemoving old \$(KDIR26)/$key files:\"\n";
- printf OUT "\t\@files='$value'; ";
+while ( my ($dir, $files) = each(%instdir) ) {
+ print OUT "\t\@echo -e \"\\nRemoving old \$(KDIR26)/$dir files:\"\n";
+ print OUT "\t\@files='", join(' ', keys %$files), "'; ";
- printf OUT "for i in \$\$files;do if [ -e \$(KDIR26)/$key/\$\$i ]; then ";
- printf OUT "echo -n \"\$\$i \";";
- printf OUT " rm \$(KDIR26)/$key/\$\$i; fi; done; ";
+ print OUT "for i in \$\$files;do if [ -e \$(KDIR26)/$dir/\$\$i ]; then ";
+ print OUT "echo -n \"\$\$i \";";
+ print OUT " rm \$(KDIR26)/$dir/\$\$i; fi; done; ";
- printf OUT "for i in \$\$files;do if [ -e \$(KDIR26)/$key/\$\$i.gz ]; then ";
- printf OUT "echo -n \"\$\$i.gz \";";
- printf OUT " rm \$(KDIR26)/$key/\$\$i.gz; fi; done; echo;\n\n";
+ print OUT "for i in \$\$files;do if [ -e \$(KDIR26)/$dir/\$\$i.gz ]; then ";
+ print OUT "echo -n \"\$\$i.gz \";";
+ print OUT " rm \$(KDIR26)/$dir/\$\$i.gz; fi; done; echo;\n\n";
}
+# Print dependencies of Makefile.media
+print OUT "Makefile.media: ../linux/drivers/media/Makefile \\\n";
+print OUT join(" \\\n", map("\t../linux/drivers/media/$_/Makefile", keys %instdir));
+print OUT "\n";
close OUT;
-
-while ( my ($key, $value) = each(%config) ) {
- delete $depend{$key};
-}
-
-open OUT,">Kconfig.kern";
-while ( my ($key, $value) = each(%depend) ) {
- print OUT "# $key with $value refs\nconfig $key\n\ttristate\n\tdefault m\n\n";
-}
-close OUT;
-
-if (open IN,"Makefile.media") {
- close IN;
- my $changed=0;
- if (open IN,"diff Makefile.media Makefile.media.new|") {
- while (<IN>) {
- if ($_ ne "") {
- $changed=1;
- }
- }
- close IN;
- if ($changed) {
- printf("One or more linux Makefiles had changed. Makefile.media rewrited.\n");
- system ("mv Makefile.media.new Makefile.media");
- } else {
- system ("rm Makefile.media.new");
- }
- }
-} else {
- printf("Creating Makefile.media.\n");
- system "mv Makefile.media.new Makefile.media";
-}
-
-if (open IN,".myconfig") {
- close IN;
-} else {
- system "./scripts/make_kconfig.pl $kernel 1";
-}