#!/usr/bin/perl -w

push @INC, "/mit/krbdev/testing";
require 'util.pl';

$verbose = 1;
$always_rebuild = 0;

@configs = <$dataroot/*/*>;	# root/version/configname

foreach $conf (@configs) {
    next if (! -d $conf);
    $cname = $conf;
    $cname =~ s,.*/,,;
    $version = $conf;
    $version =~ s,/[^/]*$,,;
    $version =~ s,.*/,,;
    my ($kdir);
    if ($version eq "current") {
	$kdir = "krb5-current";
    } else {
	$kdir = "krb5-${version}-current";
    }
    print STDERR "Processing $version $cname ...\n" if $verbose;
    foreach $date (<$conf/20*>) {
	next if (! -d $date);
	$d = $date;
	$d =~ s,.*/,,;
#	print STDERR "Processing $version $cname $d...\n" if $verbose;
	if ($always_rebuild || ! -r "$date/index.html") {
	    print STDERR "  (rebuilding index page for $d)\n" if $verbose;
	    &make_status_page($version,$cname,$d);
	}

	my($s) = "";
	if (-r "$date/status") {
	    open STATUSFILE, "<$date/status";
	    while (<STATUSFILE>) { $s .= $_; }
	    close STATUSFILE;
	    chop $s;
	}
	if ($s eq "success"
	    && ! -r "$date/$kdir/src/tests/dejagnu/dbg.log"
	    && ! -r "$date/tests!dejagnu!dbg.log.txtgz") {
	    $s .= "<br>(no dejagnu)";
	}
#	print STDERR "\t& record_result($version, $cname, $d, $s);\n";
	&record_result($version, $cname, $d, $s);
    }
}

# Now create indices:
# per platform: date x release => status
# top level:
#   one table per release:
#     platform x date => status
#
# In each index, each table, if a key (configuration, etc) has no values
# associated, then leave it out.


print STDERR "Processing per-configuration data...\n" if $verbose;
foreach $conf (keys %result_by_cvd) {
    print STDERR "  $conf ...\n" if $verbose;
    if (! -d "$dataroot/by_config") {
	mkdir "$dataroot/by_config";
    }
    open CONFPAGE, ">$dataroot/by_config/$conf.html.new";
    print CONFPAGE "<html>\n<head>\n<title>\nKerberos snapshot build status page for $conf\n</title>\n</head>\n<body>\n";
    print CONFPAGE "<center><h1>Kerberos snapshot build status page for $conf</h1></center>\n";
    @versions = sort keys %{$result_by_cvd{$conf}};
    @dates = ();
    foreach $v (@versions) {
	push @dates, keys %{$result_by_cvd{$conf}{$v}};
    }
    @dates = reverse sort &uniq(@dates);
    print CONFPAGE "<table align=center border=1><tr><th>date";
    foreach $v (@versions) { print CONFPAGE "<th>krb5-$v"; }
    print CONFPAGE "\n";
    foreach $d (@dates) {
	print CONFPAGE "<tr><td>$d";
	foreach $v (@versions) {
	    print CONFPAGE "<td align=center>";
	    if (defined($result_by_cvd{$conf}{$v}{$d})) {
		$r = $result_by_cvd{$conf}{$v}{$d};
		$p = $pathname{$v}{$conf}{$d};
		print CONFPAGE "<a href=\"../$p/index.html\">$r</a>";
	    }
	}
	print CONFPAGE "\n";
    }
    print CONFPAGE "</table>\n";
#    &make_dir_page_link_table(\*CONFPAGE, "index.html", reverse sort @dates);
    close CONFPAGE;
    rename "$dataroot/by_config/$conf.html.new", "$dataroot/by_config/$conf.html";
}

print STDERR "Processing new top page ($dataroot/index.html) ...\n" if $verbose;

open TOPPAGE, ">$dataroot/index.html";
print TOPPAGE "<html><head><title>Kerberos snapshot build status</title><meta http-equiv=refresh content=\"3600\"></head><body><center><h1>Kerberos snapshot build status</h1></center>\n";

foreach $v (reverse sort keys %result_by_vcd) {
    @dates = ();
    foreach $c (keys %{$result_by_vcd{$v}}) {
	push @dates, keys %{$result_by_vcd{$v}{$c}};
    }
    @dates = reverse sort &uniq (@dates);
    if ($#dates > 5) { @dates = @dates[0..5]; }
    print TOPPAGE "<P align=center>results for branch \"$v\":\n";
    print TOPPAGE "<table align=center border=1>\n";
    print TOPPAGE "<tr><th align=center>Configuration";
    foreach $d (@dates) { print TOPPAGE "<th>$d"; }
    print TOPPAGE "\n";
    foreach $c (sort keys %{$result_by_vcd{$v}}) {
	print TOPPAGE "<tr><td align=center><a href=\"by_config/$c.html\">$c</a>";
	foreach $d (@dates) {
	    if (defined $result_by_vcd{$v}{$c}{$d}) {
		$r = $result_by_vcd{$v}{$c}{$d};
		$p = $pathname{$v}{$c}{$d};
		print TOPPAGE "\n<td align=center><a href=\"$p/index.html\">$r</a>";
	    } else {
		print TOPPAGE "<td>";
	    }
	}
	print TOPPAGE "\n";
    }
    print TOPPAGE "</table>\n";
}

# Now, tables of notes etc
print TOPPAGE "<p>\n";
print TOPPAGE "<table><tr><td width=\"50%\">\n";
print TOPPAGE "<table align=left border=1 borderwidth=1>\n";
print TOPPAGE "<th>Build status pages by platform</th>\n";
$last = "";
foreach $cname (sort keys %result_by_cvd) {
    my ($c) = $cname;
    $c =~ s/-[^-]*$//;
    if ($last ne $c) { print TOPPAGE "<tr><td align=center>\n"; }
    print TOPPAGE "<a href=\"by_config/$cname.html\">$cname</a>\n";
    $last = $c;
}
print TOPPAGE "</table>\n";
print TOPPAGE "<td width=\"50%\">\n";
print TOPPAGE "<table align=right border=1>\n";
print TOPPAGE "<th colspan=2 align=center>Notes</th>\n";
print TOPPAGE "<tr><td align=center>trunk static builds<td align=center>not currently supported\n";
#print TOPPAGE "<tr><td align=center>trunk shared builds<td align=center>test suites broken after Novell updates\n";
#print TOPPAGE "<tr><td align=center>ia64-linux-redhat<td align=center>gcc-2.96 bug with structure passing\n";
#print TOPPAGE "<tr><td align=center>ia64-linux-debian<td align=center>using gcc-3.2\n";
print TOPPAGE "<tr><td align=center>dcl-sparcv9<td align=center>using sunsoft v12 compiler\n";
#print TOPPAGE "<tr><td align=center>solaris-sparcv9<td align=center>untested currently\n";
print TOPPAGE "</table>\n";
print TOPPAGE "</table>\n";
print TOPPAGE "</body></html>\n";
close TOPPAGE;
