- 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.
- -r "../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};