# HG changeset patch # User MattD # Date 1251912618 -3600 # Node ID 7efe68a9f0fe56e46e78bda7224a8666a7c23c17 # Parent bb7bd27a0a821851a983e22a78217a1bfcf73fbc# Parent 3df26b840cc97d3f1db969c1bf8522a415929068 catchup merge diff -r bb7bd27a0a82 -r 7efe68a9f0fe common/build.postbuild.xml --- a/common/build.postbuild.xml Wed Sep 02 18:28:55 2009 +0100 +++ b/common/build.postbuild.xml Wed Sep 02 18:30:18 2009 +0100 @@ -301,8 +301,8 @@ - - + + @@ -318,6 +318,7 @@ + @@ -337,17 +338,30 @@ + + + + + - + + + + + + + + + @@ -456,7 +470,7 @@ ant: antProperties() - raptor_summary: csv(${build.log.dir}/raptorbits/summary.csv,{separator:',',headers:[category,subcategory,severity,component,phase,recipe,file,line]}) + raptor_summary: csv(${build.log.dir}/raptorbits/summary.csv,{separator:',',headers:[category,subcategory,severity,config,component,phase,recipe,file,line]}) files: csv(${build.drive}/output/logs/analysis/tmp_yarp_files.csv,{separator:',',headers:[name,path,localpath]}) diff -r bb7bd27a0a82 -r 7efe68a9f0fe common/build.xml --- a/common/build.xml Wed Sep 02 18:28:55 2009 +0100 +++ b/common/build.xml Wed Sep 02 18:30:18 2009 +0100 @@ -27,6 +27,8 @@ + + @@ -58,7 +60,7 @@ - + @@ -83,17 +85,40 @@ - + + + + + + + + + + + + + + + + + + + + + + + + - + - + [SF-BUILD-ALL] @@ -171,7 +196,7 @@ - + [SF-PREBUILD] diff -r bb7bd27a0a82 -r 7efe68a9f0fe common/templates/zip.cfg.xml.ftl.template --- a/common/templates/zip.cfg.xml.ftl.template Wed Sep 02 18:28:55 2009 +0100 +++ b/common/templates/zip.cfg.xml.ftl.template Wed Sep 02 18:30:18 2009 +0100 @@ -37,58 +37,61 @@ + + + - + - + - + - + - + - + - + - + - + - + - + - + diff -r bb7bd27a0a82 -r 7efe68a9f0fe common/tools/populateziptemplate.pl --- a/common/tools/populateziptemplate.pl Wed Sep 02 18:28:55 2009 +0100 +++ b/common/tools/populateziptemplate.pl Wed Sep 02 18:30:18 2009 +0100 @@ -70,8 +70,7 @@ my $xml = XML::Simple->new(); my $zipConfig = $xml->XMLin($template, keyattr => $keyAttr); my @allRndFiles; - -my $failures = 0; +my $miscCount = 0; # For each package in CSV... foreach my $package (@packages) @@ -142,8 +141,23 @@ } else { - warn "Cannot determine license for '$package->{source}'\n"; - $failures++; + (my $dest2 = $package->{dst}) =~ s{[\\/]}{_slash_}g; + push @{$zipConfig->{config}->{config}->{src}->{config}->{misc}->{config}}, + { + set => + [ + { + name => "name", + value=> "src_misc_$dest2"."_$miscCount", + }, + { + name => "include", + value => "$package->{dst}/**", + }, + ] + }; + $miscCount++; + warn "Warning: Cannot determine license for '$package->{source}' - it will be packaged as 'src_misc_$dest2"."_$miscCount'\n"; } } @@ -158,4 +172,3 @@ print $fh @allRndFiles; close $fh; -exit($failures); diff -r bb7bd27a0a82 -r 7efe68a9f0fe common/tools/raptor/RaptorCommon.pm --- a/common/tools/raptor/RaptorCommon.pm Wed Sep 02 18:28:55 2009 +0100 +++ b/common/tools/raptor/RaptorCommon.pm Wed Sep 02 18:30:18 2009 +0100 @@ -14,22 +14,8 @@ package RaptorCommon; -our $CATEGORY_GENERAL = 'general'; - -our $CATEGORY_RAPTORERROR = 'raptor_error'; -our $CATEGORY_RAPTORERROR_CANNOTPROCESSSCHEMAVERSION = 'cannot_process_schema_version'; -our $CATEGORY_RAPTORERROR_NOBLDINFFOUND = 'no_bld_inf_found'; -our $CATEGORY_RAPTORERROR_CANTFINDMMPFILE = 'cant_find_mmp_file'; -our $CATEGORY_RAPTORERROR_MAKEEXITEDWITHERRORS = 'make_exited_with_errors'; -our $CATEGORY_RAPTORERROR_TOOLDIDNOTRETURNVERSION = 'tool_didnot_return_version'; - -our $CATEGORY_RAPTORWARNING = 'raptor_warning'; -our $CATEGORY_RAPTORWARNING_MISSINGFLAGABIV2 = 'missing_enable_abiv2_mode'; - -our $SEVERITY_UNKNOWN = 'unknown'; our $SEVERITY_CRITICAL = 'critical'; our $SEVERITY_MAJOR = 'major'; -our $SEVERITY_NORMAL = 'normal'; our $SEVERITY_MINOR = 'minor'; sub init @@ -48,7 +34,7 @@ my ($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line) = @_; open(SUMMARY, ">>$::basedir/summary.csv"); - print SUMMARY "$category,$subcategory,$severity,$component,$phase,$recipe,$file,$line\n"; + print SUMMARY "$category,$subcategory,$severity,$::raptor_config,$component,$phase,$recipe,$file,$line\n"; close(SUMMARY); } diff -r bb7bd27a0a82 -r 7efe68a9f0fe common/tools/raptor/RaptorError.pm --- a/common/tools/raptor/RaptorError.pm Wed Sep 02 18:28:55 2009 +0100 +++ b/common/tools/raptor/RaptorError.pm Wed Sep 02 18:30:18 2009 +0100 @@ -36,51 +36,57 @@ $buildlog_error_status->{on_chars} = 'RaptorError::on_chars_buildlog_error'; my $filename = ''; +my $failure_item = 0; my $characters = ''; -my $category = $RaptorCommon::CATEGORY_RAPTORERROR; +my $CATEGORY_RAPTORERROR = 'raptor_error'; +my $CATEGORY_RAPTORERROR_CANNOTPROCESSSCHEMAVERSION = 'cannot_process_schema_version'; +my $CATEGORY_RAPTORERROR_NOBLDINFFOUND = 'no_bld_inf_found'; +my $CATEGORY_RAPTORERROR_CANTFINDMMPFILE = 'cant_find_mmp_file'; +my $CATEGORY_RAPTORERROR_MAKEEXITEDWITHERRORS = 'make_exited_with_errors'; +my $CATEGORY_RAPTORERROR_TOOLDIDNOTRETURNVERSION = 'tool_didnot_return_version'; sub process { my ($text, $component, $phase, $recipe, $file, $line) = @_; - my $severity = $RaptorCommon::SEVERITY_UNKNOWN; + my $category = $CATEGORY_RAPTORERROR; + my $severity = ''; + my $subcategory = ''; if ($text =~ m,Cannot process schema version .* of file,) { $severity = $RaptorCommon::SEVERITY_CRITICAL; - my $subcategory = $RaptorCommon::CATEGORY_RAPTORERROR_CANNOTPROCESSSCHEMAVERSION; + $subcategory = $CATEGORY_RAPTORERROR_CANNOTPROCESSSCHEMAVERSION; RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); } elsif ($text =~ m,No bld\.inf found at,) { $severity = $RaptorCommon::SEVERITY_MAJOR; - my $subcategory = $RaptorCommon::CATEGORY_RAPTORERROR_NOBLDINFFOUND; + $subcategory = $CATEGORY_RAPTORERROR_NOBLDINFFOUND; RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); } elsif ($text =~ m,Can't find mmp file,) { - $severity = $RaptorCommon::SEVERITY_NORMAL; - my $subcategory = $RaptorCommon::CATEGORY_RAPTORERROR_CANTFINDMMPFILE; + $severity = $RaptorCommon::SEVERITY_MINOR; + $subcategory = $CATEGORY_RAPTORERROR_CANTFINDMMPFILE; RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); } elsif ($text =~ m,The make-engine exited with errors,) { $severity = $RaptorCommon::SEVERITY_CRITICAL; - my $subcategory = $RaptorCommon::CATEGORY_RAPTORERROR_MAKEEXITEDWITHERRORS; + $subcategory = $CATEGORY_RAPTORERROR_MAKEEXITEDWITHERRORS; RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); } elsif ($text =~ m,tool .* from config .* did not return version .* as required,) { $severity = $RaptorCommon::SEVERITY_CRITICAL; - my $subcategory = $RaptorCommon::CATEGORY_RAPTORERROR_TOOLDIDNOTRETURNVERSION; + $subcategory = $CATEGORY_RAPTORERROR_TOOLDIDNOTRETURNVERSION; RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); } else # log everything by default { - $severity = $RaptorCommon::SEVERITY_NORMAL; - my $subcategory = ''; RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); } } @@ -89,7 +95,7 @@ { RaptorCommon::init(); - $filename = "$::basedir/errors.txt"; + $filename = "$::basedir/raptor_error.txt"; if (!-f$filename) { print "Writing errors file $filename\n"; @@ -100,7 +106,6 @@ sub on_start_buildlog_error { - open(FILE, ">>$filename"); } sub on_chars_buildlog_error @@ -118,17 +123,31 @@ { #print "on_end_buildlog_error\n"; - print FILE $characters if ($characters =~ m,[^\s^\r^\n],); - print FILE "\n" if ($characters !~ m,[\r\n]$, ); - close(FILE); + $characters =~ s,^[\r\n]*,,; + $characters =~ s,[\r\n]*$,,; - # get the line number - not really optimized - my $linecount = 0; - open(FILE, "$filename"); - for ($linecount = 0; ; $linecount++) { } - close(FILE); + if ($characters =~ m,[^\s^\r^\n],) + { + if ($failure_item == 0 and -f "$filename") + { + open(FILE, "$filename"); + { + local $/ = undef; + my $filecontent = ; + $failure_item = $1 if ($filecontent =~ m/.*---failure_item_(\d+)/s); + } + close(FILE); + } + + $failure_item++; - process($characters, '', '', '', "errors.txt", $linecount); + open(FILE, ">>$filename"); + print FILE "---failure_item_$failure_item\---\n"; + print FILE "$characters\n\n"; + close(FILE); + + process($characters, '', '', '', "raptor_error.txt", $failure_item); + } $characters = ''; } diff -r bb7bd27a0a82 -r 7efe68a9f0fe common/tools/raptor/RaptorInfo.pm --- a/common/tools/raptor/RaptorInfo.pm Wed Sep 02 18:28:55 2009 +0100 +++ b/common/tools/raptor/RaptorInfo.pm Wed Sep 02 18:30:18 2009 +0100 @@ -42,7 +42,7 @@ { my ($text) = @_; - my $severity = $RaptorCommon::SEVERITY_UNKNOWN; + my $severity = ''; if ($text =~ m,unmatchable,) { diff -r bb7bd27a0a82 -r 7efe68a9f0fe common/tools/raptor/RaptorRecipe.pm --- a/common/tools/raptor/RaptorRecipe.pm Wed Sep 02 18:28:55 2009 +0100 +++ b/common/tools/raptor/RaptorRecipe.pm Wed Sep 02 18:30:18 2009 +0100 @@ -21,70 +21,92 @@ our $reset_status = {}; my $buildlog_status = {}; my $buildlog_recipe_status = {}; +my $buildlog_recipe_status_status = {}; $reset_status->{name} = 'reset_status'; $reset_status->{next_status} = {buildlog=>$buildlog_status}; $buildlog_status->{name} = 'buildlog_status'; $buildlog_status->{next_status} = {recipe=>$buildlog_recipe_status}; +$buildlog_status->{on_start} = 'RaptorRecipe::on_start_buildlog'; +$buildlog_status->{on_end} = 'RaptorRecipe::on_end_buildlog'; $buildlog_recipe_status->{name} = 'buildlog_recipe_status'; -$buildlog_recipe_status->{next_status} = {}; +$buildlog_recipe_status->{next_status} = {status=>$buildlog_recipe_status_status}; $buildlog_recipe_status->{on_start} = 'RaptorRecipe::on_start_buildlog_recipe'; $buildlog_recipe_status->{on_end} = 'RaptorRecipe::on_end_buildlog_recipe'; $buildlog_recipe_status->{on_chars} = 'RaptorRecipe::on_chars_buildlog_recipe'; -my $characters = ''; +$buildlog_recipe_status_status->{name} = 'buildlog_recipe_status_status'; +$buildlog_recipe_status_status->{next_status} = {}; +$buildlog_recipe_status_status->{on_start} = 'RaptorRecipe::on_start_buildlog_recipe_status'; + + +my $filename = ''; +my $failure_item = 0; + my $recipe_info = {}; -my $category = $RaptorCommon::CATEGORY_RAPTORRECIPE; +my $characters = ''; + +my $CATEGORY_RECIPEFAILURE = 'recipe_failure'; +my $CATEGORY_RECIPEFAILURE_ARMCC_CANNOTOPENSOURCEINPUTFILE = 'armcc_cannot_open_source_input_file'; +my $CATEGORY_RECIPEFAILURE_ARMLINK_COULDNOTOPENFILE = 'armlink_could_not_open_file'; +my $CATEGORY_RECIPEFAILURE_ELF2E32_COULDNOTOPENFILE = 'elf2e32_could_not_open_file'; sub process { - my ($text) = @_; + my ($text, $component, $phase, $recipe, $file, $line) = @_; + + my $category = $CATEGORY_RECIPEFAILURE; + my $severity = ''; + my $subcategory = ''; - my $severity = $RaptorCommon::SEVERITY_UNKNOWN; - - if ($text =~ m,Cannot process schema version .* of file,) + if ($text =~ m,Error: #5: cannot open source input file .*: No such file or directory,) + { + $severity = $RaptorCommon::SEVERITY_MAJOR; + my $subcategory = $CATEGORY_RECIPEFAILURE_ARMCC_CANNOTOPENSOURCEINPUTFILE; + RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); + } + elsif ($text =~ m,Fatal error: L6002U: Could not open file .*: No such file or directory,) { - $severity = $RaptorCommon::SEVERITY_CRITICAL; - - #dump_recipe($category, $severity, $text); - print "$category, $severity, $text\n"; + $severity = $RaptorCommon::SEVERITY_MAJOR; + my $subcategory = $CATEGORY_RECIPEFAILURE_ARMLINK_COULDNOTOPENFILE; + RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); + } + elsif ($text =~ m,elf2e32 : Error: E1001: Could not open file : .*.,) + { + $severity = $RaptorCommon::SEVERITY_MAJOR; + my $subcategory = $CATEGORY_RECIPEFAILURE_ELF2E32_COULDNOTOPENFILE; + RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); } + else # log everything by default + { + RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); + } +} + +sub on_start_buildlog +{ + #print FILE "line,layer,component,name,armlicence,platform,phase,code,bldinf,mmp,target,source,\n"; + + RaptorCommon::init(); } sub on_start_buildlog_recipe { my ($el) = @_; - $recipe_info = {}; - $characters = ''; + #print "on_start_buildlog_recipe\n"; - my $attrstring = ''; - my $bldinf = ''; + $recipe_info = {}; my $attributes = $el->{Attributes}; for (keys %{$attributes}) { - if ($attributes->{$_}->{'LocalName'} eq 'bldinf') - { - $bldinf = $attributes->{$_}->{'Value'}; - } - - $attrstring .= "$attributes->{$_}->{'LocalName'}}='$attributes->{$_}->{'Value'}' "; - + $recipe_info->{$attributes->{$_}->{'LocalName'}} = $attributes->{$_}->{'Value'}; + #print "$_ -> $attributes->{$_}->{'Value'}\n"; } - - if ($bldinf eq '') - { - print "WARNING: recipe tag with no bldinf attribute. Associating to package unknown/unknown\n"; - $bldinf = "/sf/unknown/unknown/group/bld.inf"; - } - - $recipe_info->{bldinf} = $bldinf; - - $characters = "\n"; } sub on_chars_buildlog_recipe @@ -98,30 +120,88 @@ #print "characters is now -->$characters<--\n"; } +sub on_start_buildlog_recipe_status +{ + my ($el) = @_; + + my $attributes = $el->{Attributes}; + for (keys %{$attributes}) + { + if ($attributes->{$_}->{'LocalName'} eq 'code') + { + $recipe_info->{$attributes->{$_}->{'LocalName'}} = $attributes->{$_}->{'Value'}; + } + elsif ($attributes->{$_}->{'LocalName'} eq 'exit') + { + $recipe_info->{$attributes->{$_}->{'LocalName'}} = $attributes->{$_}->{'Value'}; + } + elsif ($attributes->{$_}->{'LocalName'} eq 'attempt') + { + $recipe_info->{$attributes->{$_}->{'LocalName'}} = $attributes->{$_}->{'Value'}; + } + } +} + sub on_end_buildlog_recipe { - #print "on_end_buildlog_recipe\n"; - - $characters .= "\n\n"; - - my $normalized = lc($recipe_info->{bldinf}); - $normalized =~ s,^[A-Za-z]:,,; - $normalized =~ s,[\\],/,g; - - $normalized =~ m,^/sf/([^/]+)/([^/]+)/,; - my $layer = $1; - my $package = $2; - - mkdir("$::basedir/recipes"); - mkdir("$::basedir/recipes/$layer"); - mkdir("$::basedir/recipes/$layer/$package"); - - my $filename = "$::basedir/recipes/$layer/$package/recipes.txt"; - - print "Writing recipes file $filename\n" if (!-f$filename); - open(FILE, ">>$filename"); - print FILE $characters; - close(FILE); + if ($recipe_info->{exit} =~ /failed/) + { + # normalize bldinf path + $recipe_info->{bldinf} = lc($recipe_info->{bldinf}); + $recipe_info->{bldinf} =~ s,^[A-Za-z]:,,; + $recipe_info->{bldinf} =~ s,[\\],/,g; + + my $package = ''; + if ($recipe_info->{bldinf} =~ m,/((os|mw|app|tools|ostools|adaptation)/[^/]*),) + { + $package = $1; + $package =~ s,/,_,; + } + else + { + print "WARNING: can't understand bldinf attribute of recipe: $recipe_info->{bldinf}. Won't dump to failed recipes file.\n"; + } + + $characters =~ s,^[\r\n]*,,; + $characters =~ s,[\r\n]*$,,; + + if ($package) + { + $filename = "$::basedir/$package.txt"; + if (!-f$filename) + { + print "Writing recipe file $filename\n"; + open(FILE, ">$filename"); + close(FILE); + } + + if ($failure_item == 0 and -f "$filename") + { + open(FILE, "$filename"); + { + local $/ = undef; + my $filecontent = ; + $failure_item = $1 if ($filecontent =~ m/.*---failure_item_(\d+)/s); + } + close(FILE); + } + + $failure_item++; + + open(FILE, ">>$filename"); + print FILE "---failure_item_$failure_item\---\n"; + print FILE "$characters\n\n"; + close(FILE); + } + + process($characters, $recipe_info->{bldinf}, $recipe_info->{phase}, $recipe_info->{name}, "$package.txt", $failure_item); + } + + $characters = ''; +} + +sub on_end_buildlog +{ } diff -r bb7bd27a0a82 -r 7efe68a9f0fe common/tools/raptor/RaptorUnreciped.pm --- a/common/tools/raptor/RaptorUnreciped.pm Wed Sep 02 18:28:55 2009 +0100 +++ b/common/tools/raptor/RaptorUnreciped.pm Wed Sep 02 18:30:18 2009 +0100 @@ -33,30 +33,154 @@ $buildlog_subtag_status->{name} = 'buildlog_subtag_status'; $buildlog_subtag_status->{next_status} = {}; +$buildlog_subtag_status->{on_start} = 'RaptorUnreciped::on_start_buildlog_subtag'; +$buildlog_subtag_status->{on_end} = 'RaptorUnreciped::on_end_buildlog_subtag'; + +my $filename = ''; +my $failure_item = 0; my $characters = ''; +my $store_chars = 1; + +my $CATEGORY_RAPTORUNRECIPED = 'raptor_unreciped'; +my $CATEGORY_RAPTORUNRECIPED_NORULETOMAKETARGET = 'no_rule_to_make_target'; +my $CATEGORY_RAPTORUNRECIPED_TARGETNOTREMADEFORERRORS = 'target_not_remade_for_errors'; +my $CATEGORY_RAPTORUNRECIPED_NOTHINGTOBEDONEFOR = 'nothing_to_be_done_for'; +my $CATEGORY_RAPTORUNRECIPED_IGNORINGOLDCOMMANDSFORTARGET = 'ignoring_old_commands_for_target'; +my $CATEGORY_RAPTORUNRECIPED_OVERRIDINGCOMMANDSFORTARGET = 'overriding_commands_for_target'; + +sub process +{ + my ($text, $component, $phase, $recipe, $file, $line) = @_; + + my $category = $CATEGORY_RAPTORUNRECIPED; + my $severity = ''; + my $subcategory = ''; + + if ($text =~ m,make\.exe: \*\*\* No rule to make target,) + { + $severity = $RaptorCommon::SEVERITY_MAJOR; + my $subcategory = $CATEGORY_RAPTORUNRECIPED_NORULETOMAKETARGET; + RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); + } + elsif ($text =~ m,make\.exe: Target .* not remade because of errors,) + { + $severity = $RaptorCommon::SEVERITY_MINOR; + my $subcategory = $CATEGORY_RAPTORUNRECIPED_TARGETNOTREMADEFORERRORS; + RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); + } + elsif ($text =~ m,: warning: ignoring old commands for target,) + { + $severity = $RaptorCommon::SEVERITY_MINOR; + my $subcategory = $CATEGORY_RAPTORUNRECIPED_IGNORINGOLDCOMMANDSFORTARGET; + RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); + } + elsif ($text =~ m,: warning: overriding commands for target,) + { + $severity = $RaptorCommon::SEVERITY_MINOR; + my $subcategory = $CATEGORY_RAPTORUNRECIPED_OVERRIDINGCOMMANDSFORTARGET; + RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); + } + elsif ($text =~ m,make\.exe: Nothing to be done for .*,) + { + $severity = $RaptorCommon::SEVERITY_MINOR; + my $subcategory = $CATEGORY_RAPTORUNRECIPED_NOTHINGTOBEDONEFOR; + RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); + } + elsif ($text =~ m,^(true|false)$,) + { + # don't dump + } + else # log everything by default + { + RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); + } +} sub on_start_buildlog { - my $filename = "$::basedir/unreciped.txt"; - print "Writing unreciped file $filename\n" if (!-f$filename); - open(FILE, ">>$filename"); + RaptorCommon::init(); + + $filename = "$::basedir/raptor_unreciped.txt"; + if (!-f$filename) + { + print "Writing unreciped file $filename\n"; + open(FILE, ">$filename"); + close(FILE); + } } sub on_chars_buildlog { my ($ch) = @_; - my $characters = $ch->{Data}; + #print "on_chars_buildlog\n"; + + if ($store_chars) + { + $characters .= $ch->{Data}; + + #print "characters is now -->$characters<--\n"; + } +} + +sub on_end_buildlog_subtag +{ + $store_chars = 1; +} + +sub process_characters +{ + #print "process_characters\n"; + + $characters =~ s,^[\r\n]*,,; + $characters =~ s,[\r\n]*$,,; + + #print "characters is -->$characters<--\n"; - print FILE $characters if ($characters =~ m,[^\s^\r^\n],); + my @lines = split(/[\r\n]/, $characters); + for my $line (@lines) + { + if ($line =~ m,[^\s^\r^\n],) + { + #print "dumping chars\n"; + + if ($failure_item == 0 and -f "$filename") + { + open(FILE, "$filename"); + { + local $/ = undef; + my $filecontent = ; + $failure_item = $1 if ($filecontent =~ m/.*---failure_item_(\d+)/s); + } + close(FILE); + } + + $failure_item++; + + open(FILE, ">>$filename"); + print FILE "---failure_item_$failure_item\---\n"; + print FILE "$line\n\n"; + close(FILE); + + process($line, '', '', '', "raptor_unreciped.txt", $failure_item); + } + } - #print "characters is now -->$characters<--\n"; + $characters = ''; + $store_chars = 0; +} + +sub on_start_buildlog_subtag +{ + #print "on_start_buildlog_subtag\n"; + + process_characters(); } sub on_end_buildlog { - close(FILE); + process_characters(); } diff -r bb7bd27a0a82 -r 7efe68a9f0fe common/tools/raptor/RaptorWarning.pm --- a/common/tools/raptor/RaptorWarning.pm Wed Sep 02 18:28:55 2009 +0100 +++ b/common/tools/raptor/RaptorWarning.pm Wed Sep 02 18:30:18 2009 +0100 @@ -36,27 +36,29 @@ $buildlog_warning_status->{on_chars} = 'RaptorWarning::on_chars_buildlog_warning'; my $filename = ''; +my $failure_item = 0; my $characters = ''; -my $category = $RaptorCommon::CATEGORY_RAPTORWARNING; +my $CATEGORY_RAPTORWARNING = 'raptor_warning'; +my $CATEGORY_RAPTORWARNING_MISSINGFLAGABIV2 = 'missing_enable_abiv2_mode'; sub process { my ($text, $component, $phase, $recipe, $file, $line) = @_; - my $severity = $RaptorCommon::SEVERITY_UNKNOWN; + my $category = $CATEGORY_RAPTORWARNING; + my $severity = ''; + my $subcategory = ''; if ($text =~ m,missing flag ENABLE_ABIV2_MODE,) { - $severity = $RaptorCommon::SEVERITY_NORMAL; - my $subcategory = $RaptorCommon::CATEGORY_RAPTORWARNING_MISSINGFLAGABIV2; + $severity = $RaptorCommon::SEVERITY_MINOR; + my $subcategory = $CATEGORY_RAPTORWARNING_MISSINGFLAGABIV2; RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); } else # log everything by default { - $severity = $RaptorCommon::SEVERITY_NORMAL; - my $subcategory = ''; RaptorCommon::dump_fault($category, $subcategory, $severity, $component, $phase, $recipe, $file, $line); } } @@ -65,7 +67,7 @@ { RaptorCommon::init(); - $filename = "$::basedir/warnings.txt"; + $filename = "$::basedir/raptor_warning.txt"; if (!-f$filename) { print "Writing warnings file $filename\n"; @@ -93,17 +95,31 @@ { #print "on_end_buildlog_warning\n"; - print FILE $characters if ($characters =~ m,[^\s^\r^\n],); - print FILE "\n" if ($characters !~ m,[\r\n]$, ); - close(FILE); + $characters =~ s,^[\r\n]*,,; + $characters =~ s,[\r\n]*$,,; - # get the line number - not really optimized - my $linecount = 0; - open(FILE, "$filename"); - for ($linecount = 0; ; $linecount++) { } - close(FILE); + if ($characters =~ m,[^\s^\r^\n],) + { + if ($failure_item == 0 and -f "$filename") + { + open(FILE, "$filename"); + { + local $/ = undef; + my $filecontent = ; + $failure_item = $1 if ($filecontent =~ m/.*---failure_item_(\d+)/s); + } + close(FILE); + } + + $failure_item++; - process($characters, '', '', '', "warnings.txt", $linecount); + open(FILE, ">>$filename"); + print FILE "---failure_item_$failure_item\---\n"; + print FILE "$characters\n\n"; + close(FILE); + + process($characters, '', '', '', "raptor_warning.txt", $failure_item); + } $characters = ''; } diff -r bb7bd27a0a82 -r 7efe68a9f0fe common/tools/raptor/parse.pl --- a/common/tools/raptor/parse.pl Wed Sep 02 18:28:55 2009 +0100 +++ b/common/tools/raptor/parse.pl Wed Sep 02 18:30:18 2009 +0100 @@ -13,6 +13,8 @@ # Run the raptor parsers use strict; +use FindBin; +use lib $FindBin::Bin; use RaptorReleaseable; use RaptorError; use RaptorWarning; @@ -32,6 +34,7 @@ my $unreciped_module = 0; my $recipe_module = 0; our $basedir = ''; +our $raptor_config = ''; my $append = 0; my $help = 0; GetOptions(( @@ -42,7 +45,8 @@ 'info!' => \$info_module, 'unreciped!' => \$unreciped_module, 'recipe!' => \$recipe_module, - 'basedir:s' => \$basedir, + 'basedir=s' => \$basedir, + 'config=s' => \$raptor_config, 'append!' => \$append, 'help!' => \$help )); diff -r bb7bd27a0a82 -r 7efe68a9f0fe common/tools/raptor/summarize.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/tools/raptor/summarize.pl Wed Sep 02 18:30:18 2009 +0100 @@ -0,0 +1,311 @@ +# Copyright (c) 2009 Symbian Foundation Ltd +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Symbian Foundation Ltd - initial contribution. +# +# Contributors: +# +# Description: +# Generate an HTML summary of the Raptor build from the output of the raptor parser + +use strict; +use FindBin; +use lib $FindBin::Bin; +use Getopt::Long; + +my $raptorbitsdir = 0; +my $outputdir = '.'; +my $help = 0; +GetOptions(( + 'raptorbitsdir=s' => \$raptorbitsdir, + 'outputdir=s' => \$outputdir, + 'help!' => \$help +)); + +$help = 1 if (!$raptorbitsdir); + +if ($help) +{ + print "Generate an HTML summary of the Raptor build from a summary.csv file\n"; + print "Usage: perl summarize.pl --raptorbitsdir=DIR [--outputdir=DIR]\n"; + exit(0); +} + +$outputdir = "$outputdir/html"; + +system("rd /S /Q $outputdir") if (-d $outputdir); +mkdir ($outputdir); + +my $raptor_errors = {}; +my $raptor_warnings = {}; +my $raptor_unreciped = {}; +my $general_failures_num_by_severity = {}; +my $general_failures_by_category_severity = {}; +my $recipe_failures_num_by_severity = {}; +my $recipe_failures_by_package_severity = {}; +#my $severities = {}; +my @severities = ('critical', 'major', 'minor', 'unknown'); + +# READ SUMMARY.CSV FILE +my $csv_file = "$raptorbitsdir/summary.csv"; +my $csv_linenum = 0; +open(CSV, $csv_file); +while() +{ + $csv_linenum ++; + my $line = $_; + + if ($line =~ /([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)/) + { + my $failure = {}; + $failure->{category} = $1; + $failure->{subcategory} = $2; + $failure->{severity} = $3; + $failure->{config} = $4; + $failure->{component} = $5; + $failure->{phase} = $6; + $failure->{recipe} = $7; + $failure->{file} = $8; + $failure->{linenum} = $9; + + my $failure_package = ''; + + if (!$failure->{category}) + { + print "WARNING: summary line without a category at $csv_file line $csv_linenum. Skipping\n"; + next; + } + + if ($failure->{category} =~ m,^recipe_failure$,i and !$failure->{component}) + { + print "WARNING: recipe_failure with component field empty at $csv_file line $csv_linenum. Skipping\n"; + next; + } + if ($failure->{component}) + { + if ($failure->{component} =~ m,/((os|mw|app|tools|ostools|adaptation)/[^/]*),) + { + $failure_package = $1; + } + else + { + print "WARNING: summary line with wrong component path at $csv_file line $csv_linenum. Skipping\n"; + next; + } + } + + $failure->{subcategory} = 'uncategorized' if (!$failure->{subcategory}); + $failure->{severity} = 'unknown' if (!$failure->{severity}); + + # populate severities dynamically. + #$severities->{$failure->{severity}} = 1; + + # put failure items into their category container + if ($failure->{category} =~ /^raptor_(error|warning|unreciped)$/i) + { + $general_failures_num_by_severity->{$failure->{category}} = {} if (!defined $general_failures_num_by_severity->{$failure->{category}}); + my $general_failure = $general_failures_num_by_severity->{$failure->{category}}; + + if (!defined $general_failure->{$failure->{severity}}) + { + $general_failure->{$failure->{severity}} = 1; + } + else + { + $general_failure->{$failure->{severity}} ++; + } + + $general_failures_by_category_severity->{$failure->{category}} = {} if (!defined $general_failures_by_category_severity->{$failure->{category}}); + $general_failures_by_category_severity->{$failure->{category}}->{$failure->{severity}} = [] if (!defined $general_failures_by_category_severity->{$failure->{category}}->{$failure->{severity}}); + push(@{$general_failures_by_category_severity->{$failure->{category}}->{$failure->{severity}}}, $failure); + } + elsif ($failure->{category} =~ /^recipe_failure$/i) + { + $recipe_failures_num_by_severity->{$failure_package} = {} if (!defined $recipe_failures_num_by_severity->{$failure_package}); + my $package_failure = $recipe_failures_num_by_severity->{$failure_package}; + + if (!defined $package_failure->{$failure->{severity}}) + { + $package_failure->{$failure->{severity}} = 1; + } + else + { + $package_failure->{$failure->{severity}} ++; + } + + $recipe_failures_by_package_severity->{$failure_package} = {} if (!defined $recipe_failures_by_package_severity->{$failure_package}); + $recipe_failures_by_package_severity->{$failure_package}->{$failure->{severity}} = [] if (!defined $recipe_failures_by_package_severity->{$failure_package}->{$failure->{severity}}); + push(@{$recipe_failures_by_package_severity->{$failure_package}->{$failure->{severity}}}, $failure); + } + } + else + { + print "WARNING: line does not match expected format at $csv_file line $csv_linenum. Skipping\n"; + } +} +close(CSV); + +# PRINT HTML SUMMARY +my $aggregated_html = "$outputdir/index.html"; +open(AGGREGATED, ">$aggregated_html"); +print AGGREGATED "RAPTOR BUILD SUMMARY
\n"; + +print AGGREGATED "
GENERAL FAILURES
\n"; +print AGGREGATED "\n"; +my $tableheader = ""; +for (@severities) { $tableheader .= ""; } +$tableheader .= ""; +print AGGREGATED "$tableheader\n"; +for my $category (keys %{$general_failures_num_by_severity}) +{ + print_category_specific_summary($category, $general_failures_by_category_severity->{$category}); + my $categoryline = ""; + for (@severities) + { + my $failuresbyseverity = 0; + $failuresbyseverity = $general_failures_num_by_severity->{$category}->{$_} if (defined $general_failures_num_by_severity->{$category}->{$_}); + $categoryline .= ""; + } + $categoryline .= ""; + print AGGREGATED "$categoryline\n"; +} +print AGGREGATED "
category$_
$category$failuresbyseverity
\n"; +print AGGREGATED "
\n"; + +print AGGREGATED "
PACKGE-SPECIFIC FAILURES
\n"; +print AGGREGATED "\n"; +$tableheader = ""; +for (@severities) { $tableheader .= ""; } +$tableheader .= ""; +print AGGREGATED "$tableheader\n"; +for my $package (keys %{$recipe_failures_num_by_severity}) +{ + print_package_specific_summary($package, $recipe_failures_by_package_severity->{$package}); + my $packagesummaryhtml = $package; + $packagesummaryhtml =~ s,/,_,; + $packagesummaryhtml .= ".html"; + my $packageline = ""; + for (@severities) + { + my $failuresbyseverity = 0; + $failuresbyseverity = $recipe_failures_num_by_severity->{$package}->{$_} if (defined $recipe_failures_num_by_severity->{$package}->{$_}); + $packageline .= ""; + } + $packageline .= ""; + print AGGREGATED "$packageline\n"; +} +print AGGREGATED "
package$_
$package$failuresbyseverity
\n"; +close(AGGREGATED); + +translate_detail_files_to_html(); + + +sub print_category_specific_summary +{ + my ($category, $failures_by_severity) = @_; + + my $filenamebase = $category; + $filenamebase =~ s,/,_,; + + open(SPECIFIC, ">$outputdir/$filenamebase.html"); + print SPECIFIC "FAILURES FOR CATEGORY $category
\n"; + + for my $severity (@severities) + { + if (defined $failures_by_severity->{$severity}) + { + print SPECIFIC "
".uc($severity)."
\n"; + print SPECIFIC "\n"; + # $subcategory, $severity, $component, $phase, $recipe, $file, $line + my $tableheader = ""; + print SPECIFIC "$tableheader\n"; + + for my $failure (@{$failures_by_severity->{$severity}}) + { + my $failureline = ""; + $failureline .= ""; + $failureline .= ""; + $failureline .= ""; + print SPECIFIC "$failureline\n"; + } + + print SPECIFIC "
categoryconfigurationlog snippet
$failure->{subcategory}$failure->{config}item $failure->{linenum}
\n"; + print SPECIFIC "
\n"; + } + } + + close(SPECIFIC); +} + +sub print_package_specific_summary +{ + my ($package, $failures_by_severity) = @_; + + my $filenamebase = $package; + $filenamebase =~ s,/,_,; + + open(SPECIFIC, ">$outputdir/$filenamebase.html"); + print SPECIFIC "FAILURES FOR PACKAGE $package
\n"; + + for my $severity (@severities) + { + if (defined $failures_by_severity->{$severity}) + { + print SPECIFIC "
".uc($severity)."
\n"; + print SPECIFIC "\n"; + # $subcategory, $severity, $component, $phase, $recipe, $file, $line + my $tableheader = ""; + print SPECIFIC "$tableheader\n"; + + for my $failure (@{$failures_by_severity->{$severity}}) + { + my $failureline = ""; + $failureline .= ""; + $failureline .= ""; + $failureline .= ""; + $failureline .= ""; + $failureline .= ""; + $failureline .= ""; + print SPECIFIC "$failureline\n"; + } + + print SPECIFIC "
categoryconfigurationcomponentphaserecipelog snippet
$failure->{subcategory}$failure->{config}$failure->{component}$failure->{phase}$failure->{recipe}item $failure->{linenum}
\n"; + print SPECIFIC "
\n"; + } + } + + close(SPECIFIC); +} + +sub translate_detail_files_to_html +{ + opendir(DIR, $raptorbitsdir); + my @failurefiles = readdir(DIR); + closedir(DIR); + @failurefiles = grep(/\.txt$/, @failurefiles); + + for my $file (@failurefiles) + { + $file =~ /(.*)\.txt$/; + my $filenamebase = $1; + + my $filecontent = ''; + open(FILE, "$raptorbitsdir/$file"); + { + local $/=undef; + $filecontent = ; + } + close(FILE); + + $filecontent =~ s,---(failure_item_\d+)---,---$1---,g; + $filecontent = "
$filecontent
"; + + open(FILE, ">$outputdir/$filenamebase\_failures.html"); + print FILE $filecontent; + close(FILE); + } +} diff -r bb7bd27a0a82 -r 7efe68a9f0fe common/tools/summary/brag_script.pl --- a/common/tools/summary/brag_script.pl Wed Sep 02 18:28:55 2009 +0100 +++ b/common/tools/summary/brag_script.pl Wed Sep 02 18:30:18 2009 +0100 @@ -8,12 +8,15 @@ # Symbian Foundation Ltd - initial contribution. # # Contributors: -# +# Arnaud Lenoir +# Dario Sestito # Description: # Generate build summary with BRAG status use Getopt::Long; +use strict; +# Data used for the script my $buildid = ''; my $basedir = ''; my $help = 0; @@ -23,33 +26,648 @@ 'help!' => \$help )); +#--------------------------------------------------------------------------------------- +# Files locations + +# Command to build a package build +# F:\Dev\mercurial_local\bootstrap>perl build_package.pl --subproj=3k/mw/serviceapi + +#brag_script.pl location +#F:\Dev\mercurial_local\pkgbuild\common\tools\summary +# my package log files directory is: F:\fbf_job\serviceapi_3k.T014\output\logs +# my platform log files directory is: F:\Dev\fbf_job\platform_MCL.PDK-101\output\logs + +# F:\fbf_job\serviceapi_3k.T014\output\logs +# console_bootstrap_d+.txt empty file +# console_sfbuildall_d+.txt empty file +# serviceapi_3k.T014_ant_env.log + +# F:\fbf_project\serviceapi\sf-config +# console_sfbuildall_32428.txt +# console_sfprep_32428.txt +# console_sfsummary_32428.txt + +# F:\Dev\fbf_job\platform_MCL.PDK-101\output\logs +# platform_MCL.PDK-101_ant_env.log +# in _ant_env.log +# Do a search for env.ANT_CMD_LINE_ARGS to find out the type of build done as armv5, winscw, ... + +#--------------------------------------------------------------------------------------- + + +# If no parameters entered or help selected, display help $help = 1 if (!$buildid or !$basedir); if ($help) { print "Generate build summary with BRAG status\n"; print "Usage: perl brag_script.pl --buildid=ID --basedir=DIR\n"; + print "Typical command line from script location: \n"; exit(0); } +# End section related to help +# Determine build number $buildid =~ /^([^_]*)_([^.]*)\./; my $project = $1; my $codeline = $2; +# Define variable logdir my $logdir = "$basedir\\$buildid\\output\\logs"; +# General data information +print "\$builid = $buildid\n"; +print "\$basedir = $basedir\n"; +print "\$logdir = $logdir\n"; +print "\$project = $project\n"; +print "\$codeline = $codeline\n"; + +open(BUILDSUMMARYHTML, ">$logdir\\build_summary.html"); # !!!!! First time we are accessing the file build_summary.html, therefore create it or replace it, AFTR THAT WE NEED TO APPEND IT ONLY!!!!! + +print BUILDSUMMARYHTML "#********** build_summary.html **********#


"; + +close(BUILDSUMMARYHTML); # Close file build_summary.html + +# ***************************************************************************** +# Construction "GENERAL STATUS" page in build_summary.html +# ***************************************************************************** + +# Fill html file with buildir data +open(BUILDSUMMARYHTML, ">>$logdir\\build_summary.html"); # Open build_summary.html in APPEND MODE! + +print BUILDSUMMARYHTML "
#************************************************#

"; +print BUILDSUMMARYHTML "
#********** GENERAL STATUS starts here **********#

"; +print BUILDSUMMARYHTML "buildid_val=$buildid
"; +print BUILDSUMMARYHTML "basedir_val=$basedir
"; +print BUILDSUMMARYHTML "logdir_val=$logdir
"; +print BUILDSUMMARYHTML "project_val=$project
"; +print BUILDSUMMARYHTML "codeline_val=$codeline
"; + +# Calculate the number of files in the directory opendir(DIR, $logdir); my @dir_content = readdir(DIR); close(DIR); -#my @asSimilarDirs = grep(/^$sBaseName(\.|$)/, @asDirs); +my $nbfilesinlogdir = scalar(@dir_content); +print BUILDSUMMARYHTML "nbfilesinlogdir_val=$nbfilesinlogdir
"; + +# Define what we tried to build (target, winscw, armv5, TOOLS2, platform, package, ...) +# Information in the file buildid_ant_env.log that can be found in the log directory + +# F:\Dev\fbf_job\platform_MCL.PDK-101\output\logs +# platform_MCL.PDK-101_ant_env.log +# in _ant_env.log +# Do a search for env.ANT_CMD_LINE_ARGS to find out the type of build done as armv5, winscw, ... + +# Declare any variable that will need to be used globaly otherwise can't be used only between the curly brackets! +my $antenvlog = ""; + +#print "$logdir\\$buildid\_ant\_env\.log\n"; # Test to find out that _ and . need backslash up front to work +my $antenvlogfile = "$logdir\\$buildid\_ant\_env\.log"; +print "$antenvlogfile\n"; +open (ANTENVLOG, "<$antenvlogfile"); +{ + local $/=undef; # Technic used to get a file in one unique string accessible via a variable + $antenvlog = ; +} +close(ANTENVLOG); # Close file $buildid_ant_env.log + +# List of data to extract from the file $buildid_ant_env.log +#Fri Aug 14 17:04:54 BST 2009 on the second line of the file +#base_release.getenv_options=-I tools +#bom.log=\\\\v800008\\Builds01\\SF_builds\\platform\\builds\\MCL\\platform_MCL.PDK-101/logs/platform_MCL.PDK-101_bom.xml +#build.family=platform or package ->DONE!! +#build.id=platform_MCL.PDK-101 ->1st thing done in this script!! +#build.name=platform or serviceapi ->DONE!! +#build.number=PDK-101 ->DONE!! +#build.version=MCL.PDK-101 ->DONE!! +#core.build.version=MCL ->DONE!! +#diamonds.host=v800002.ad-sfpd.intra ->DONE!! +#env.ANT_CMD_LINE_ARGS=-Dhelium.dir "C\:\\Symbian\\Tools\\PDT_1.0\\helium" sf-build -Dbuild.drive m\: -Dsf.spec.job.codeline MCL -Dsf.spec.job.number PDK-101 -Dsf.project.location f\:\\\\Dev\\maintools\\build\\config\\foundation -Dsf.spec.job.rootdir f\:\\\\Dev\\fbf_job -Dsf.spec.sbs.config winscw_udeb.whatlog -Dsf.spec.test.sendpkg.enable false +#env.COMPUTERNAME=UK-ARNAUDL ->DONE!! +#env.USERNAME=arnaudl ->DONE!! +#publish.dir=\\\\v800008\\Builds01\\SF_builds\\platform\\builds\\MCL\\platform_MCL.PDK-101 ->DONE!! +#sf.spec.sbs.config=winscw ->DONE!! +#sbs.config=armv5 ->DONE!! +#sf.spec.baseline.enable=true ->DONE!! +#sf.spec.baseline.getenv_options=-I tools +#sf.spec.bccheck.baseline.s60.version=5.1 ->DONE!! +#sf.spec.bccheck.enable=false ->DONE!! +#sf.spec.build.target=all ->DONE!! +#sf.spec.build.testcode.enable=false ->DONE!! +#sf.spec.job.codeline=MCL ->Information already available under another name +#sf.spec.job.number=PDK-101 ->Information already available under another name +#sf.spec.sourcesync.enable=true ->DONE!! +#sf.spec.test.epocroot=D\:\\ATS3\\winscw_smoketest +#sf.spec.test.host.name=v800005 ->DONE!! +#sf.spec.toolsbaseline.getenv_options=-i emu +#user.country=GB ->Any use???? + + +# Data extraction +# Type of Line to read is: "env.COMPUTERNAME=UK-ARNAUDL" with a end of line \\n character + +# env.COMPUTERNAME=UK-ARNAUDL +if ($antenvlog =~ /env\.COMPUTERNAME=([^=]*)\n/) +{ + print "Computer name is: $1\n"; + print BUILDSUMMARYHTML "computername_val=$1
"; +} +else +{ + print "Computer name is unknown\n"; + print BUILDSUMMARYHTML "computername_val=?
"; +} + +#env.USERNAME=arnaudl +if ($antenvlog =~ /env\.USERNAME=([^=]*)\n/) +{ + print "User name is: $1\n"; + print BUILDSUMMARYHTML "username_val=$1
"; +} +else +{ + print "user name is unknown\n"; + print BUILDSUMMARYHTML "username_val=?
"; +} + +#build.family=platform or package +if ($antenvlog =~ /build\.family=([^=]*)\n/) +{ + print "Build family is: $1\n"; + print BUILDSUMMARYHTML "buildfamily_val=$1
"; +} +else +{ + print "Build family is unknow\n"; + print BUILDSUMMARYHTML "buildfamily_val=?
"; +} + +#build.name=platform or serviceapi +if ($antenvlog =~ /build\.name=([^=]*)\n/) +{ + print "Build name is: $1\n"; + print BUILDSUMMARYHTML "buildname_val=$1
"; +} +else +{ + print "Build name is unknow\n"; + print BUILDSUMMARYHTML "buildname_val=?
"; +} + +#diamonds.host=v800002.ad-sfpd.intra - Define the server used +if ($antenvlog =~ /diamonds\.host=([^=]*)\n/) +{ + print "Build server used is: $1\n"; + print BUILDSUMMARYHTML "buildserver_val=$1
"; +} +else +{ + print "Build server used is unknown\n"; + print BUILDSUMMARYHTML "buildserver_val=?
"; +} -my $nfiles = scalar(@dir_content); +#build.version=MCL.PDK-101 +if ($antenvlog =~ /build\.version=([^=]*)\n/) +{ + print "Build version is: $1\n"; + print BUILDSUMMARYHTML "buildversion_val=$1
"; +} +else +{ + print "Build version is unknown\n"; + print BUILDSUMMARYHTML "buildversion_val=?
"; +} + +#build.number=PDK-101 +if ($antenvlog =~ /build\.number=([^=]*)\n/) +{ + print "Build number is: $1\n"; + print BUILDSUMMARYHTML "buildnumber_val=$1
"; +} +else +{ + print "Build number is unknown\n"; + print BUILDSUMMARYHTML "buildnumber_val=?
"; +} + +#core.build.version=MCL +if ($antenvlog =~ /core\.build\.version=([^=]*)\n/) +{ + print "Core build version is: $1\n"; + print BUILDSUMMARYHTML "corebuildversion_val=$1
"; +} +else +{ + print "Core build version is unknown\n"; + print BUILDSUMMARYHTML "corebuildversion_val=?
"; +} + +#publish.dir=\\\\v800008\\Builds01\\SF_builds\\platform\\builds\\MCL\\platform_MCL.PDK-101 +if ($antenvlog =~ /publish\.dir=([^=]*)\n/) +{ + print "Publish directory is: $1\n"; + print BUILDSUMMARYHTML "publishdir_val=$1
"; +} +else +{ + print "Publish directory is unknown\n"; + print BUILDSUMMARYHTML "publishdir_val=?
"; +} + +#sf.spec.baseline.enable=true +if ($antenvlog =~ /sf\.spec\.baseline\.enable=([^=]*)\n/) +{ + print "Baseline retrieval enabled?:: $1\n"; + print BUILDSUMMARYHTML "baselineretrievalen_val=$1
"; +} +else +{ + print "Baseline retrieval status is unknown\n"; + print BUILDSUMMARYHTML "baselineretrievalen_val=?
"; +} + +#sf.spec.sourcesync.enable=true +if ($antenvlog =~ /sf\.spec\.sourcesync\.enable=([^=]*)\n/) +{ + print "Source code sync enabled?: $1\n"; + print BUILDSUMMARYHTML "sourcecodesyncen_val=$1
"; +} +else +{ + print "Source code sync status is unknown\n"; + print BUILDSUMMARYHTML "sourcecodesyncen_val=?
"; +} + +#sf.spec.build.testcode.enable=false +# Smoke tests????? SALT tests???? +if ($antenvlog =~ /sf\.spec\.build\.testcode\.enable=([^=]*)\n/) +{ + print "Tests execution enabled?: $1\n"; + print BUILDSUMMARYHTML "testexecutionen_val=$1
"; +} +else +{ + print "Tests execution status is unknown\n"; + print BUILDSUMMARYHTML "testexecutionen_val=?
"; +} + +#sf.spec.test.host.name=v800005 +if ($antenvlog =~ /sf\.spec\.test\.host\.name=([^=]*)\n/) +{ + print "Tests host server is: $1\n"; + print BUILDSUMMARYHTML "testhostserver_val=$1
"; +} +else +{ + print "Tests host server is unknown\n"; + print BUILDSUMMARYHTML "testhostserver_val=?
"; +} + +#sf.spec.bccheck.enable=false +if ($antenvlog =~ /sf\.spec\.bccheck\.enable=([^=]*)\n/) +{ + print "BCC check enabled?: $1\n"; + print BUILDSUMMARYHTML "bccchecken_val=$1
"; +} +else +{ + print "BCC check status is unknown\n"; + print BUILDSUMMARYHTML "bccchecken_val=?
"; +} + +#sf.spec.bccheck.baseline.s60.version=5.1 +if ($antenvlog =~ /sf\.spec\.bccheck\.baseline\.s60\.version=([^=]*)\n/) +{ + print "BCC check S60 baseline version used is: $1\n"; + print BUILDSUMMARYHTML "bccchecks60baselinever_val=$1
"; +} +else +{ + print "BCC check S60 baseline version used is unknown\n"; + print BUILDSUMMARYHTML "bccchecks60baselinever_val=?
"; +} -open(FILE, ">$logdir\\build_summary.html"); -print FILE "build summary
build id: $buildid
log files: $nfiles"; -close(FILE); +#sbs.config=armv5 possible values are armv5 (default) and winscw +if ($antenvlog =~ /sbs\.config=([^=]*)\n/) +{ + print "SBS config is: $1\n"; + print BUILDSUMMARYHTML "sbsconfig_val=$1
"; +} +else +{ + print "SBS config is unknown\n"; + print BUILDSUMMARYHTML "sbsconfig_val=?
"; +} + +#sf.spec.sbs.config=winscw +if ($antenvlog =~ /sf\.spec\.sbs\.config=([^=]*)\n/) +{ + print "Specific SBS config is: $1\n"; + print BUILDSUMMARYHTML "specsbsconfig_val=$1
"; +} +else +{ + print "Specific SBS config is unknown\n"; + print BUILDSUMMARYHTML "specsbsconfig_val=?
"; +} + +#sf.spec.build.target=all +if ($antenvlog =~ /sf\.spec\.build\.target=([^=]*)\n/) +{ + print "specific build target is: $1\n"; + print BUILDSUMMARYHTML "specificbuildtarget_val=$1
"; +} +else +{ + print "specific build target is: unknown\n"; + print BUILDSUMMARYHTML "specificbuildtarget_val=?
"; +} + +# Extract data to define the type build done +# Find out what is expected to be done and what has been actually done. +# name="WINS" abldTarget="wins" description="MSVC Compiler" +# name="WINS_REL" abldTarget="wins urel" description="MSVC Compiler" +# name="WINS_DEB" abldTarget="wins udeb" description="MSVC Compiler" +# name="WINSCW" abldTarget="winscw" description="CodeWarrior Compiler" +# name="WINSCW_REL" abldTarget="winscw urel" description="CodeWarrior Compiler" +# name="WINSCW_DEB" abldTarget="winscw udeb" description="CodeWarrior Compiler" +# name="TOOLS" abldTarget="tools" description="MSVC Compiler for Tools" +# name="TOOLS_REL" abldTarget="tools rel" description="MSVC Compiler for Tools Release mode only" +# name="TOOLS2" abldTarget="tools2" description="MinGW GCC Compiler for Tools" +# name="TOOLS2_REL" abldTarget="tools2 rel" description="MinGW GCC Compiler for Tools Release mode only" +# name="ARMV5" abldTarget="armv5" description="RVCT Compiler" +# name="ARMV5_REL" abldTarget="armv5 urel" description="RVCT Compiler" +# name="ARMV5_DEB" abldTarget="armv5 udeb" description="RVCT Compiler" + + +#------------- +# End data extraction from the file $buildid_ant_env.log +#------------- + +print BUILDSUMMARYHTML "
#********** GENERAL STATUS ends here **********#

"; + +close(BUILDSUMMARYHTML); # Close file build_summary.html + +# ***************************************************************************** +# Construction "SUMMARISE" page in build_summary.html +# ***************************************************************************** + +# Build info - Describe the completion of the diffrent steps in the build process + +# Fill html file with buildir data +open(BUILDSUMMARYHTML, ">>$logdir\\build_summary.html"); # Open build_summary.html in APPEND MODE! + +# Indicates beginning of the SUMMARISE section in the file +print BUILDSUMMARYHTML "
#*******************************************#

"; +print BUILDSUMMARYHTML "
#********** SUMMARISE starts here **********#

"; + +#{ # Used for local $/=undef +#local $/=undef; # indicates that the file will be put in one variable as one string +# +## Find the string "BUILD SUCCESSFUL" in the file console_bootstrap_\d+\.txt +## 1st open file +#open (CONSOLEBOOTSTRAP, "<$logdir\\console_bootstrap_\d+\.txt"); +# +#my $searchconsolebootstrap= ; # Copy the full file in one string because of /$=undef +# +#if ($searchconsolebootstrap =~ /BUILD SUCCESSFUL/){ +# print "Found string BUILD SUCCESSFUL\n"; +# print BUILDSUMMARYHTML "BuildSuccessful_val=Yes
"; +# } +# else { +# print "Can't Find string BUILD SUCCESSFUL\n"; +# print BUILDSUMMARYHTML "BuildSuccessful_val=No
"; +# } +# +#close (CONSOLEBOOTSTRAP); # Close file console_bootstrap_\d+\.txt +## End - Find the string "BUILD SUCCESSFUL" in the file console_bootstrap_\d+\.txt +# +## Check all the intermediate steps of the build process +## 1st open file console_sfbuildall_\d+\.txt +#open (CONSOLESFBUILDALL, "<$logdir\\console_sfbuildall_\d+\.txt"); +# +#my $searchconsolesfbuildall= ; # Copy the full file in one string because of /$=undef +# +#if ($searchconsolesfbuildall =~ /x/){ +# print "Found string x\n"; +# print BUILDSUMMARYHTML "x=Yes
"; +# } +# else { +# print "Can't Find string x\n"; +# print BUILDSUMMARYHTML "x=No
"; +# } +# +#close (CONSOLESFBUILDALL); # Close file console_sfbuildall_\d+\.txt +#} # End use for local $/=undef + +# Declare any variable that will need to be used globaly otherwise can't be used only between the curly brackets! +my $targettimeslog = ""; + +{ # Used for local $/=undef +local $/=undef; # indicates that the file will be put in one variable as one string + +# The file targetTimesLog.csv contains all the information relative to the build process including time needed for each steps (generated by helium script) +# This file is available whatever the build we want to do (platform or package) +my $targettimeslogfile = "$logdir\\targetTimesLog\.csv"; +print "$targettimeslogfile\n"; +open (TARGETTIMESLOG, "<$targettimeslogfile"); +{ + local $/=undef; # Technic used to get a file in one unique string accessible via a variable + $targettimeslog = ; +} +close (TARGETTIMESLOG); # Close file targetTimesLog.csv +} # End use for local $/=undef + +# Extract useful data from the file targettimeslog.csv +# step, time in second to do the operation + +# For sure +#"^preparation-getenv:$" - the baseline retrieval starts +#preparation-getenv,1417 +if ($targettimeslog =~ /(preparation-getenv[^,]*),(\d+[^,]*)\n/) +{ + print "Baseline retrieval started: OK \$1= $1, \$2= $2\n"; + print BUILDSUMMARYHTML "baselineretrievalstarted_val=yes
baselineretrievalstarted_duration=$2
"; +} +else +{ + print "Baseline retrieval started: NOK \$1= $1, \$2= $2\n"; + print BUILDSUMMARYHTML "baselineretrievalstarted_val=no
baselineretrievalstarted_duration=?
"; +} + +#"^\s+[exec] .+: done fetching environment$" - the baseline retrieval ends +#???? +#"^sf-prebuild-0:$" - the source code sync starts +#sf-prebuild-0,363 +if ($targettimeslog =~ /(sf-prebuild[^,]*),(\d+[^,]*)\n/) +{ + print "Source code sync started: OK \$1= $1, \$2= $2\n"; + print BUILDSUMMARYHTML "sourcecodestarted_val=yes
sourcecodestarted_duration=$2
"; +} +else +{ + print "Source code sync started: NOK \$1= $1, \$2= $2\n"; + print BUILDSUMMARYHTML "sourcecodestarted_val=no
sourcecodestarted_duration=?
"; +} + +#"^sf-unpack-rnd:$" - source code sync ends +#sf-unpack-rnd,20 +if ($targettimeslog =~ /(sf-unpack[^,]*),(\d+[^,]*)\n/) +{ + print "Source code sync ended: OK \$1= $1, \$2= $2\n"; + print BUILDSUMMARYHTML "sourcecodeended_val=yes
sourcecodeended_duration=$2
"; +} +else +{ + print "Source code sync ended: NOK \$1= $1, \$2= $2\n"; + print BUILDSUMMARYHTML "sourcecodeended_val=no
sourcecodeended_duration=?
"; +} + +#"^sf-compile:$" - compilation starts +#sf-compile,3 +if ($targettimeslog =~ /(sf-compile[^,]*),(\d+[^,]*)\n/) +{ + print "Compilation startd: OK \$1= $1, \$2= $2\n"; + print BUILDSUMMARYHTML "commpilationstarted_val=yes
commpilationstarted_duration=$2
"; +} +else +{ + print "Compilation startd: NOK \$1= $1, \$2= $2\n"; + print BUILDSUMMARYHTML "commpilationstarted_val=no
commpilationstarted_duration=?
"; +} + +#"^sf-postbuild:$" - compilation ends +#sf-postbuild,0 +if ($targettimeslog =~ /(sf-postbuild[^,]*),(\d+[^,]*)\n/) +{ + print "Compilation ended: OK \$1= $1, \$2= $2\n"; + print BUILDSUMMARYHTML "compilationended_val=yes
compilationended_duration=$2
"; +} +else +{ + print "Compilation ended: NOK \$1= $1, \$2= $2\n"; + print BUILDSUMMARYHTML "compilationended_val=no
compilationended_duration=?
"; +} + +#"^sf-run-analysis:$" - analysis starts +#sf-run-analysis-raptor,1 +if ($targettimeslog =~ /(sf-run-analysis-raptor[^,]*),(\d+[^,]*)\n/) +{ + print "Analysis started: OK \$1= $1, \$2= $2\n"; + print BUILDSUMMARYHTML "analysisstarted_val=yes
analysisstarted_duration=$2
"; +} +else +{ + print "Analysis started: NOK \$1= $1, \$2= $2\n"; + print BUILDSUMMARYHTML "analysisstarted_val=no
analysisstarted_duration=?
"; +} + +# Maybe???????? + +#"^sf-zip-logs:$" - analysis ends +#sf-zip-content,8 +#????? + + +#"^publish:$" - publication starts +#???? + +#"\[copy\] Copying \d+ files to \\\\v800008\\Builds01\\SF_builds\\" - publication ends +#???? + +#BRAG +#sf-summary,5 +#????? + +# End - Check all the intermediate steps of the build process + +# Copy Raptor summarise by DarioS +{ +local $/=undef; # indicates that the file will be put in one variable as one string +open(RAPTORSUMINDEX, "<$logdir\\html\\index.html"); + +my $filecontent = ; + + +# Like index.html will be called from the build_summary.html file, this means that is not calling the sub html file from the same directory \html. +# When copy index.html in the file build_summary.html, we need to include the path to \html directory +# We have: +# file:///F:/fbf_job/serviceapi_3k.T014/output/logs/raptor_unreciped.html +# We need: +# file:///F:/fbf_job/serviceapi_3k.T014/output/logs/html/raptor_unreciped.html +# This means we need to go from: +# raptor_unreciped001900 +# To: +# raptor_unreciped001900 +$filecontent =~ s/href=\'/href=\'html\\/ig; + +print BUILDSUMMARYHTML "
$filecontent
"; # copy the content of the index.html file into the build_summary.html file. + +close (RAPTORSUMINDEX); +} + +# Copy html files for raptor summarise to bishare +# options used for xcopy +# /E -> Copies directories and subdirectories, including empty ones. +# /F -> Displays full source and destination file names while copying. +# /I -> If destination does not exist and copying more than one file, assumes that destination must be a directory. +my $copy_html = "xcopy $logdir\\html \\\\bishare\\sf_builds\\$project\\builds\\$codeline\\$buildid\\html \/E \/F \/I"; +print "Exec: $copy_html\n"; +system($copy_html); + + +# Indicates end of the SUMMARISE section in the file +print BUILDSUMMARYHTML "
#********** SUMMARISE ends here **********#

"; + +close(BUILDSUMMARYHTML); # Close build_summary.html + +# End - Build info - Describe the completion of the diffrent steps in the build process + + +# ***************************************************************************** +# Construction "DATA BREAKDOWN" page in build_summary.html +# ***************************************************************************** + +# Hyperlink to log files +open(BUILDSUMMARYHTML, ">>$logdir\\build_summary.html"); # Open build_summary.html in APPEND MODE! + +# Indicates beginning of DATA BREAKDOWN section in the file +print BUILDSUMMARYHTML "
#************************************************#

"; +print BUILDSUMMARYHTML "
#********** DATA BREAKDOWN starts here **********#

"; + + +# Get tree for the directory where the log files are (bishare probably the best place???) +# Should be already exported there, but maybe in a zip file) +# Extract each file with directory, then create a hyperlink to that file to make sure that user can click on the link and open the file! + + +#ex: platform_MCL.PDK-101_summary.log.xml +#######print FILE "buildid_summary.log.xml=$buildid_summary.log.xml
"; + +# example of html hyperlink +#
Scan for S60 distribution policy files (1162)
+#SBS: Error (4)
+#Total (1)
+#WINSCW ( EMULATOR ) + +# All log files hyperlink have been created, close build_summary.html + + +# Indicates end of DATA BREAKDOWN section in the file +print BUILDSUMMARYHTML "
#********** DATA BREAKDOWN ends here **********#

"; +print BUILDSUMMARYHTML "
#********** summary_build.html ends here ******#

"; + +close(BUILDSUMMARYHTML); # Close file build_summary.html + + + +# ***************************************************************************** +# Final step, copy build_summary.html to \\bishare drive +# ***************************************************************************** + +# Copy html file to bishare my $copy_cmd = "copy $logdir\\build_summary.html \\\\bishare\\sf_builds\\$project\\builds\\$codeline\\$buildid"; print "Exec: $copy_cmd\n"; system($copy_cmd);