- chdir $poddir || die "Unable to cd to $poddir directory!\n$!\n";
-
- # We insist on using the current version of pod2man in case there
- # are enhancements or changes from previous installed versions.
- # The error message doesn't include the '..' because the user
- # won't be aware that we've chdir to $poddir.
- -x "../pod/pod2man" || die "Executable pod/pod2man not found.\n";
-
- # We want to be sure to use the current perl. We can't rely on
- # the installed perl because it might not be actually installed
- # yet. (The user may have set the $install* Configure variables
- # to point to some temporary home, from which the executable gets
- # installed by occult means.)
- $pod2man = "../perl -I ../lib ../pod/pod2man --section=$manext --official";
-
- mkpath($mandir, 1, 0777); # In File::Path
- # Make a list of all the .pm and .pod files in the directory. We will
- # always run pod2man from the lib directory and feed it the full pathname
- # of the pod. This might be useful for pod2man someday.
- @modpods = ();
- find(\&lsmodpods, '.');
- foreach $mod (@modpods) {
- $manpage = $mod;
+ print "installing from $poddir\n" if $opts{verbose};
+
+ mkpath($mandir, $opts{verbose}, 0777) unless $opts{notify}; # In File::Path
+ # Make a list of all the .pm and .pod files in the directory. We avoid
+ # chdir because we are running with @INC = '../lib', and modules may wish
+ # to dynamically require Carp::Heavy or other diagnostics warnings.
+ # Hash the names of files we find, keys are names relative to perl build
+ # dir ('.'), values are names relative to $poddir.
+ my %modpods;
+ if (@script) {
+ %modpods = (map {+"$poddir/$_", $_} @script);
+ }
+ else {
+ File::Find::find({no_chdir=>1,
+ wanted => sub {
+ # $_ is $File::Find::name when using no_chdir
+ if (-f $_ and /\.p(?:m|od)$/) {
+ my $fullname = $_;
+ s!^\Q$poddir\E/!!;
+ $modpods{$fullname} = $_;
+ }
+ }},
+ $poddir);
+ }
+ my @to_process;
+ foreach my $mod (sort keys %modpods) {
+ my $manpage = $modpods{$mod};
+ my $tmp;
+ # Skip .pm files that have corresponding .pod files, and Functions.pm.
+ next if (($tmp = $mod) =~ s/\.pm$/.pod/ && -f $tmp);
+ next if $mod =~ m:/t/:; # no pods from test directories
+ next if ($manpage eq 'Pod/Functions.pm'); #### Used only by pod itself
+
+ # Skip files without pod docs
+ my $has_pod;
+ if (open T, $mod)
+ {
+ local $_;
+ while (<T>)
+ {
+ ++$has_pod and last if /^=(?:head\d+|item|pod)\b/;
+ }
+
+ close T;
+ }
+
+ unless ($has_pod)
+ {
+ warn "no documentation in $mod\n";
+ next;
+ }
+