In Perl_vms_start_glob, when we don't have any matches and thus
[p5sagit/p5-mst-13.2.git] / installman
index 2eaab1b..8f6bd80 100755 (executable)
@@ -1,6 +1,32 @@
 #!./perl -w
 BEGIN { @INC = qw(lib) }
 use strict;
+
+BEGIN {
+    use Config;
+    if ($Config{userelocatableinc}) {
+       # This might be a considered a hack. Need to get information about the
+       # configuration from Config.pm *before* Config.pm expands any .../
+       # prefixes.
+       #
+       # So we set $^X to pretend that we're the already installed perl, so
+       # Config.pm doesits ... expansion off that location.
+
+       my $location = $Config{initialinstalllocation};
+       die <<'OS' unless defined $location;
+$Config{initialinstalllocation} is not defined - can't install a relocatable
+perl without this.
+OS
+       $^X = "$location/perl";
+       # And then remove all trace of ever having loaded Config.pm, so that
+       # it will reload with the revised $^X
+       undef %Config::;
+       delete $INC{"Config.pm"};
+       delete $INC{"Config_heavy.pl"};
+       # You never saw us. We weren't here.
+    }
+}
+
 use Config;
 use Getopt::Long;
 use File::Find;
@@ -41,15 +67,16 @@ my $usage =
 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}); 
@@ -61,13 +88,13 @@ $opts{verbose} ||= $opts{V} || $opts{notify};
 
 -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.
@@ -83,7 +110,7 @@ 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 ($has_man1dir) {
        if (my ($where2, $what2) = m|#.*link\s*=\s*(\S+)/(\S+)|) {
@@ -91,6 +118,11 @@ while (<UTILS>) {
            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' };
        }
     }
 }
@@ -139,8 +171,28 @@ sub pod2man {
        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)$##;
@@ -155,18 +207,20 @@ sub pod2man {
        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;
                 }
             }
@@ -179,7 +233,6 @@ $packlist->write() unless $opts{notify};
 print "  Installation complete\n" if $opts{verbose};
 
 exit 0;
-    
 
 ###############################################################################
 # Utility subroutines from installperl