mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-29 03:44:37 +00:00
1a4b241ed2
unix now has an autoconf based make system. currently the new make system only makes parser related files, back end stuff to be added soon. mac and windows makesystems will be checked in next. parser.cpp has been factored into token.*, lexer.*, and parser.* utilities.cpp has been factored into formatter.*, exception.*, mem.*, strings.*,ds.h, stlcfg.h, and algo.h
139 lines
3.4 KiB
Perl
139 lines
3.4 KiB
Perl
#!/bin/perl
|
|
use strict;
|
|
|
|
my $dir = shift || "./";
|
|
my @files = get_cpp_files ($dir);
|
|
my $file;
|
|
my %results;
|
|
my $verbose = 0;
|
|
|
|
foreach $file (@files) {
|
|
process_file ($file);
|
|
}
|
|
|
|
foreach $file (@files) {
|
|
my $c = $results{$file};
|
|
my @keys = sort (keys (%{$c}));
|
|
my $key;
|
|
|
|
print "$file:\n";
|
|
|
|
if ($verbose) {
|
|
foreach $key (@keys) {
|
|
if ($key !~ /^HASH/) {
|
|
print "\t$key: $c->{$key}\n";
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($c->{"hard_tabs"}) {
|
|
print "\tHard Tabs: ", $c->{"hard_tabs"}, "\n";
|
|
}
|
|
|
|
if ($c->{"sys_includes"}) {
|
|
my $incs = join (", ", @{$c->{"sys_includes"}});
|
|
print "\tSystem Includes: $incs\n";
|
|
}
|
|
|
|
if ($c->{"local_includes"}) {
|
|
my $incs = join (", ", @{$c->{"local_includes"}});
|
|
print "\tLocal Includes: $incs\n";
|
|
}
|
|
|
|
print "\n";
|
|
}
|
|
|
|
sub process_file {
|
|
my ($filename) = @_;
|
|
my %c = {};
|
|
open (FILE, $filename);
|
|
|
|
while (my $line = <FILE>) {
|
|
if ($line =~ /\t/) {
|
|
if ($c{"hard_tabs"}) {
|
|
++$c{"hard_tabs"};
|
|
} else {
|
|
$c{"hard_tabs"} = 1;
|
|
}
|
|
}
|
|
if ($line =~ /(\/\*|\/\/)\s*-\*-\s*Mode: (\S+)/i) {
|
|
# it's an emacs mode line
|
|
$c{"mode"} = $2;
|
|
if ($line =~ /tab-width: (\d+)/i) {
|
|
$c{"tab_width"} = $1;
|
|
}
|
|
if ($line =~ /indent-tabs-mode: (\S+)/i) {
|
|
$c{"tab_mode"} = $1;
|
|
}
|
|
if ($line =~ /c-basic-offset: (\d+)/i) {
|
|
$c{"basic_offset"} = $1;
|
|
}
|
|
} elsif ($line =~
|
|
/(\*|\/\/)\s*The contents of this file are subject to the (\S+)/i) {
|
|
# first line of license
|
|
$c{"has_license"} = 1;
|
|
$c{"license_comment"} = ($1 eq "*") ? "/**/" : "//";
|
|
$c{"license_type"} = (lc($2) eq "netscape") ? "NPL" : "MPL";
|
|
} elsif ($line =~ /The Original Code is (.*)/i) {
|
|
# original code line
|
|
$c{"o_code"} = $1;
|
|
} elsif ($line =~ /Alternatively, the contents of this file may be used under/i) {
|
|
$c{"license_dual"} = 1;
|
|
|
|
} elsif ($line =~ /^\#include ([\"<])(\S+)[>\"]/i) {
|
|
# include directive
|
|
if ($1 eq "\"") {
|
|
push (@{$c{"local_includes"}}, $2);
|
|
} else {
|
|
push (@{$c{"sys_includes"}}, $2);
|
|
}
|
|
}
|
|
}
|
|
|
|
$results{$filename} = \%c;
|
|
}
|
|
|
|
#
|
|
# given a directory, return an array of all subdirectories
|
|
#
|
|
sub get_subdirs {
|
|
my ($dir) = @_;
|
|
my @subdirs;
|
|
|
|
if (!($dir =~ /\/$/)) {
|
|
$dir = $dir . "/";
|
|
}
|
|
|
|
opendir (DIR, $dir) || die ("couldn't open directory $dir: $!");
|
|
my @contents = readdir(DIR);
|
|
closedir(DIR);
|
|
|
|
foreach (@contents) {
|
|
if ((-d ($dir . $_)) && ($_ ne 'CVS') && ($_ ne '.') && ($_ ne '..')) {
|
|
@subdirs[$#subdirs + 1] = $_;
|
|
}
|
|
}
|
|
|
|
return @subdirs;
|
|
}
|
|
|
|
#
|
|
# given a directory, return an array of all the .h and .cpp files.
|
|
#
|
|
sub get_cpp_files {
|
|
my ($subdir) = @_;
|
|
my (@file_array, @files);
|
|
|
|
opendir (SUBDIR, $subdir) || die ("couldn't open directory $subdir: $!");
|
|
@files = readdir(SUBDIR);
|
|
closedir(SUBDIR);
|
|
|
|
foreach (@files) {
|
|
if ($_ =~ /\.h$|\.cpp$/) {
|
|
push (@file_array, $_);
|
|
}
|
|
}
|
|
|
|
return sort(@file_array);
|
|
}
|