summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorbrunsch <brunsch@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-06-04 00:08:46 +0000
committerbrunsch <brunsch@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-06-04 00:08:46 +0000
commit6de865bddf018e283b3309eb096e7d2ea37e689c (patch)
treee692b633545b27226d8a846802562f44b4941431 /bin
parent91f83fc4ecb56294efd19e1f9f0d1ea748f05821 (diff)
downloadATCD-6de865bddf018e283b3309eb096e7d2ea37e689c.tar.gz
ChangeLogTag:Sat Jun 3 17:00:11 2000 Darrell Brunsch <brunsch@uci.edu>
Diffstat (limited to 'bin')
-rwxr-xr-xbin/fuzz.pl184
1 files changed, 160 insertions, 24 deletions
diff --git a/bin/fuzz.pl b/bin/fuzz.pl
index ee737282c36..5ee6932b2f2 100755
--- a/bin/fuzz.pl
+++ b/bin/fuzz.pl
@@ -13,12 +13,10 @@ use Getopt::Std;
#
# Add tests for these:
#
-# - LPTSTR, TCHAR, etc. in any file
# - Using TAO_TRY macros instead of ACE_TRY
# - no relative path to tao_idl in the .dsp files
# - Linking to wrong type of library in dsp's
# - not setting up the release configs correctly in dsp files
-# - files not ending with newline
# - Guards in .h files
# - no global functions
# - other commit_check checks, missing LF at eof, tabs, trailing spaces.
@@ -33,8 +31,14 @@ use Getopt::Std;
@files_cpp = ();
@files_inl = ();
@files_h = ();
+@files_html = ();
@files_dsp = ();
+@files_idl = ();
+@files_pl = ();
+# To keep track of errors and warnings
+$errors = 0;
+$warnings = 0;
##############################################################################
@@ -74,22 +78,50 @@ sub find_files ()
sub store_file ($)
{
my $name = shift;
- if ($name =~ /\.cpp$/i) {
+ if ($name =~ /\.(c|cc|cpp|cxx)$/i) {
push @files_cpp, ($name);
}
elsif ($name =~ /\.(inl|i)$/i) {
push @files_inl, ($name);
}
- elsif ($name =~ /\.h$/i) {
+ elsif ($name =~ /\.(h|hh|hpp|hxx)$/i) {
push @files_h, ($name);
}
- elsif ($name =~ /\.dsp$/i) {
+ elsif ($name =~ /\.(htm|html)$/i) {
+ push @files_html, ($name);
+ }
+ elsif ($name =~ /\.(dsp|vcp)$/i) {
push @files_dsp, ($name);
}
+ elsif ($name =~ /\.(pidl|idl)$/i) {
+ push @files_idl, ($name);
+ }
+ elsif ($name =~ /\.pl$/i) {
+ push @files_pl, ($name);
+ }
+}
+
+##############################################################################
+## Just messages
+
+sub print_error ($)
+{
+ my $msg = shift;
+ print "Error: $msg\n";
+ ++$errors;
+}
+
+
+sub print_warning ($)
+{
+ my $msg = shift;
+ print "Warning: $msg\n";
+ ++$warnings;
}
##############################################################################
+## Tests
# The point of this test is to check for the existence of ACE_INLINE
# or ASYS_INLINE in a .cpp file. This is most commonly caused by
@@ -104,10 +136,10 @@ sub check_for_inline_in_cpp ()
while (<FILE>) {
++$line;
if (/^ACE_INLINE/) {
- print "Error: ACE_INLINE found in $file on line $line\n";
+ print_error ("ACE_INLINE found in $file on line $line");
}
if (/^ASYS_INLINE/) {
- print "Error: ASYS_INLINE found in $file on line $line\n";
+ print_error ("ASYS_INLINE found in $file on line $line");
}
}
close (FILE);
@@ -118,13 +150,14 @@ sub check_for_inline_in_cpp ()
}
}
-# This test checks to make sure files have the $Id$ string in them.
+# This test checks to make sure files have the $Id string in them.
# Commit_check should find these when checking in files, but this can
# be used locally or to check for files
sub check_for_id_string ()
{
- print "Running \$ID check\n";
- foreach $file (@files_cpp, @files_inl, @files_h) {
+ print "Running \$ID\$ string check\n";
+ foreach $file (@files_cpp, @files_inl, @files_h,
+ @files_html, @files_idl, @files_pl) {
my $found = 0;
if (open (FILE, $file)) {
print "Looking at file $file\n" if $opt_d;
@@ -135,7 +168,30 @@ sub check_for_id_string ()
}
close (FILE);
if ($found == 0) {
- print "Error: No \$Id string found in $file\n";
+ print_error ("No \$Id string found in $file");
+ }
+ }
+ else {
+ print STDERR "Error: Could not open $file\n";
+ }
+ }
+}
+
+
+# This test checks for the newline at the end of a file
+sub check_for_newline ()
+{
+ print "Running newline check\n";
+ foreach $file (@files_cpp, @files_inl, @files_h, @files_idl, @files_pl) {
+ if (open (FILE, $file)) {
+ my $line;
+ print "Looking at file $file\n" if $opt_d;
+ while (<FILE>) {
+ $line = $_
+ }
+ close (FILE);
+ if ($line !~ /\n$/) {
+ print_error ("No ending newline found in $file");
}
}
else {
@@ -145,6 +201,7 @@ sub check_for_id_string ()
}
+
# This test checks for the use of "inline" instead of ACE_INLINE
sub check_for_inline ()
{
@@ -152,11 +209,18 @@ sub check_for_inline ()
foreach $file (@files_inl) {
my $line = 0;
if (open (FILE, $file)) {
+ my $disable = 0;
print "Looking at file $file\n" if $opt_d;
while (<FILE>) {
++$line;
- if (/^[\s+]inline/) {
- print "Error: inline found in $file on line $line\n";
+ if (/FUZZ\: disable check_for_inline/) {
+ $disable = 1;
+ }
+ if (/FUZZ\: enable check_for_inline/) {
+ $disable = 0;
+ }
+ if ($disable == 0 and /^\s*inline/) {
+ print_error ("inline found in $file on line $line");
}
}
close (FILE);
@@ -177,11 +241,19 @@ sub check_for_math_include ()
foreach $file (@files_h, @files_cpp, @files_inl) {
my $line = 0;
if (open (FILE, $file)) {
+ my $disable = 0;
print "Looking at file $file\n" if $opt_d;
while (<FILE>) {
++$line;
- if (/^\s*#\s*include\s*[\/\*\*\/]?\s*\<math\.h\>/) {
- print "Error: math.h included in $file on line $line\n";
+ if (/FUZZ\: disable check_for_math_include/) {
+ $disable = 1;
+ }
+ if (/FUZZ\: enable check_for_math_include/) {
+ $disable = 0;
+ }
+ if ($disable == 0
+ and /^\s*#\s*include\s*(\/\*\*\/){0,1}\s*\<math\.h\>/) {
+ print_error ("math.h included in $file on line $line");
}
}
close (FILE);
@@ -202,8 +274,8 @@ sub check_for_line_length ()
print "Looking at file $file\n" if $opt_d;
while (<FILE>) {
++$line;
- if (/.{80,}?/) {
- print "Error: Over 80 chars on line $line in $file\n";
+ if (/.{80,}/) {
+ print_error ("Over 80 chars on line $line in $file");
}
}
close (FILE);
@@ -227,8 +299,8 @@ sub check_for_preprocessor_comments ()
while (<FILE>) {
++$line;
if (/^\#.*\/\//) {
- print "Error: C++ comment in directive on "
- . "line $line in $file\n";
+ print_error ("C++ comment in directive on "
+ ."line $line in $file");
}
}
close (FILE);
@@ -240,13 +312,66 @@ sub check_for_preprocessor_comments ()
}
+# This test checks for the use of the Win32 Unicode string defines
+# or outdated ASYS_* macros
+# We should only be using the ACE_TCHAR, ACE_TEXT macros instead.
+sub check_for_tchar
+{
+ print "Running TCHAR test\n";
+ foreach $file (@files_h, @files_cpp, @files_inl) {
+ my $line = 0;
+ if (open (FILE, $file)) {
+ my $disable = 0;
+ print "Looking at file $file\n" if $opt_d;
+ while (<FILE>) {
+ ++$line;
+ if (/FUZZ\: disable check_for_tchar/) {
+ $disable = 1;
+ }
+ if (/FUZZ\: enable check_for_tchar/) {
+ $disable = 0;
+ }
+ if ($disable == 0) {
+ if (/LPTSTR/) {
+ print_error ("LPTSTR found on line $line in $file");
+ }
+
+ if (/LPCTSTR/) {
+ print_error ("LPCTSTR found on line $line in $file");
+ }
+
+ if (/ASYS_TCHAR/) {
+ print_error ("ASYS_TCHAR found on "
+ ."line $line in $file");
+ }
+ elsif (/TCHAR/ and $` !~ /ACE_/) {
+ print_error ("TCHAR on line $line in $file");
+ }
+
+ if (/ASYS_TEXT/) {
+ print_error ("ASYS_TEXT on line $line in $file");
+ }
+ elsif (/TEXT/ and $` !~ /ACE_/) {
+ print_error ("TEXT found on line $line in $file");
+ }
+ }
+ }
+ close (FILE);
+ }
+ else {
+ print STDERR "Error: Could not open $file\n";
+ }
+ }
+}
+
##############################################################################
-our ($opt_d, $opt_h, $opt_l, $opt_m);
+our ($opt_c, $opt_d, $opt_h, $opt_l, $opt_m);
-if (!getopts ('dhl:m') || $opt_h) {
- print "fuzz.pl [-dhm] [-l level]\n";
+if (!getopts ('cdhl:m') || $opt_h) {
+ print "fuzz.pl [-cdhm] [-l level] [file1, file2, ...]\n";
print "\n";
+ print " -c only look at the files passed in\n";
print " -d turn on debugging\n";
print " -h display this help\n";
print " -l level set detection level (default = 5)\n";
@@ -258,7 +383,12 @@ if (!$opt_l) {
$opt_l = 5;
}
-if ($opt_m) {
+if ($opt_c) {
+ foreach $file (@ARGV) {
+ store_file ($file);
+ }
+}
+elsif ($opt_m) {
find_mod_files ();
}
else {
@@ -266,8 +396,14 @@ else {
}
check_for_inline_in_cpp () if ($opt_l >= 2);
-check_for_id_string () if ($opt_l >= 2);
+check_for_id_string () if ($opt_l >= 1);
+check_for_newline () if ($opt_l >= 1);
check_for_inline () if ($opt_l >= 2);
check_for_math_include () if ($opt_l >= 3);
check_for_line_length () if ($opt_l >= 8);
check_for_preprocessor_comments () if ($opt_l >= 7);
+check_for_tchar () if ($opt_l >= 6);
+
+print "\n$errors error(s), $warnings warnings(s)\n";
+
+exit (1) if $errors > 0;