use strict;
use warnings;
+use File::Spec;
use HTML::Entities;
open (LOG, '<', "LOG");
my (@steps);
my ($new_page) = 0;
my ($result) = "failure";
+my @dirstack;
while (<LOG>) {
my $ln = $.;
chomp;
if (/^\f$/) {
$new_page = 1;
+ @dirstack = ();
print LOG_HTML "</pre><hr><pre>\n";
next;
}
+ if (/Entering directory `(.*)'$/) {
+ push (@dirstack, $1);
+ } elsif (/Leaving directory `(.*)'$/) {
+ pop (@dirstack);
+ }
+
my $log_class;
if ($new_page) {
$new_page = 0;
$d{DIAGNOSTIC} = lc ($diagnostic);
$d{MESSAGE} = $_;
$d{LN} = $ln;
+
+ if (@dirstack && (my ($file, $line) = /^([^\s:]+):(\d+):\s/)) {
+ $file = File::Spec->rel2abs ($file, $dirstack[$#dirstack]);
+ my (@path) = grep ($_ ne '' && $_ ne '.', split ('/', $file));
+ for (my $i = 0; $i < $#path; ) {
+ if ($path[$i + 1] eq '..') {
+ splice (@path, $i, 2);
+ } else {
+ $i++;
+ }
+ }
+
+ $d{LINE} = $line;
+ $d{FILE} = join ('/', @path);
+ }
push (@{$steps[$#steps]{CHILDREN}}, \%d);
$log_class = "$diagnostic";
print INDEX "<p class=\"$c->{DIAGNOSTIC}\">";
print INDEX "<a href=\"log.html#$c->{LN}\">";
print INDEX encode_entities ($c->{MESSAGE});
- print INDEX "</a></p>\n";
+ print INDEX "</a>";
+ if (exists $c->{FILE}) {
+ print INDEX " in $c->{FILE}";
+ }
+ print INDEX "</p>\n";
} else {
print INDEX "<p>→ <a href=\"", encode_entities ($c->{HREF}), "\">";
print INDEX encode_entities ($c->{PRODUCT});