tools/summarise_gcc_errors.pl
changeset 3 5578c2bec847
parent 1 fd0863fd52e5
child 7 8c4a7869f673
equal deleted inserted replaced
2:f49995c19d9d 3:5578c2bec847
    47     "v|verbose" => \$verbose,
    47     "v|verbose" => \$verbose,
    48     ))
    48     ))
    49   {
    49   {
    50   Usage("Invalid argument");
    50   Usage("Invalid argument");
    51   }
    51   }
    52   
    52 
       
    53 my $current_package = ""; 
    53 my %files;
    54 my %files;
    54 my %errors_by_file;
    55 my %errors_by_file;
    55 my %error_count_by_file;
    56 my %error_count_by_file;
    56 my %errors;
    57 my %errors;
    57 my %message_ids;
    58 my %message_ids;
    58 my %files_by_message_id;
    59 my %files_by_message_id;
    59 my %messages_by_id;
    60 my %messages_by_id;
    60 my %unique_message_counts;
    61 my %unique_message_counts;
    61 my %all_message_counts;
    62 my %all_message_counts;
    62 my $next_message_id = 1;
    63 my $next_message_id = 1;
       
    64 my %packages_by_file;
       
    65 my %package_count_by_file;
       
    66 
    63 
    67 
    64 my $line;
    68 my $line;
    65 while ($line = <>)
    69 while ($line = <>)
    66 	{
    70 	{
       
    71 	# </pre>os/usb, usb_CompilerCompatibility.005, SF_builds/usb/builds/CompilerCompatibility/usb_CompilerCompatibility.005/html/os_usb_failures.html
       
    72 
       
    73 	if ($line =~/\/html\/([^\/]+)_failures.html/)
       
    74 		{
       
    75 		$current_package = $1;
       
    76 		$current_package =~ s/_/\//;
       
    77 		next;
       
    78 		}
       
    79 
    67 	# M:/epoc32/include/elements/nm_interfaces.h:255: warning: dereferencing type-punned pointer will break strict-aliasing rules
    80 	# M:/epoc32/include/elements/nm_interfaces.h:255: warning: dereferencing type-punned pointer will break strict-aliasing rules
    68 	# M:/epoc32/include/f32file.h:2169: warning: invalid access to non-static data member 'TVolFormatParam::iUId'  of NULL object
    81 	# M:/epoc32/include/f32file.h:2169: warning: invalid access to non-static data member 'TVolFormatParam::iUId'  of NULL object
    69 	# M:/epoc32/include/f32file.h:2169: warning: (perhaps the 'offsetof' macro was used incorrectly)
    82 	# M:/epoc32/include/f32file.h:2169: warning: (perhaps the 'offsetof' macro was used incorrectly)
    70 	# M:/epoc32/include/comms-infras/ss_nodemessages.h:301: error: wrong number of template arguments (3, should be 4)
    83 	# M:/epoc32/include/comms-infras/ss_nodemessages.h:301: error: wrong number of template arguments (3, should be 4)
    71 	# M:/epoc32/include/elements/nm_signatures.h:496: error: provided for 'template<class TSIGNATURE, int PAYLOADATTRIBOFFSET, class TATTRIBUTECREATIONPOLICY, int PAYLOADBUFFERMAXLEN> class Messages::TSignatureWithPolymorphicPayloadMetaType'
    84 	# M:/epoc32/include/elements/nm_signatures.h:496: error: provided for 'template<class TSIGNATURE, int PAYLOADATTRIBOFFSET, class TATTRIBUTECREATIONPOLICY, int PAYLOADBUFFERMAXLEN> class Messages::TSignatureWithPolymorphicPayloadMetaType'
   110 			{
   123 			{
   111 			$message_id = $message_ids{$generic_message};
   124 			$message_id = $message_ids{$generic_message};
   112 			$all_message_counts{$message_id} += 1;
   125 			$all_message_counts{$message_id} += 1;
   113 			}
   126 			}
   114 		my $instance = sprintf("%s:%d: %s-#%d", $filename, $lineno, $messagetype, $message_id);
   127 		my $instance = sprintf("%s:%d: %s-#%d", $filename, $lineno, $messagetype, $message_id);
       
   128 
       
   129 		my $packages = $packages_by_file{$filename};
       
   130 		if (!defined $packages)
       
   131 			{
       
   132 			$packages_by_file{$filename} = "\t$current_package\t";
       
   133 			$package_count_by_file{$filename} = 1;
       
   134 			}
       
   135 		else
       
   136 			{
       
   137 			if (index($packages,"\t$current_package\t") < 0)
       
   138 				{
       
   139 				$packages_by_file{$filename} .= "\t$current_package\t";
       
   140 				$package_count_by_file{$filename} += 1;
       
   141 				}
       
   142 			}
   115 		
   143 		
   116 		if (defined $files{$instance})
   144 		if (defined $files{$instance})
   117 			{
   145 			{
   118 			# already seen this one
   146 			# already seen this one
   119 			next;
   147 			next;
   120 			}
   148 			}
   121 		else
   149 
   122 			{
   150 		if (!defined $unique_message_counts{$message_id})
   123 			if (!defined $unique_message_counts{$message_id})
   151 			{
   124 				{
   152 			$unique_message_counts{$message_id} = 1;
   125 				$unique_message_counts{$message_id} = 1;
   153 			}
   126 				}
   154 		else
   127 			else
   155 			{
   128 				{
   156 			$unique_message_counts{$message_id} += 1;
   129 				$unique_message_counts{$message_id} += 1;
   157 			}
   130 				}
   158 		$files{$instance} = $message;
   131 			$files{$instance} = $message;
   159 
   132 
   160 		if (!defined $files_by_message_id{$message_id})
   133 			if (!defined $files_by_message_id{$message_id})
   161 			{
   134 				{
   162 			$files_by_message_id{$message_id} = $filename;
   135 				$files_by_message_id{$message_id} = $filename;
   163 			}
   136 				}
   164 		else
   137 			else
   165 			{
   138 				{
   166 			$files_by_message_id{$message_id} .= "\n$filename";
   139 				$files_by_message_id{$message_id} .= "\n$filename";
   167 			}
   140 				}
   168 				
   141 					
   169 		my $error = sprintf "%-5d: %s: %s", $lineno, $messagetype, $message;
   142 			my $error = sprintf "%-5d: %s: %s", $lineno, $messagetype, $message;
   170 		if (!defined $errors_by_file{$filename})
   143 			if (!defined $errors_by_file{$filename})
   171 			{
   144 				{
   172 			$errors_by_file{$filename} = $error;
   145 				$errors_by_file{$filename} = $error;
   173 			$error_count_by_file{$filename} = 1;
   146 				$error_count_by_file{$filename} = 1;
   174 			}
   147 				}
   175 		else
   148 			else
   176 			{
   149 				{
   177 			$errors_by_file{$filename} .= "\n$error";
   150 				$errors_by_file{$filename} .= "\n$error";
   178 			$error_count_by_file{$filename} += 1;
   151 				$error_count_by_file{$filename} += 1;
   179 			}
   152 				}
   180 
   153 			}	
       
   154 		next;
   181 		next;
   155 		}
   182 		}
   156 	}
   183 	}
   157 
   184 
   158 # clean up the file lists
   185 # clean up the file lists
   182 	printf "%-6d\t%s\n", $filecount_by_message_id{$id}, $messages_by_id{$id};
   209 	printf "%-6d\t%s\n", $filecount_by_message_id{$id}, $messages_by_id{$id};
   183 	if ($verbose)
   210 	if ($verbose)
   184 		{
   211 		{
   185 		print "\t", $files_by_message_id{$id};
   212 		print "\t", $files_by_message_id{$id};
   186 		}
   213 		}
       
   214 	}
       
   215 
       
   216 print "\n\n====Packages impacted (if > 1)\n";
       
   217 foreach my $file ( sort {$package_count_by_file{$b} <=> $package_count_by_file{$a}} keys %package_count_by_file)
       
   218 	{
       
   219 	if ($package_count_by_file{$file} < 2)
       
   220 		{
       
   221 		next;
       
   222 		}
       
   223 	my ($empty,@packages) = split /\t+/, $packages_by_file{$file};
       
   224 	printf "%-6d\t%s\n\t(%s)\n",$package_count_by_file{$file}, $file, join(", ", @packages);
   187 	}
   225 	}
   188 
   226 
   189 print "\n\n====Affected files by package\n";
   227 print "\n\n====Affected files by package\n";
   190 my $current_package = "";
   228 my $current_package = "";
   191 my @currentfiles;
   229 my @currentfiles;