146 строки
3.4 KiB
Perl
146 строки
3.4 KiB
Perl
|
#!/usr/bin/env perl
|
||
|
#
|
||
|
# Primitive script to give approximate code counts in the Open MPI tree
|
||
|
#
|
||
|
|
||
|
use strict;
|
||
|
use File::Find;
|
||
|
|
||
|
use Cwd;
|
||
|
|
||
|
# Setup some directories
|
||
|
|
||
|
my $verbose = 0;
|
||
|
my @skip_dirs;
|
||
|
|
||
|
my @code_dirs = ( "src", "include", "test" );
|
||
|
my @doc_dirs = ( "doxygen" );
|
||
|
|
||
|
my @meta_dirs = ( ".svn", ".deps", ".libs", "libltdl" );
|
||
|
my @skip_files = ( "Makefile.in", "Makefile", ".ompi_built" , "config.cache",
|
||
|
"libtool", "depcomp", "aclocal.m4", "install-sh",
|
||
|
"missing", "mkinstalldirs", "compile", "config.sub",
|
||
|
"config.guess", "config.log", "config.status",
|
||
|
"TAGS", ".", "configure", "ltmain.sh",
|
||
|
"ChangeLog");
|
||
|
my @skip_patterns = ( ".o\$", ".lo\$", ".out\$", "autom4te", ".in\$",
|
||
|
".bak\$", "~\$", ".gz\$", "^stamp-", "^.#", "^#.+#\$",
|
||
|
"dynamic-mca" );
|
||
|
|
||
|
|
||
|
# Primitive check to find the top OMPI dir
|
||
|
|
||
|
my @tlds = @code_dirs;
|
||
|
for (my $i = 0; $i <= $#doc_dirs; ++$i) {
|
||
|
$tlds[$#tlds + 1] = $doc_dirs[$i];
|
||
|
}
|
||
|
my $good = 0;
|
||
|
do {
|
||
|
$good = 1;
|
||
|
for (my $i = 0; $i <= $#tlds; ++$i) {
|
||
|
if (! -d $tlds[$i]) {
|
||
|
$good = 0;
|
||
|
last;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!$good) {
|
||
|
chdir("..");
|
||
|
my $dir = getcwd();
|
||
|
if ($dir eq "/") {
|
||
|
print("Unable to find Open MPI top dir; aborting\n");
|
||
|
exit(1);
|
||
|
}
|
||
|
}
|
||
|
} while ($good != 1);
|
||
|
|
||
|
# Found top dir
|
||
|
|
||
|
print("Found top Open MPI directory: " . getcwd() . "\n");
|
||
|
|
||
|
# Now count up code
|
||
|
|
||
|
my %files_found;
|
||
|
my %dirs_found;
|
||
|
|
||
|
sub wanted {
|
||
|
# Setup
|
||
|
|
||
|
my $file = $_;
|
||
|
my @dirnames = split('/', $File::Find::dir);
|
||
|
my $dir = $dirnames[$#dirnames];
|
||
|
|
||
|
# Is the file a dir?
|
||
|
|
||
|
my $is_dir = (-d $file);
|
||
|
|
||
|
# Do we want this dir?
|
||
|
|
||
|
for (my $i = 0; $i <= $#skip_dirs; ++$i) {
|
||
|
if ($skip_dirs[$i] eq $dir ||
|
||
|
($is_dir && $skip_dirs[$i] eq $file)) {
|
||
|
print("Skipping dir: $File::Find::dir / $file\n")
|
||
|
if ($verbose);
|
||
|
$File::Find::prune = 1;
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Do we want this file?
|
||
|
|
||
|
for (my $i = 0; $i <= $#skip_files; ++$i) {
|
||
|
if ($skip_files[$i] eq $file) {
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
for (my $i = 0; $i <= $#skip_patterns; ++$i) {
|
||
|
$file;
|
||
|
if (/$skip_patterns[$i]/) {
|
||
|
print("Skipping file pattern: $File::Find::dir/$file\n")
|
||
|
if ($verbose);
|
||
|
$File::Find::prune = 1
|
||
|
if ($is_dir);
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
if ($is_dir) {
|
||
|
print ("Found dir: $File::Find::dir/$file\n")
|
||
|
if ($verbose);
|
||
|
} else {
|
||
|
$files_found{$File::Find::name} = 1;
|
||
|
print ("Found file: $File::Find::name\n")
|
||
|
if ($verbose);
|
||
|
}
|
||
|
$dirs_found{$File::Find::dir} = 1;
|
||
|
1;
|
||
|
}
|
||
|
|
||
|
# Look for code
|
||
|
|
||
|
%files_found = ();
|
||
|
%dirs_found = ();
|
||
|
@skip_dirs = @meta_dirs;
|
||
|
for (my $i = 0; $i <= $#doc_dirs; ++$i) {
|
||
|
$skip_dirs[$#skip_dirs + 1] = $doc_dirs[$i];
|
||
|
}
|
||
|
print("Searching for code files...\n");
|
||
|
find(\&wanted, ".");
|
||
|
|
||
|
my @files = keys(%files_found);
|
||
|
my @dirs = keys(%dirs_found);
|
||
|
print ("Found files $#files\n");
|
||
|
print ("Found dirs $#dirs\n");
|
||
|
|
||
|
# Total files
|
||
|
|
||
|
%files_found = ();
|
||
|
%dirs_found = ();
|
||
|
@skip_dirs = @meta_dirs;
|
||
|
print("Searching for all files (including docs)...\n");
|
||
|
find(\&wanted, ".");
|
||
|
|
||
|
my @files = keys(%files_found);
|
||
|
my @dirs = keys(%dirs_found);
|
||
|
print ("Found files $#files\n");
|
||
|
print ("Found dirs $#dirs\n");
|