#!/usr/bin/perl
# debbugsconfig: copies debbugs configuration files from templates, and
#                creates documentation in HTML and text
# Copyright (C) 1999 Darren Benham
# Copyright (C) 2000 Josip Rodin
# Licensed under the version 2 of the GNU General Public License as
# published by the Free Software Foundation

use POSIX qw(strftime);

if (@ARGV) {
  print STDOUT <<EOF;
Usage: $0

debbugsconfig will copy basic debbugs configuration files from templates
if they don't exist.

It will also create BTS user documentation in HTML and text.

EOF
  exit(0);
}

$gConfigDir = "/etc/debbugs" if (!defined($gConfigDir));
&template("config", $gConfigDir);
require "$gConfigDir/config";
unshift @INC, $gConfigDir;

&template("text", $gConfigDir);
require "text";

&template("Maintainers", $gConfigDir);
&template("Maintainers.override", $gConfigDir);
&template("pseudo-packages.description", $gConfigDir);
&template("sources", "$gConfigDir/indices");

&template("nextnumber", $gSpoolDir);
&touch("$gSpoolDir/index.archive.realtime");
&touch("$gSpoolDir/index.db.realtime");

# stuff used when testing (comment out the above)
#unshift @INC, "../";
#require "../scripts/config.in";
#require "../scripts/text.in";
#$gWebDir = "gWebDir";
#$gDocDir = "gWebDir";

my $dtime = strftime "%a, %e %b %Y %T UTC", localtime;
$gHTMLTail =~ s/SUBSTITUTE_DTIME/$dtime/;

print "Creating files in $gWebDir:\n";
require('html/index.html.in');
&writefiles ('index', '', $gIndexHtml );
require('html/Access.html.in');
&writefiles ('Access', 'bug-log-access', $gAccessHtml );
require('html/Developer.html.in');
&writefiles ('Developer', 'bug-maint-info', $gDeveloperHtml );
require('html/Reporting.html.in');
&writefiles ('Reporting', 'bug-reporting', $gReportingHtml );
require('html/server-control.html.in');
&writefiles ('server-control', 'bug-maint-mailcontrol', $gControlHtml );
require('html/server-refcard.html.in');
&writefiles ('server-refcard', 'bug-mailserver-refcard', $gRefcardHtml );
require('html/server-request.html.in');
&writefiles ('server-request', 'bug-log-mailserver', $gRequestHtml );
print "\n";

exit(0);

# -------------------------------------------------------------------------- #

sub template {
  my ($name, $destdir) = @_;
  if (! -f "$destdir/$name") {
  system("cp /usr/share/debbugs/examples/$name $destdir/$name") == 0 ||
	die "$!";
  print "created $destdir/$name from template.\n";
  }
} 

sub touch {
  my $name = shift;
  unless (-f $name) {
    open TOUCH, ">> $name" or die "open $name: $!";
    close TOUCH;
    print "created empty $name.\n";
  }
}

sub writefiles {
  local ($html, $text, $name) = @_;
# first HTML
  unlink("$gWebDir/$html.html");
  open(DEST, ">$gWebDir/$html.html") || die "\n$gWebDir/$html.html: $!";
  print DEST $name;
  close(DEST);
  print "$html.html ";
# now text
  return if ($text eq ""); # for index.html
# This should be done with pipes instead of a temporary files, but lynx
# doesn't read HTML from stdin :/
  open(DEST, ">$gDocDir/$text.html") || die "\n$gDocDir/$text.html: $!";
  $name =~ s,\nOther pages:\n.*?<hr>,,si;
  print DEST $name;
  close(DEST);
  unlink("$gDocDir/$text.txt");
  $ENV{'HOME'} = "/tmp";
  $ENV{'TERM'} = "linux";
  if (-x "/usr/bin/links") {
    system ("rm -rf /tmp/.links/") == 0 || die;
    system ("links -dump $gDocDir/$text.html > $gDocDir/$text.txt") == 0 ||
      die "\nunable to write $gDocDir/$text.txt\n";
    system ("rm -rf /tmp/.links/");
  } elsif (-x "/usr/bin/lynx") {
    system ("lynx -nolist -dump -cfg=/dev/null $gDocDir/$text.html > $gDocDir/$text.txt") == 0 ||
      die "\nunable to write $gDocDir/$text.txt\n";
  } else {
    print "unable to write text versions of the HTMLs!";
    print "if you need them, install links or lynx and run debbugsconfig again";
    return;
  }
  unlink("$gDocDir/$text.html") || die "\ncan't remove temporary file $gDocDir/$text.html: $!";
  print "$text.txt ";
}
