SUBDIRS = man1

{-
 use File::Spec::Functions qw(:DEFAULT abs2rel rel2abs);
 use File::Basename;

 foreach my $section ((1, 3, 5, 7)) {
     my @htmlfiles = ();
     my @manfiles = ();
     my %podfiles =
         map { $_ => 1 } glob catfile($sourcedir, "man$section", "*.pod");
     my %podinfiles = 
         map { $_ => 1 } glob catfile($sourcedir, "man$section", "*.pod.in");

     foreach (keys %podinfiles) {
         (my $p = $_) =~ s|\.in$||i;
         $podfiles{$p} = 1;
     }

     foreach my $p (sort keys %podfiles) {
         my $podfile = abs2rel($p, $sourcedir);
         my $podname = basename($podfile, '.pod');
         my $podinfile = $podinfiles{"$p.in"} ? "$podfile.in" : undef;

         my $podname = basename($podfile, ".pod");

         my $htmlfile = abs2rel(catfile($buildtop, "doc", "html", "man$section",
                                        "$podname.html"),
                                catdir($buildtop, "doc"));
         my $manfile = abs2rel(catfile($buildtop, "doc", "man", "man$section",
                                       "$podname.$section"),
                               catdir($buildtop, "doc"));

         # The build.info format requires file specs to be in Unix format.
         # Especially, since VMS file specs use [ and ], the build.info parser
         # will otherwise get terribly confused.
         if ($^O eq 'VMS') {
             $htmlfile = VMS::Filespec::unixify($htmlfile);
             $manfile = VMS::Filespec::unixify($manfile);
             $podfile = VMS::Filespec::unixify($podfile);
             $podinfile = VMS::Filespec::unixify($podinfile)
                 if defined $podinfile;
         } elsif ($^O eq 'MSWin32') {
             $htmlfile =~ s|\\|/|g;
             $manfile =~ s|\\|/|g;
             $podfile =~ s|\\|/|g;
             $podinfile =~ s|\\|/|g
                 if defined $podinfile;
         }
         push @htmlfiles, $htmlfile;
         push @manfiles, $manfile;
         $OUT .= << "_____";
DEPEND[$htmlfile]=$podfile
GENERATE[$htmlfile]=$podfile
DEPEND[$manfile]=$podfile
GENERATE[$manfile]=$podfile
_____
         $OUT .= << "_____" if $podinfile;
DEPEND[$podfile]=$podinfile ../configdata.pm
GENERATE[$podfile]=$podinfile
_____
     }
     $OUT .= "HTMLDOCS[man$section]=" . join(" \\\n", @htmlfiles) . "\n";
     $OUT .= "MANDOCS[man$section]=" . join(" \\\n", @manfiles) . "\n";
 }
 -}
