The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w

# This file is part of the build tools for Win32::GUI
# It expects to be run in the same directory as the make
# command is run from, and performs the following functions:
# (1) converts all POD documentation in the blib/lib directory, and puts
#     it in the blib/html/site/lib directory
# (2) Copies any GIF files from the document source to the relavent location
#     in the blib/html tree
# (3) converts all POD documentation in the blib/script directory, and puts
#     it in the blib/html/bin directory

# it is typically invoked as
#  make htmldocs
# or automatically as part of the ppm distribution build
# process
#
# Author: Robert May , rmay@popeslane.clara.co.uk
# $Id: doHTMLDocs.pl,v 1.3 2006/07/16 11:09:32 robertemay Exp $

use strict;
use warnings;

use BuildTools;
use Pod::Html;
use Pod::Find  qw(pod_find);
use File::Path qw(mkpath);
use File::Spec qw();
use File::Find qw(find);
use File::Copy qw(copy);

my $DEBUG = 0;

my $srcdir = "blib/lib";
my $srcbindir = "blib/script";
my $destrootdir  = "blib/html";
my $destsubdir = "site/lib";
my $destbinsubdir = "bin";
my $imgsrcdir = "docs";

print BuildTools::macro_subst(
    "Converting POD documentation to HTML for Win32::GUI v__W32G_VERSION__ on __W32G_DATE__\n"
);

# recursively traverse everything inside the source directory, find .pod files
# convert to html and put in a corresponding location in the blib/html directory
doHtml($srcdir, $destrootdir, $destsubdir);
doHtml($srcbindir, $destrootdir, $destbinsubdir);

# remove pod2html cache files; 5.6 uses ".x~~" and 5.8 uses ".tmp" extensions
unlink("pod2htmd.$_", "pod2htmi.$_") for qw(x~~ tmp);

# copy all GIF files from docs directy to html tree
doGIF($imgsrcdir, File::Spec->catfile($destrootdir, $destsubdir, "Win32"));

exit(0);

sub doHtml
{
    my ($srcdir, $htmlrootdir, $htmlsubdir) = @_;

    # Tidy the passed params:
    $srcdir      = File::Spec->canonpath($srcdir);
    $htmlrootdir = File::Spec->canonpath($htmlrootdir);
    $htmlsubdir  = File::Spec->canonpath($htmlsubdir);

    # Find POD files:
    my %pods = pod_find( {-perl => 1}, $srcdir);

    for my $srcfile (keys %pods) {

        # Ignore any demo files:
        next if $srcfile =~ /demos[\/\\]/;

        # Relative and tidy srcfile
        $srcfile = File::Spec->abs2rel($srcfile);
        $srcfile = File::Spec->canonpath($srcfile);

        # Strip common prefix:
        my $tmp = $srcfile;
        $tmp =~ s/^\Q$srcdir\E//;
        $tmp = File::Spec->catfile($htmlrootdir, $htmlsubdir, $tmp);
        $tmp = File::Spec->canonpath($tmp);

        # generate html file name
        (my $htmlfile = $tmp) =~ s/\.[^.]*$/.html/;
        print STDERR "Converting $srcfile to $htmlfile\n" if $DEBUG;

        # ensure the destination directory exists
        my (undef, $dstdir, undef) = File::Spec->splitpath($htmlfile);
        print STDERR "Creating directory $dstdir\n" if $DEBUG;
        mkpath($dstdir);

        # calculate the relative path to the html root dir
        my $path2root = File::Spec->abs2rel($htmlrootdir, $dstdir);

        # Unixify path seperators
        (my $u_srcfile    = $srcfile)    =~ s|\\|/|g;
        (my $u_htmlfile   = $htmlfile)   =~ s|\\|/|g;
        (my $u_dstdir     = $dstdir)     =~ s|\\|/|g;

        (my $u_htmlroot = File::Spec->catdir($path2root, $htmlsubdir))   =~ s|\\|/|g;
        (my $u_css      = File::Spec->catfile($path2root, "Active.css")) =~ s|\\|/|g;

        # and convert the source POD to destination HTML
        my @options = (
            "--infile=$u_srcfile",
            "--outfile=$u_htmlfile",
            "--htmldir=$u_dstdir",
            "--htmlroot=$u_htmlroot",
            "--css=$u_css",
            "--header",
        );
        print STDERR "pod2html @options\n" if $DEBUG;
        pod2html(@options);
    }

    return 1;
}

{
    my ($srcrootdir, $dstrootdir);

    sub doGIF
    {
        my ($src, $dst) = @_;

        # Tidy the passed params:
        $srcrootdir = File::Spec->canonpath($src);
        $dstrootdir = File::Spec->canonpath($dst);

        find({wanted =>\&found, no_chdir => 1}, $srcrootdir);

        return 1;
    }

    sub found {
        my $file  = File::Spec->canonpath($_);

        # copy .gif files
        if($file =~ /\.gif$/) {
            (my $dstfile = $file) =~ s/^\Q$srcrootdir\E//;
            $dstfile = File::Spec->catfile($dstrootdir, $dstfile);
            print STDERR "Copying $file to $dstfile\n" if $DEBUG;
            copy($file, $dstfile);
        }
    }
}