# Report details about lines of code in each file for each user
# -html
# Generate HTML output instead of text output
+# -topdir
+# Specify where the top llvm source directory is. Otherwise the
+# llvm-config tool is used to find it.
# Directories:
# The directories passed after the options should be relative paths to
# directories of interest from the top of the llvm source tree, e.g. "lib"
my $html = 0;
my $debug = 0;
my $filedetails = "";
+my $srcroot = "";
while ( defined($ARGV[0]) && substr($ARGV[0],0,1) eq '-' )
{
if ($ARGV[0] =~ /-tag=.*/) {
$html = 1;
} elsif ($ARGV[0] eq "-debug") {
$debug = 1;
+ } elsif ($ARGV[0] eq "-topdir") {
+ shift; $srcroot = $ARGV[0]; shift;
} else {
die "Invalid option: $ARGV[0]";
}
shift;
}
-chomp(my $srcroot = `llvm-config --src-root`);
-my $llvmdo = "$srcroot/utils/llvmdo";
+if (length($srcroot) == 0) {
+ chomp($srcroot = `llvm-config --src-root`);
+}
+if (! -d "$srcroot") {
+ die "Invalid source root: $srcroot\n";
+}
+chdir($srcroot);
+my $llvmdo = "$srcroot/utils/llvmdo -topdir '$srcroot'";
my %Stats;
my %FileStats;
my $d = $_[0];
my $files ="";
open FILELIST,
- "$llvmdo -dirs \"$d\" echo |" || die "Can't get list of files with llvmdo";
+ "$llvmdo -dirs \"$d\" -code-only echo |" || die "Can't get list of files with llvmdo";
while ( defined($line = <FILELIST>) ) {
chomp($file = $line);
+ print "File: $file\n" if ($debug);
$files = "$files $file";
}
return $files;
if ($line =~ '^Annotations for.*') {
$curfile = $line;
$curfile =~ s#^Annotations for ([[:print:]]*)#$1#;
+ print "Scanning: $curfile\n" if ($debug);
} elsif ($line =~ /^[0-9.]*[ \t]*\([^)]*\):/) {
$uname = $line;
$uname =~ s#^[0-9.]*[ \t]*\(([a-zA-Z0-9_.-]*) [^)]*\):.*#$1#;
foreach $user (keys %Stats) { $total += $Stats{$user}; }
if ($html) {
+ print "<p>Total Source Lines: $total<br/></p>\n";
print "<table>";
print " <tr><th style=\"text-align:right\">LOC</th>\n";
print " <th style=\"text-align:right\">\%LOC</th>\n";
}
for $Index ( 0 .. $#DIRS) {
+ print "Scanning Dir: $DIRS[$Index]\n" if ($debug);
ScanDir($DIRS[$Index]);
}