diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-01-09 19:58:05 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-01-09 19:58:05 +0000 |
commit | 65bf3316cf384588453604be6b4f0ed3751a8b0f (patch) | |
tree | 996a5f57d4a68c53473382e45cb22f574cb3e4db /libjava/classpath/lib/mkdep.pl.in | |
parent | 8fc56618a84446beccd45b80381cdfe0e94050df (diff) | |
download | ppe42-gcc-65bf3316cf384588453604be6b4f0ed3751a8b0f.tar.gz ppe42-gcc-65bf3316cf384588453604be6b4f0ed3751a8b0f.zip |
Merged gcj-eclipse branch to trunk.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120621 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/classpath/lib/mkdep.pl.in')
-rwxr-xr-x | libjava/classpath/lib/mkdep.pl.in | 336 |
1 files changed, 336 insertions, 0 deletions
diff --git a/libjava/classpath/lib/mkdep.pl.in b/libjava/classpath/lib/mkdep.pl.in new file mode 100755 index 00000000000..b30fd7ae974 --- /dev/null +++ b/libjava/classpath/lib/mkdep.pl.in @@ -0,0 +1,336 @@ +#!@PERL@ +# +# Create a dependency file for use with make that will +# a) not have duplicate entries +# b) not include the source of a file as a dependency to separate file, +# just the class of the file +# c) use jikes .u files +# d) includes classes which need native compilation via simple parsing +# to find native methods requiring use of javah + +use strict; + +my ( $dir, $dep ) = ""; +my @dirs = ( 'java', 'javax', 'gnu' ); +my ( $depout ) = "makefile.dep"; +my ( $classout ) = "classes.dep"; +my ( $headerout ) = "headers.dep"; +my ( $javaout ) = "java.dep"; +my @deps = (); +my @natives = (); +use vars qw ( $classout $headerout @dirs @deps @natives $dir $dep $depout ); + +# main +{ + if ($#ARGV == 0) + { + if ($ARGV[0] =~ /^-h/) + { + findNativeFiles(); + writeNativeFile(); + } + elsif ($ARGV[0] =~ /^-d/) + { + foreach $dir (@dirs) + { + # find all .u files recursively and parse'm + findDepFiles($dir); + } + writeDepFile(); + } + elsif ($ARGV[0] =~ /^-c/) + { + findClassFiles(); + writeClassFile(); + } + elsif ($ARGV[0] =~ /^-j/) + { + findJavaFiles(); + writeJavaFile(); + } + } + else + { + print "Usage:\n"; + print "mkdep.pl -h \tfor header files\n"; + print "mkdep.pl -c \tfor a list of classes\n"; + print "mkdep.pl -j \tfor a list of java files\n"; + print "mkdep.pl -d \tfor dependency generation from jikes .u files\n"; + } +} + +sub writeNativeFile +{ + my ($i, $j, $k, $l) = ""; + my $top_srcdir = "../"; + if (defined $ENV{'top_srcdir'}) { + $top_srcdir = $ENV{'top_srcdir'}; + } + my $top_srcdir_regex = $top_srcdir; + if ($top_srcdir_regex !~ /.*\/$/) { + $top_srcdir_regex .= '/'; + } + $top_srcdir_regex =~ s/\./\\\./g; # replace . with \. + $top_srcdir_regex =~ s/\//\\\//g; # replace / with \/ +# print "regex is $top_srcdir_regex\n"; + open(MAKEDEP, ">$headerout") || die "Could not open file ", $headerout; + + # the HEADERS = ... stuff + if ($#natives > -1) + { + print MAKEDEP "CP_HEADERS = \\", "\n"; + foreach $i (0 .. $#natives-1) + { + $j = $natives[$i]; + $j =~ s/^$top_srcdir_regex//; # remove ../ or similar + $j =~ s/^(\.\.\/)+//g; # remove all preceding ../ + $j =~ s/^vm\/reference\///; # remove vm/reference/ + $j =~ s/\//_/g; # replace / with _ + $j =~ s/\.java$/\.h/; # replace .java with .h + print MAKEDEP " \$(top_builddir)/include/", $j, " \\", "\n"; + } + $j = $natives[$#natives]; + $j =~ s/^$top_srcdir_regex//; # remove ../ + $j =~ s/^(\.\.\/)+//g; # remove all preceding ../ + $j =~ s/^vm\/reference\///; # remove vm/reference/ + $j =~ s/\//_/g; # replace / with _ + $j =~ s/\.java/\.h/; # replace .java with .h + print MAKEDEP " \$(top_builddir)/include/", $j, "\n\n"; + + # print rules to make .h files + # y/x.h : z/x.class + # y/x.h : ../z/x.java + # javah -jni z.x + # mv y_x.h $(top_srcdir)/include + + # j = y/x.h + # k = z/x.class + # k = ../z/x.java + # l = z.x + foreach $i (0 .. $#natives-1) + { + $j = $natives[$i]; + $j =~ s/^$top_srcdir_regex//; # remove ../ + $j =~ s/^(\.\.\/)+//g; # remove all preceding ../ + $j =~ s/^vm\/reference\///; # remove vm/reference/ +# $k = $l = $j; + $l = $j; + $j =~ s/\//_/g; # replace / with _ + $j =~ s/\.java$/\.h/; # replace .java with .h + + $k = $natives[$i]; # the original .java file +# $k =~ s/\.java$/\.class/; # replace .java with .class + + $l =~ s/\.java$//; # remove .class + $l =~ s/\//\./g; # replace / with . + + print MAKEDEP "\$(top_builddir)/include/", $j, " : ", $k, "\n"; + print MAKEDEP "\t\$(JAVAH) ", $l, "\n"; + print MAKEDEP "\tmv ", $j, " \$(top_builddir)/include\n\n"; + } + $j = $natives[$#natives]; + $j =~ s/^$top_srcdir_regex//; # remove ../ + $j =~ s/^(\.\.\/)+//g; # remove all preceding ../ + $j =~ s/^vm\/reference\///; # remove vm/reference/ +# $k = $l = $j; + $l = $j; + $j =~ s/\//_/g; # replace / with _ + $j =~ s/\.java/\.h/; # replace .java with .h + + $k = $natives[$#natives]; # the original .java file +# $k =~ s/\.java$/\.class/; # replace .java with .class + + $l =~ s/\.java$//; # remove .class + $l =~ s/\//\./g; # replace / with . + + print MAKEDEP "\$(top_builddir)/include/", $j, " : ", $k, "\n"; + print MAKEDEP "\t\$(JAVAH) ", $l, "\n"; + print MAKEDEP "\tmv ", $j, " \$(top_builddir)/include\n\n"; + } + close(MAKEDEP); +} + +sub writeJavaFile +{ + my ($i, $j, $class, $depend, $source, $depend_source) = ""; + + open(MAKEDEP, ">$javaout") || die "Could not open file ", $classout; + + # the JAVA_SRCS = ... stuff + if ($#natives > -1) + { + print MAKEDEP "JAVA_SRCS = \\", "\n"; + foreach $i (0 .. $#natives-1) + { + $j = $natives[$i]; + print MAKEDEP " ", $j, " \\", "\n"; + } + $j = $natives[$#natives]; + print MAKEDEP " ", $j, "\n\n"; + } + close(MAKEDEP); +} + +sub writeClassFile +{ + my ($i, $j, $class, $depend, $source, $depend_source) = ""; + + open(MAKEDEP, ">$classout") || die "Could not open file ", $classout; + + # the CLASSES = ... stuff + if ($#natives > -1) + { + print MAKEDEP "CLASSES = \\", "\n"; + foreach $i (0 .. $#natives-1) + { + $j = $natives[$i]; + $j =~ s/\.java$/\.class/; + print MAKEDEP " ", $j, " \\", "\n"; + } + $j = $natives[$#natives]; + $j =~ s/\.java$/\.class/; + print MAKEDEP " ", $j, "\n\n"; + } + close(MAKEDEP); +} + +sub writeDepFile +{ + my ($i, $j, $class, $depend, $source, $depend_source) = ""; + + open(MAKEDEP, ">$depout") || die "Could not open file ", $depout; + + # the class dependencies + foreach $i (@deps) + { + open(FILE, "<$i") || die "Could not open file ", $i, "\n"; + while(<FILE>) + { + chop; + ($class, $depend) = /(.+) : (.+)$/; + $source = $class; + $source =~ s/\.class$/\.java/; + if (($source eq $depend) || ($depend !~ /\.java$/)) + { + if ($depend =~ /^\.\.\/.+\.class$/) + { + $depend =~ s/^\.\.\///; + } + if (($depend =~ /\.java$/) && ($depend !~ /^\.\.\//)) + { + $depend = "../" . $depend; + } + print MAKEDEP $class, " : ", $depend, "\n"; + } + } + print MAKEDEP "\n"; + close(FILE); + } + close(MAKEDEP); +} + +sub findJavaFiles +{ + my ($file) = ""; + open(CLASSES, "<classes") || die "Could not open file classes\n"; + while(<CLASSES>) + { + chop; + $file = $_; + push @natives, $file; + } + close(CLASSES); +} + +sub findClassFiles +{ + my ($file) = ""; + open(CLASSES, "<classes") || die "Could not open file classes\n"; + while(<CLASSES>) + { + chop; + $file = $_; + $file =~ s/^\.\.\///; + push @natives, $file; + } + close(CLASSES); +} + +sub findNativeFiles +{ + my ($file) = ""; + open(CLASSES, "<classes") || die "Could not open file classes\n"; + while(<CLASSES>) + { + chop; + $file = $_; + if (hasNativeMethod($file)) + { + push @natives, $file; + } + + } + close(CLASSES); +} + +sub hasNativeMethod +{ + my ($file) = @_; + my ($line, $one, $two) = ""; + open(FILE, "<$file") || die "Could not open file ", $file, "\n"; + while(<FILE>) + { + chop; + $one = $two; + $two = $_; + + $line = $one . " " . $two; + if ( ($line =~ /^\s*public\s.*native\s+\S+\s+\S+\s*\(/) || + ($line =~ /^\s*public\s.*native\s+\S+\s+\S+\s+\S+\s*\(/) || + ($line =~ /^\s*protected\s.*native\s+\S+\s+\S+\s*\(/) || + ($line =~ /^\s*protected\s.*native\s+\S+\s+\S+\s+\S+\s*\(/) || + ($line =~ /^\s*private\s.*native\s+\S+\s+\S+\s*\(/) || + ($line =~ /^\s*private\s.*native\s+\S+\s+\S+\s+\S+\s*\(/) || + ($line =~ /^\s*abstract\s.*native\s+\S+\s+\S+\s*\(/) || + ($line =~ /^\s*final\s.*native\s+\S+\s+\S+\s*\(/) || + ($line =~ /^\s*synchronized\s.*native\s+\S+\s+\S+\s*\(/) || + ($line =~ /^\s*native\s.*/) ) + { + close(FILE); + return 1; + } + } + close(FILE); + return 0; +} + +sub findDepFiles +{ + + my ($dir) = @_; + my (@dirs) = (); + my (@local_deps) = (); + my (@entries) = (); + my ($i, $local_dep) = ""; + if (opendir(DIR, $dir)) + { + @entries = grep(-d "$dir/$_" && !/^\.\.?$/, readdir(DIR)); + foreach $i (@entries) + { + push @dirs, "$dir/$i"; + } + rewinddir(DIR); + @entries= grep(/\.u$/, readdir(DIR)); + closedir(DIR); + foreach $i (@entries) + { + push @local_deps, "$dir/$i"; + } + push @deps, @local_deps; + foreach $i (@dirs) + { + findDepFiles($i); + } + } +} + |