⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mkdep.pl.in

📁 gcc的组建
💻 IN
字号:
#!@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 javahuse 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);      }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -