: # use perl                                  -*- mode: Perl; -*-
        eval 'exec perl -S $0 "$@"'
                if $runnning_under_some_shell;

# Author: Petter Reinholdtsen <pere@td.org.uit.no>
# Date:   2000-09-28
#
# 'webreport' creates a nicely formatted HTML report and application
# summary.
#
# Requires Text::Boilerplate, available from CPAN.  It was tested with
# version 0.08.

BEGIN {
    $prefix='/store' ;
    unshift( @INC, "$prefix/etc/internal" ) ;
    unshift( @INC, "$prefix/lib/perl5/site_perl" ) ;
    unshift( @INC, "." ) ;
}

my ($url, $version) = ('http://www.hungry.com/~pere/', '1.0');

my $dir = $ARGV[0] || die "usage: $0 <directory>";

my $report = "$dir/index.html";

my $templatedir = "$prefix/share/webreport";

require "lib/client.pl" ;
require "lib/conffile.pl" ;
require "lib/config.pl" ;
require "lib/genarchs.pl" ;
require "lib/indata.pl" ;
require "lib/master.pl" ;
require "lib/output.pl" ;
require "lib/regist.pl" ;
require "lib/registerit.pl" ;
require "lib/runit.pl" ;
require "lib/shadowit.pl" ;
require "lib/slaveit.pl" ;
require "lib/support.pl" ;
require "lib/utils.pl" ;

use Text::Boilerplate;

my $reporttemplate = Text::Boilerplate->load("$templatedir/report.tmpl");
my $apptemplate    = Text::Boilerplate->load("$templatedir/app.tmpl");

&'readgenarchs ;
&'readconffile("$config") ;

$'myself = &mymachine() ;

$'debug = $'WARNINGS | $'INFO ;
$'debug = $'WARNINGS | $'INFO | $'TRACE if (-t) ;

# Setup finished

@mainarchs = &uniq( values( %mainark )) ;

@target = @'repfora ;
$pos = 0 ;
undef( %apos ) ;
for ( @target )
{
    $apos{$_} = $pos++ ;
#   $pos++ if ($pos==5) ;
#   print "Position of $_ is $apos{$_}\n" ;
}

# convert target architectures to vertical text
foreach (@target) {
    my $t = $_;
    $t =~ s//$1<BR>/g;
    push(@vertarget, {'target' => $t});
}

$var = 1  ;

&initappinfo ;

for $appl ( sort keys %AIsts )
{
   ( $se, $junk ) = split(' ', $AImasst{$appl} ) ;
   ( $se, $junk ) = split(' ', $AIsts{$appl} )   unless $se ;

   &'output('Trace',"processing\n", '', $se, $appl );

   die "Internal error in report: Store '$se' is unknown\n"
       unless ( $'isaknownstore{$se} );
   $applmd = ".$appl";
   $applmd = $appl if ( -d "$'storedir{$se}/$appl" ) ;

   $bitfld = "----- -----" ;
   &'readregist( $se, $applmd ) ;
   &'multi_version_parse() ;

   $appdir = "$'storedir{$se}/$applmd";
   my $files = extract_files($appdir, $regist{'version'});

   @supp = split('/', &'genintersect(join('/',values %'origmultisupport )));
   for ( @supp )
   {
       # Handle Side effects.
       $genarchs'sto = $se ;
       $genarchs'app = $appl ;
       undef $genarchs'ver ;
       ( $junk, $d, $a, $rest, $junk ) = &genarchs'getarch("\@$_");
       for $t ( @target )
       {
         if ($genarchs'interval{'arch',$a,'arch',$t}) {
            $arch[$apos{$t}] = '*';
         } elsif ($'genarchs'interval{'arch',$t,'arch',$a}) {
            $arch[$apos{$t}] = '+';
         } else {
            $arch[$apos{$t}] = ' ';
         }
       }
   }

   my $filename = "$dir/$appl.html";

   open(APPINFO, "> $filename") || die "Could not open $filename";
   print APPINFO $apptemplate->fill({
                'shortname'        => $appl,
                'longname'        => $regist{'longname'},
                'releaselevels'   => $regist{'releaselevels'},
                'progtype'        => $regist{'progtype'},
                'licensetype'     => $regist{'licensetype'},
                'signature'       => $regist{'signature'},
                'version'         => $regist{'version'},
                'desc'            => $regist{'descr'},
                'sec_description' => $regist{'sec_description'},
                'source'          => $regist{'source'},
                'manpages'        => $regist{'manpages'},
                'manuals'         => $regist{'manuals'},
                'emacsinfo'       => $regist{'emacsinfo'},
                'onlinehelp'      => $regist{'onlinehelp'},
                'examples  '      => $regist{'examples'},
                'sec_mastervlines' =>$regist{'sec_mastervlines'},
                'sec_log'         => $regist{'sec_log'},
                'files'           => $files
               });
   close(APPINFO);

   my ($progtype, $licensetype, $signature) =
      ($regist{'progtype'}, $regist{'licensetype'}, $regist{'signature'});

   $progtype     =~ s/\s.*// ;
   $licensetype  =~ s/\s.*// ;
   $signature    =~ s/\s.*// ;

   push(@apps, {
                'shortname'   => $appl,
                'longname'    => $regist{'longname'} ?
                                     $regist{'longname'} : $appl,
                'progtype'    => $progtype,
                'licensetype' => $licensetype,
                'signature'   => $signature,
                'version'     => $regist{'version'},
                'desc'        => $regist{'descr'}
               });
}

@apps = sort { $a->{'longname'} cmp $b->{'longname'} } @apps;

open(REPORT, ">$report") || die "Couldn't open $report\n";

print REPORT $reporttemplate->fill({
    'myurl'       => $url,
    'myversion'   => $version,

    'apps' => \@apps
    });

close(REPORT);

exit 0 ;

sub extract_files {
    my ($appdir, $version) = @_;
    my %files;
    my $filename = "$appdir/summary.$version";
    open(SUMMARY, "< $filename") || return;
    while (<SUMMARY>) {
        chomp;
        s/@.*$//; # Remove architecture info
        $files{$_} = 1;

        # Throw away file info
        $_ = <SUMMARY>;
    }
    close(SUMMARY);
    return join("\n", sort keys %files);
}
