my %opts;
GetOptions( \%opts,
qw( man1dir=s man1ext=s man3dir=s man3ext=s batchlimit=i
- notify n help silent S verbose V))
+ destdir:s notify n help silent S verbose V))
|| die $usage;
die $usage if $opts{help};
+$opts{destdir} //= '';
-$opts{man1dir} = $Config{'installman1dir'}
+$opts{man1dir} = "$opts{destdir}$Config{'installman1dir'}"
unless defined($opts{man1dir});
$opts{man1ext} = $Config{'man1ext'}
unless defined($opts{man1ext});
-$opts{man3dir} = $Config{'installman3dir'}
+$opts{man3dir} = "$opts{destdir}$Config{'installman3dir'}"
unless defined($opts{man3dir});
$opts{man3ext} = $Config{'man3ext'}
unless defined($opts{man3ext});
-x "./perl$Config{exe_ext}"
or warn "./perl$Config{exe_ext} not found! Have you run make?\n";
--d $Config{'installprivlib'}
+-d "$opts{destdir}$Config{'installprivlib'}"
|| warn "Perl library directory $Config{'installprivlib'} not found.
Have you run make install?. (Installing anyway.)\n";
-x "t/perl$Config{exe_ext}" || warn "WARNING: You've never run 'make test'!!!",
" (Installing anyway.)\n";
-$packlist = ExtUtils::Packlist->new("$Config{installarchlib}/.packlist");
+$packlist = ExtUtils::Packlist->new("$opts{destdir}$Config{installarchlib}/.packlist");
# Install the main pod pages.
pod2man('lib', $opts{man3dir}, $opts{man3ext});
# Install the pods embedded in the installed scripts
+my $has_man1dir = $opts{man1dir} ne '' && -d $opts{man1dir};
open UTILS, "utils.lst" or die "Can't open 'utils.lst': $!";
while (<UTILS>) {
next if /^#/;
chomp;
$_ = $1 if /#.*pod\s*=\s*(\S+)/;
- my ($where, $what) = m|^(.*?)/(\S+)|;
+ my ($where, $what) = m|^(\S*)/(\S+)|;
pod2man($where, $opts{man1dir}, $opts{man1ext}, $what);
- if (my ($where2, $what2) = m|#.*link\s*=\s*(\S+)/(\S+)|) {
- my $old = "$opts{man1dir}/$what.$opts{man1ext}";
- my $new = "$opts{man1dir}/$what2.$opts{man1ext}";
- unlink($new);
- link($old, $new);
+ if ($has_man1dir) {
+ if (my ($where2, $what2) = m|#.*link\s*=\s*(\S+)/(\S+)|) {
+ my $old = "$opts{man1dir}/$what.$opts{man1ext}";
+ my $new = "$opts{man1dir}/$what2.$opts{man1ext}";
+ unlink($new);
+ link($old, $new);
+ my $xold = $old;
+ $xold =~ s/^\Q$opts{'destdir'}\E// if $opts{'destdir'};
+ my $xnew = $new;
+ $xnew =~ s/^\Q$opts{'destdir'}\E// if $opts{'destdir'};
+ $packlist->{$xnew} = { from => $xold, type => 'link' };
+ }
}
}
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;
+ }
+
# Convert name from File/Basename.pm to File::Basename.3 format,
# if necessary.
$manpage =~ s#\.p(m|od)$##;
push @to_process, [$mod, $tmp, $manpage];
}
- my $parser = Pod::Man->new( section => $manext,
- official=> 1,
- center => 'Perl Programmers Reference Guide'
- );
foreach my $page (@to_process) {
my($pod, $tmp, $manpage) = @$page;
- print " $manpage\n";
+ my $parser = Pod::Man->new( section => $manext,
+ official=> 1,
+ center => 'Perl Programmers Reference Guide'
+ );
+ my $xmanpage = $manpage;
+ $xmanpage =~ s/^\Q$opts{'destdir'}\E// if $opts{'destdir'};
+ print " $xmanpage\n";
if (!$opts{notify} && $parser->parse_from_file($pod, $tmp)) {
if (-s $tmp) {
if (rename($tmp, $manpage)) {
- $packlist->{$manpage} = { type => 'file' };
+ $packlist->{$xmanpage} = { type => 'file' };
next;
}
}
print " Installation complete\n" if $opts{verbose};
exit 0;
-
###############################################################################
# Utility subroutines from installperl