This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Merge common code from installperl and installman into install_lib.pl
authorNicholas Clark <nick@ccl4.org>
Mon, 19 May 2008 12:26:51 +0000 (12:26 +0000)
committerNicholas Clark <nick@ccl4.org>
Mon, 19 May 2008 12:26:51 +0000 (12:26 +0000)
p4raw-id: //depot/perl@33862

MANIFEST
install_lib.pl [new file with mode: 0644]
installman
installperl
pod/perltodo.pod

index 122e3e2..8ebcd17 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -1406,6 +1406,7 @@ hv.c                              Hash value code
 hv.h                           Hash value header
 INSTALL                                Detailed installation instructions
 installhtml                    Perl script to install html files for pods
 hv.h                           Hash value header
 INSTALL                                Detailed installation instructions
 installhtml                    Perl script to install html files for pods
+install_lib.pl                 functions shared between install* scripts
 installman                     Perl script to install man pages for pods
 installperl                    Perl script to do "make install" dirty work
 INTERN.h                       Included before domestic .h files
 installman                     Perl script to install man pages for pods
 installperl                    Perl script to do "make install" dirty work
 INTERN.h                       Included before domestic .h files
diff --git a/install_lib.pl b/install_lib.pl
new file mode 100644 (file)
index 0000000..7eeae1d
--- /dev/null
@@ -0,0 +1,129 @@
+#!perl
+
+# Initialisation code and subroutines shared between installperl and installman
+# Probably installhtml needs to join the club.
+
+use strict;
+use vars qw($Is_VMS $Is_W32 $Is_OS2 $Is_Cygwin $Is_Darwin $Is_NetWare
+           %opts $packlist);
+use subs qw(unlink link chmod);
+
+use Config;
+BEGIN {
+    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.
+
+       require Config;
+       Config->import;
+    }
+}
+
+if ($Config{d_umask}) {
+    umask(022); # umasks like 077 aren't that useful for installations
+}
+
+$Is_VMS = $^O eq 'VMS';
+$Is_W32 = $^O eq 'MSWin32';
+$Is_OS2 = $^O eq 'os2';
+$Is_Cygwin = $^O eq 'cygwin';
+$Is_Darwin = $^O eq 'darwin';
+$Is_NetWare = $Config{osname} eq 'NetWare';
+
+sub unlink {
+    my(@names) = @_;
+    my($cnt) = 0;
+
+    return scalar(@names) if $Is_VMS;
+
+    foreach my $name (@names) {
+       next unless -e $name;
+       chmod 0777, $name if ($Is_OS2 || $Is_W32 || $Is_Cygwin || $Is_NetWare);
+       print "  unlink $name\n" if $opts{verbose};
+       ( CORE::unlink($name) and ++$cnt
+         or warn "Couldn't unlink $name: $!\n" ) unless $opts{notify};
+    }
+    return $cnt;
+}
+
+sub link {
+    my($from,$to) = @_;
+    my($success) = 0;
+
+    my $xfrom = $from;
+    $xfrom =~ s/^\Q$opts{destdir}\E// if $opts{destdir};
+    my $xto = $to;
+    $xto =~ s/^\Q$opts{destdir}\E// if $opts{destdir};
+    print $opts{verbose} ? "  ln $xfrom $xto\n" : "  $xto\n"
+       unless $opts{silent};
+    eval {
+       CORE::link($from, $to)
+           ? $success++
+           : ($from =~ m#^/afs/# || $to =~ m#^/afs/#)
+             ? die "AFS"  # okay inside eval {}
+             : die "Couldn't link $from to $to: $!\n"
+         unless $opts{notify};
+       $packlist->{$xto} = { from => $xfrom, type => 'link' };
+    };
+    if ($@) {
+       warn "Replacing link() with File::Copy::copy(): $@";
+       print $opts{verbose} ? "  cp $from $xto\n" : "  $xto\n"
+           unless $opts{silent};
+       print "  creating new version of $xto\n"
+                if $Is_VMS and -e $to and !$opts{silent};
+       unless ($opts{notify} or File::Copy::copy($from, $to) and ++$success) {
+           # Might have been that F::C::c can't overwrite the target
+           warn "Couldn't copy $from to $to: $!\n"
+               unless -f $to and (chmod(0666, $to), unlink $to)
+                       and File::Copy::copy($from, $to) and ++$success;
+       }
+       $packlist->{$xto} = { type => 'file' };
+    }
+    $success;
+}
+
+sub chmod {
+    my($mode,$name) = @_;
+
+    return if ($^O eq 'dos');
+    printf "  chmod %o %s\n", $mode, $name if $opts{verbose};
+    CORE::chmod($mode,$name)
+       || warn sprintf("Couldn't chmod %o %s: $!\n", $mode, $name)
+      unless $opts{notify};
+}
+
+
+sub samepath {
+    my($p1, $p2) = @_;
+
+    return (lc($p1) eq lc($p2)) if ($Is_W32 || $Is_NetWare);
+
+    if ($p1 ne $p2) {
+       my($dev1, $ino1, $dev2, $ino2);
+       ($dev1, $ino1) = stat($p1);
+       ($dev2, $ino2) = stat($p2);
+       ($dev1 == $dev2 && $ino1 == $ino2);
+    }
+    else {
+       1;
+    }
+}
+
+1;
index 9778029..9c3f873 100755 (executable)
@@ -1,55 +1,20 @@
 #!./perl -w
 #!./perl -w
-BEGIN { @INC = qw(lib) }
-use strict;
-
 BEGIN {
 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.
-    }
+    @INC = qw(lib);
+    
+    # This needs to be at BEGIN time, before any use of Config
+    require './install_lib.pl';
 }
 }
+use strict;
 
 
-use Config;
 use Getopt::Long;
 use File::Find;
 use File::Copy;
 use File::Path qw(mkpath);
 use ExtUtils::Packlist;
 use Pod::Man;
 use Getopt::Long;
 use File::Find;
 use File::Copy;
 use File::Path qw(mkpath);
 use ExtUtils::Packlist;
 use Pod::Man;
-use subs qw(unlink chmod rename link);
-use vars qw($packlist);
-use vars qw($Is_VMS $Is_W32 $Is_OS2 $Is_Cygwin $Is_Darwin $Is_NetWare);
-
-BEGIN {
-    $Is_VMS = $^O eq 'VMS';
-    $Is_W32 = $^O eq 'MSWin32';
-    $Is_OS2 = $^O eq 'os2';
-    $Is_Cygwin = $^O eq 'cygwin';
-    $Is_Darwin = $^O eq 'darwin';
-    if ($Is_VMS) { eval 'use VMS::Filespec;' }
-}
-
-if ($Config{d_umask}) {
-    umask(022); # umasks like 077 aren't that useful for installations
-}
+use vars qw($Is_VMS $Is_W32 $Is_OS2 $Is_Cygwin $Is_Darwin $Is_NetWare
+           %opts $packlist);
 
 $ENV{SHELL} = 'sh' if $^O eq 'os2';
 
 
 $ENV{SHELL} = 'sh' if $^O eq 'os2';
 
@@ -74,7 +39,6 @@ my $usage =
         --verbose (or -V) report all progress.
         --silent  (or -S) be silent. Only report errors.\n";
 
         --verbose (or -V) report all progress.
         --silent  (or -S) be silent. Only report errors.\n";
 
-my %opts;
 GetOptions( \%opts,
             qw( man1dir=s man1ext=s man3dir=s man3ext=s batchlimit=i
                 destdir:s notify n help silent S verbose V)) 
 GetOptions( \%opts,
             qw( man1dir=s man1ext=s man3dir=s man3ext=s batchlimit=i
                 destdir:s notify n help silent S verbose V)) 
@@ -244,47 +208,6 @@ print "  Installation complete\n" if $opts{verbose};
 
 exit 0;
 
 
 exit 0;
 
-###############################################################################
-# Utility subroutines from installperl
-
-sub unlink {
-    my(@names) = @_;
-    my $cnt = 0;
-
-    return scalar(@names) if $Is_VMS;
-
-    foreach my $name (@names) {
-       next unless -e $name;
-       chmod 0777, $name if $^O eq 'os2';
-       print "  unlink $name\n" if $opts{verbose};
-       ( CORE::unlink($name) and ++$cnt 
-           or warn "Couldn't unlink $name: $!\n" ) unless $opts{notify};
-    }
-    return $cnt;
-}
-
-sub link {
-    my($from,$to) = @_;
-    my($success) = 0;
-
-    print "  ln $from $to\n" if $opts{verbose};
-    eval {
-        CORE::link($from, $to)
-            ? $success++
-            : ($from =~ m#^/afs/# || $to =~ m#^/afs/#)
-              ? die "AFS"  # okay inside eval {}
-              : die "Couldn't link $from to $to: $!\n"
-          unless $opts{notify};
-    };
-    if ($@) {
-        File::Copy::copy($from, $to)
-            ? $success++
-            : warn "Couldn't copy $from to $to: $!\n"
-          unless $opts{notify};
-    }
-    $success;
-}
-
 sub rename {
     my($from,$to) = @_;
     if (-f $to and not unlink($to)) {
 sub rename {
     my($from,$to) = @_;
     if (-f $to and not unlink($to)) {
@@ -298,27 +221,3 @@ sub rename {
     link($from,$to) || return 0;
     unlink($from);
 }
     link($from,$to) || return 0;
     unlink($from);
 }
-
-sub chmod {
-    my($mode,$name) = @_;
-
-    printf "  chmod %o %s\n", $mode, $name if $opts{verbose};
-    CORE::chmod($mode,$name) || warn sprintf("Couldn't chmod %o %s: $!\n",$mode,$name)
-       unless $opts{notify};
-}
-
-sub samepath {
-    my($p1, $p2) = @_;
-    my($dev1, $ino1, $dev2, $ino2);
-
-    return (lc($p1) eq lc($p2)) if ($Is_W32 || $Is_NetWare);
-
-    if ($p1 ne $p2) {
-       ($dev1, $ino1) = stat($p1);
-       ($dev2, $ino2) = stat($p2);
-       ($dev1 == $dev2 && $ino1 == $ino2);
-    }
-    else {
-       1;
-    }
-}
index 03ff495..54e6578 100755 (executable)
@@ -5,45 +5,19 @@ BEGIN {
     chdir '..' if !-d 'lib' and -d '../lib';
     @INC = 'lib';
     $ENV{PERL5LIB} = 'lib';
     chdir '..' if !-d 'lib' and -d '../lib';
     @INC = 'lib';
     $ENV{PERL5LIB} = 'lib';
-}
 
 
-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.
-    }
+    # This needs to be at BEGIN time, before the use Config; below.
+    require './install_lib.pl';
 }
 
 use strict;
 }
 
 use strict;
-my ($Is_VMS, $Is_W32, $Is_OS2, $Is_Cygwin, $Is_Darwin,
-    %opts, $dostrip, $versiononly, $force,
-    $otherperls, $archname, $Is_NetWare, $nwinstall, $nopods);
+use vars qw($Is_VMS $Is_W32 $Is_OS2 $Is_Cygwin $Is_Darwin $Is_NetWare
+           %opts $packlist);
+my ($dostrip, $versiononly, $force,
+    $otherperls, $archname, $nwinstall, $nopods);
 use vars qw /$depth/;
 
 BEGIN {
 use vars qw /$depth/;
 
 BEGIN {
-    $Is_VMS = $^O eq 'VMS';
-    $Is_W32 = $^O eq 'MSWin32';
-    $Is_OS2 = $^O eq 'os2';
-    $Is_Cygwin = $^O eq 'cygwin';
-    $Is_Darwin = $^O eq 'darwin';
     if ($Is_VMS) { eval 'use VMS::Filespec;' }
 }
 
     if ($Is_VMS) { eval 'use VMS::Filespec;' }
 }
 
@@ -55,14 +29,7 @@ use File::Copy ();
 use File::Path ();
 use ExtUtils::Packlist;
 use Cwd;
 use File::Path ();
 use ExtUtils::Packlist;
 use Cwd;
-use Config;
-use subs qw(unlink link chmod);
-
-if ($Config{d_umask}) {
-    umask(022); # umasks like 077 aren't that useful for installations
-}
 
 
-$Is_NetWare = $Config{osname} eq 'NetWare';
 if ($Is_NetWare) {
     $Is_W32 = 0;
     $scr_ext = '.pl';
 if ($Is_NetWare) {
     $Is_W32 = 0;
     $scr_ext = '.pl';
@@ -275,7 +242,7 @@ else {
 } #if (!$Is_NetWare)
 
 # This will be used to store the packlist
 } #if (!$Is_NetWare)
 
 # This will be used to store the packlist
-my $packlist = ExtUtils::Packlist->new("$installarchlib/.packlist");
+$packlist = ExtUtils::Packlist->new("$installarchlib/.packlist");
 
 if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin) {
     my $perldll;
 
 if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin) {
     my $perldll;
@@ -646,6 +613,9 @@ exit 0;
 
 ###############################################################################
 
 
 ###############################################################################
 
+# If these are needed elsewhere, move them into install_lib.pl rather than
+# copying them.
+
 sub yn {
     my($prompt) = @_;
     my($answer);
 sub yn {
     my($prompt) = @_;
     my($answer);
@@ -656,22 +626,6 @@ sub yn {
     ($answer =~ m/^[yY]/);
 }
 
     ($answer =~ m/^[yY]/);
 }
 
-sub unlink {
-    my(@names) = @_;
-    my($cnt) = 0;
-
-    return scalar(@names) if $Is_VMS;
-
-    foreach my $name (@names) {
-       next unless -e $name;
-       chmod 0777, $name if ($Is_OS2 || $Is_W32 || $Is_Cygwin || $Is_NetWare);
-       print "  unlink $name\n" if $opts{verbose};
-       ( CORE::unlink($name) and ++$cnt
-         or warn "Couldn't unlink $name: $!\n" ) unless $opts{notify};
-    }
-    return $cnt;
-}
-
 sub safe_unlink {
     return if $opts{notify} or $Is_VMS;
     my @names = @_;
 sub safe_unlink {
     return if $opts{notify} or $Is_VMS;
     my @names = @_;
@@ -703,52 +657,6 @@ sub safe_rename {
     unlink($from);
 }
 
     unlink($from);
 }
 
-sub link {
-    my($from,$to) = @_;
-    my($success) = 0;
-
-    my $xfrom = $from;
-    $xfrom =~ s/^\Q$opts{destdir}\E// if $opts{destdir};
-    my $xto = $to;
-    $xto =~ s/^\Q$opts{destdir}\E// if $opts{destdir};
-    print $opts{verbose} ? "  ln $xfrom $xto\n" : "  $xto\n"
-       unless $opts{silent};
-    eval {
-       CORE::link($from, $to)
-           ? $success++
-           : ($from =~ m#^/afs/# || $to =~ m#^/afs/#)
-             ? die "AFS"  # okay inside eval {}
-             : die "Couldn't link $from to $to: $!\n"
-         unless $opts{notify};
-       $packlist->{$xto} = { from => $xfrom, type => 'link' };
-    };
-    if ($@) {
-       warn "Replacing link() with File::Copy::copy(): $@";
-       print $opts{verbose} ? "  cp $from $xto\n" : "  $xto\n"
-           unless $opts{silent};
-       print "  creating new version of $xto\n"
-                if $Is_VMS and -e $to and !$opts{silent};
-       unless ($opts{notify} or File::Copy::copy($from, $to) and ++$success) {
-           # Might have been that F::C::c can't overwrite the target
-           warn "Couldn't copy $from to $to: $!\n"
-               unless -f $to and (chmod(0666, $to), unlink $to)
-                       and File::Copy::copy($from, $to) and ++$success;
-       }
-       $packlist->{$xto} = { type => 'file' };
-    }
-    $success;
-}
-
-sub chmod {
-    my($mode,$name) = @_;
-
-    return if ($^O eq 'dos');
-    printf "  chmod %o %s\n", $mode, $name if $opts{verbose};
-    CORE::chmod($mode,$name)
-       || warn sprintf("Couldn't chmod %o %s: $!\n", $mode, $name)
-      unless $opts{notify};
-}
-
 sub copy {
     my($from,$to) = @_;
 
 sub copy {
     my($from,$to) = @_;
 
@@ -767,22 +675,6 @@ sub copy {
     $packlist->{$xto} = { type => 'file' };
 }
 
     $packlist->{$xto} = { type => 'file' };
 }
 
-sub samepath {
-    my($p1, $p2) = @_;
-
-    return (lc($p1) eq lc($p2)) if ($Is_W32 || $Is_NetWare);
-
-    if ($p1 ne $p2) {
-       my($dev1, $ino1, $dev2, $ino2);
-       ($dev1, $ino1) = stat($p1);
-       ($dev2, $ino2) = stat($p2);
-       ($dev1 == $dev2 && $ino1 == $ino2);
-    }
-    else {
-       1;
-    }
-}
-
 sub installlib {
     my $dir = $File::Find::dir;
     $dir =~ s#^\.(?![^/])/?##;
 sub installlib {
     my $dir = $File::Find::dir;
     $dir =~ s#^\.(?![^/])/?##;
index d856c4f..4015961 100644 (file)
@@ -30,15 +30,6 @@ some variation on the big block of C<$Is_Foo> checks.  We can safely put this
 into a file, change it to build an C<%Is> hash and require it.  Maybe just put
 it into F<test.pl>. Throw in the handy tainting subroutines.
 
 into a file, change it to build an C<%Is> hash and require it.  Maybe just put
 it into F<test.pl>. Throw in the handy tainting subroutines.
 
-=head2 merge common code in installperl and installman
-
-There are some common subroutines and a common C<BEGIN> block in F<installperl>
-and F<installman>. These should probably be merged. It would also be good to
-check for duplication in all the utility scripts supplied in the source
-tarball. It might be good to move them all to a subdirectory, but this would
-require careful checking to find all places that call them, and change those
-correctly.
-
 =head2 common test code for timed bail out
 
 Write portable self destruct code for tests to stop them burning CPU in
 =head2 common test code for timed bail out
 
 Write portable self destruct code for tests to stop them burning CPU in