tools/summarise_gcc_errors.pl
changeset 3 5578c2bec847
parent 1 fd0863fd52e5
child 7 8c4a7869f673
--- a/tools/summarise_gcc_errors.pl	Fri Mar 26 16:26:39 2010 +0000
+++ b/tools/summarise_gcc_errors.pl	Wed Mar 31 11:44:26 2010 +0100
@@ -49,7 +49,8 @@
   {
   Usage("Invalid argument");
   }
-  
+
+my $current_package = ""; 
 my %files;
 my %errors_by_file;
 my %error_count_by_file;
@@ -60,10 +61,22 @@
 my %unique_message_counts;
 my %all_message_counts;
 my $next_message_id = 1;
+my %packages_by_file;
+my %package_count_by_file;
+
 
 my $line;
 while ($line = <>)
 	{
+	# </pre>os/usb, usb_CompilerCompatibility.005, SF_builds/usb/builds/CompilerCompatibility/usb_CompilerCompatibility.005/html/os_usb_failures.html
+
+	if ($line =~/\/html\/([^\/]+)_failures.html/)
+		{
+		$current_package = $1;
+		$current_package =~ s/_/\//;
+		next;
+		}
+
 	# M:/epoc32/include/elements/nm_interfaces.h:255: warning: dereferencing type-punned pointer will break strict-aliasing rules
 	# M:/epoc32/include/f32file.h:2169: warning: invalid access to non-static data member 'TVolFormatParam::iUId'  of NULL object
 	# M:/epoc32/include/f32file.h:2169: warning: (perhaps the 'offsetof' macro was used incorrectly)
@@ -112,45 +125,59 @@
 			$all_message_counts{$message_id} += 1;
 			}
 		my $instance = sprintf("%s:%d: %s-#%d", $filename, $lineno, $messagetype, $message_id);
+
+		my $packages = $packages_by_file{$filename};
+		if (!defined $packages)
+			{
+			$packages_by_file{$filename} = "\t$current_package\t";
+			$package_count_by_file{$filename} = 1;
+			}
+		else
+			{
+			if (index($packages,"\t$current_package\t") < 0)
+				{
+				$packages_by_file{$filename} .= "\t$current_package\t";
+				$package_count_by_file{$filename} += 1;
+				}
+			}
 		
 		if (defined $files{$instance})
 			{
 			# already seen this one
 			next;
 			}
+
+		if (!defined $unique_message_counts{$message_id})
+			{
+			$unique_message_counts{$message_id} = 1;
+			}
 		else
 			{
-			if (!defined $unique_message_counts{$message_id})
-				{
-				$unique_message_counts{$message_id} = 1;
-				}
-			else
-				{
-				$unique_message_counts{$message_id} += 1;
-				}
-			$files{$instance} = $message;
+			$unique_message_counts{$message_id} += 1;
+			}
+		$files{$instance} = $message;
 
-			if (!defined $files_by_message_id{$message_id})
-				{
-				$files_by_message_id{$message_id} = $filename;
-				}
-			else
-				{
-				$files_by_message_id{$message_id} .= "\n$filename";
-				}
-					
-			my $error = sprintf "%-5d: %s: %s", $lineno, $messagetype, $message;
-			if (!defined $errors_by_file{$filename})
-				{
-				$errors_by_file{$filename} = $error;
-				$error_count_by_file{$filename} = 1;
-				}
-			else
-				{
-				$errors_by_file{$filename} .= "\n$error";
-				$error_count_by_file{$filename} += 1;
-				}
-			}	
+		if (!defined $files_by_message_id{$message_id})
+			{
+			$files_by_message_id{$message_id} = $filename;
+			}
+		else
+			{
+			$files_by_message_id{$message_id} .= "\n$filename";
+			}
+				
+		my $error = sprintf "%-5d: %s: %s", $lineno, $messagetype, $message;
+		if (!defined $errors_by_file{$filename})
+			{
+			$errors_by_file{$filename} = $error;
+			$error_count_by_file{$filename} = 1;
+			}
+		else
+			{
+			$errors_by_file{$filename} .= "\n$error";
+			$error_count_by_file{$filename} += 1;
+			}
+
 		next;
 		}
 	}
@@ -186,6 +213,17 @@
 		}
 	}
 
+print "\n\n====Packages impacted (if > 1)\n";
+foreach my $file ( sort {$package_count_by_file{$b} <=> $package_count_by_file{$a}} keys %package_count_by_file)
+	{
+	if ($package_count_by_file{$file} < 2)
+		{
+		next;
+		}
+	my ($empty,@packages) = split /\t+/, $packages_by_file{$file};
+	printf "%-6d\t%s\n\t(%s)\n",$package_count_by_file{$file}, $file, join(", ", @packages);
+	}
+
 print "\n\n====Affected files by package\n";
 my $current_package = "";
 my @currentfiles;