#!/usr/bin/perl -w
#
# Init script for pb's website
#

# Export documentation to generate what is needed
use ProjectBuilder::Base;
use ProjectBuilder::Filter;
use ProjectBuilder::CMS;
use ProjectBuilder::VCS;
use ProjectBuilder::Env;
use File::Basename;
use File::Copy;
use Pod::Man;
use Pod::Html qw(pod2html);
use Pod::Text;
use Data::Dumper;

my @MAN = (
	"pb-modules/lib/ProjectBuilder/Base.pm",
	"pb-modules/lib/ProjectBuilder/Conf.pm",
	"pb-modules/lib/ProjectBuilder/VCS.pm",
	"pb-modules/lib/ProjectBuilder/Distribution.pm",
	"pb-modules/lib/ProjectBuilder/Env.pm",
	"pb-modules/lib/ProjectBuilder/VE.pm",
	"pb/lib/ProjectBuilder/Changelog.pm",
	"pb/lib/ProjectBuilder/CMS.pm",
	"pb/lib/ProjectBuilder/Filter.pm",
	"pb/bin/pb",
	"rpmbootstrap/bin/rpmbootstrap",
	"pb-modules/bin/pbdistrocheck",
	"pb-modules/bin/pbgetparam",
	"pb-modules/etc/pb.conf.pod",
);

my @DOC = (
	"LabProject-Builder.org.odt", 
	"LabProject-Builder.org.pdf",
	"One_Source_for_Multiple_Platforms_Sol_Brief_final.pdf"
);

pb_temp_init();
pb_mkdir_p("docs");
pb_mkdir_p("tmp");
my $pb;
$pb->{'pkg'} = "PBPKG";
$pb->{'ver'} = "PBVER";
$pb->{'tag'} = "PBTAG";
$pb->{'rev'} = "PBREV";
$pb->{'proj'} = "PBPROJ";
$pb->{'date'} = "PBDATE";
$pb->{'repo'} = "PBREPO";
$pb->{'extdir'} = "PBEXTDIR";
$pb->{'realpkg'} = "PBREALPKG";

# Action needs to be pbinit
my ($filteredfiles, $supfiles, $defpkgdir, $extpkgdir) = pb_env_init($pb->{'proj'},undef,"pbinit");
my ($scheme,$uri) = pb_cms_init(undef);

# export doc
foreach my $f (@DOC) {
	pb_vcs_export($uri,"$ENV{'PBDIR'}/pb-doc/$f","docs");
}
# using pod from files
foreach my $f (@MAN) {
	pb_vcs_export($uri,"$ENV{'PBDIR'}/$f","tmp");
}

# call filter_file here
my $ptr = pb_get_filters($pb->{'pkg'});
open(MANHTML,"> docs/pb_man_pages.html") || die "Unable to open docs/pb_man_pages.html";
print MANHTML "	<ul>\n";
chdir("tmp");
foreach my $f (<*>) {
	print MANHTML "		<li>$f</li>\n";
	print MANHTML "		<ul>\n";
	pb_log(0,"\nProcessing $f\n");
	pb_log(0,"==========================\n");
	pb_filter_file_inplace($ptr,$f,$pb);
	my $ext = 1;
	if ($f =~ /\.pod/) {
		$ext = 5;
	} elsif ($f =~ /\.pm/) {
		$ext = 3;
	}
	# generate man pages
	pb_log(0,"Generating man pages\n");
	my $parser = Pod::Man->new (release => $VERSION, section => $ext);
	$parser->parse_from_file ("$f", "$f.$ext");
	# generate html pages
	pb_log(0,"Generating HTML pages\n");
	pod2html(
			"--htmlroot=/docs",
			"--recurse",
			"--header",
			"--title=$f man page",
			"--backlink",
			"--infile=$f",
			"--outfile=../docs/$f.$ext.html");
	print MANHTML "			<li>A <a href=\"/docs/$f.$ext.html\" target=\"_blank\">HTML</a></li>\n";
	# generate text pages
	pb_log(0,"Generating text pages\n");
	$parser = Pod::Text->new (sentence => 0, width => 78);
	$parser->parse_from_file ("$f","../docs/$f.$ext.txt");
	print MANHTML "			<li>A <a href=\"/docs/$f.$ext.txt\" target=\"_blank\">Text</a></li>\n";
	# generate ps pages
	#system("groff -Tps -mandoc $f.$ext > ../docs/$f.$ext.ps");
	# Use noredir here because is doesn't redirect to the right place without
	pb_system("groff -Tps -mandoc $f.$ext > ../docs/$f.$ext.ps","Generating Postscript pages","noredir");
	print MANHTML "			<li>A <a href=\"/docs/$f.$ext.ps\" target=\"_blank\">PostScript</a></li>\n";
	# generate pdf pages
	pb_system("ps2pdf ../docs/$f.$ext.ps","Generating PDF pages");
	move("$f.$ext.pdf","../docs/$f.$ext.pdf");
	print MANHTML "			<li>A <a href=\"/docs/$f.$ext.pdf\" target=\"_blank\">PDF</a></li>\n";
	print MANHTML "		</ul>\n";
}
print MANHTML "	</ul>\n";
close(MANHTML);
chdir("..");
pb_rm_rf("tmp");
