Upgrade to Unicode::Collate 0.40
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / Install.pm
index 5763f1b..a744a6f 100644 (file)
@@ -12,8 +12,6 @@ use Config qw(%Config);
 $Is_VMS     = $^O eq 'VMS';
 $Is_MacPerl = $^O eq 'MacOS';
 
-my $splitchar = $^O eq 'VMS' ? '|' : ($^O eq 'os2' || $^O eq 'dos') ? ';' : ':';
-my @PERL_ENV_LIB = split $splitchar, defined $ENV{'PERL5LIB'} ? $ENV{'PERL5LIB'} : $ENV{'PERLLIB'} || '';
 my $Inc_uninstall_warn_handler;
 
 # install relative to here
@@ -56,7 +54,7 @@ perl modules. They are not designed as general purpose tools.
 =item B<install>
 
     install(\%from_to);
-    install(\%from_to, $verbose, $dont_execute);
+    install(\%from_to, $verbose, $dont_execute, $uninstall_shadows);
 
 Copies each directory tree of %from_to to its corresponding value
 preserving timestamps and permissions.
@@ -70,11 +68,14 @@ on AFS it is quite likely that people are installing to a different
 directory than the one where the files later appear.
 
 If $verbose is true, will print out each file removed.  Default is
-false.
+false.  This is "make install VERBINST=1"
 
 If $dont_execute is true it will only print what it was going to do
 without actually doing it.  Default is false.
 
+If $uninstall_shadows is true any differing versions throughout @INC
+will be uninstalled.  This is "make install UNINST=1"
+
 =cut
 
 sub install {
@@ -108,10 +109,8 @@ sub install {
        for (readdir DIR) {
            next if $_ eq $Curdir || $_ eq $Updir || $_ eq ".exists";
             my $targetdir = install_rooted_dir($from_to{$source_dir_or_file});
-           if (-w $targetdir ||
-               mkpath($targetdir)) {
-               last;
-           } else {
+            mkpath($targetdir) unless $nonono;
+           if (!$nonono && !-w $targetdir) {
                warn "Warning: You do not have permissions to " .
                    "install into $from_to{$source_dir_or_file}"
                    unless $warn_permissions++;
@@ -149,11 +148,13 @@ sub install {
        find(sub {
            my ($mode,$size,$atime,$mtime) = (stat)[2,7,8,9];
            return unless -f _;
-           return if $_ eq ".exists";
+
+            my $origfile = $_;
+           return if $origfile eq ".exists";
            my $targetdir  = File::Spec->catdir($targetroot, $File::Find::dir);
-           my $targetfile = File::Spec->catfile($targetdir, $_);
+           my $targetfile = File::Spec->catfile($targetdir, $origfile);
             my $sourcedir  = File::Spec->catdir($source, $File::Find::dir);
-            my $sourcefile = File::Spec->catfile($sourcedir, $_);
+            my $sourcefile = File::Spec->catfile($sourcedir, $origfile);
 
             my $save_cwd = cwd;
             chdir $cwd;  # in case the target is relative
@@ -203,9 +204,9 @@ sub install {
     }
     if ($pack{'write'}) {
        $dir = install_rooted_dir(dirname($pack{'write'}));
-       mkpath($dir,0,0755);
+       mkpath($dir,0,0755) unless $nonono;
        print "Writing $pack{'write'}\n";
-       $packlist->write(install_rooted_file($pack{'write'}));
+       $packlist->write(install_rooted_file($pack{'write'})) unless $nonono;
     }
 }
 
@@ -328,9 +329,14 @@ sub uninstall {
 }
 
 sub inc_uninstall {
-    my($file,$libdir,$verbose,$nonono) = @_;
+    my($filepath,$libdir,$verbose,$nonono) = @_;
     my($dir);
+    my $file = (File::Spec->splitpath($filepath))[2];
     my %seen_dir = ();
+
+    my @PERL_ENV_LIB = split $Config{path_sep}, defined $ENV{'PERL5LIB'} 
+      ? $ENV{'PERL5LIB'} : $ENV{'PERLLIB'} || '';
+
     foreach $dir (@INC, @PERL_ENV_LIB, @Config{qw(archlibexp
                                                  privlibexp
                                                  sitearchexp
@@ -344,9 +350,9 @@ sub inc_uninstall {
        # know, which is the file we just installed (AFS). So we leave
        # an identical file in place
        my $diff = 0;
-       if ( -f $targetfile && -s _ == -s $file) {
+       if ( -f $targetfile && -s _ == -s $filepath) {
            # We have a good chance, we can skip this one
-           $diff = compare($file,$targetfile);
+           $diff = compare($filepath,$targetfile);
        } else {
            print "#$file and $targetfile differ\n" if $verbose>1;
            $diff++;
@@ -372,6 +378,7 @@ sub inc_uninstall {
 
 sub run_filter {
     my ($cmd, $src, $dest) = @_;
+    local(*CMD, *SRC);
     open(CMD, "|$cmd >$dest") || die "Cannot fork: $!";
     open(SRC, $src)           || die "Cannot open $src: $!";
     my $buf;
@@ -391,6 +398,7 @@ sub run_filter {
 
 Copies each key of %from_to to its corresponding value efficiently.
 Filenames with the extension .pm are autosplit into the $autosplit_dir.
+Any destination directories are created.
 
 $filter_cmd is an optional shell command to run each .pm file through
 prior to splitting and copying.  Input is the contents of the module,
@@ -409,8 +417,6 @@ sub pm_to_blib {
     use File::Path qw(mkpath);
     use File::Compare qw(compare);
     use AutoSplit;
-    # my $my_req = $self->catfile(qw(auto ExtUtils Install forceunlink.al));
-    # require $my_req; # Hairy, but for the first
 
     if (!ref($fromto) && -r $fromto)
      {
@@ -526,14 +532,14 @@ Will be prepended to each install path.
 
 Original author lost in the mists of time.  Probably the same as Makemaker.
 
-Currently maintained by Michael G Schwern <F<schwern@pobox.com>>
+Currently maintained by Michael G Schwern C<schwern@pobox.com>
 
-Send patches and ideas to <F<makemaker@perl.org>>.
+Send patches and ideas to C<makemaker@perl.org>.
 
 Send bug reports via http://rt.cpan.org/.  Please send your
 generated Makefile along with your report.
 
-For more up-to-date information, see http://www.makemaker.org.
+For more up-to-date information, see L<http://www.makemaker.org>.
 
 
 =head1 LICENSE
@@ -541,7 +547,7 @@ For more up-to-date information, see http://www.makemaker.org.
 This program is free software; you can redistribute it and/or 
 modify it under the same terms as Perl itself.
 
-See F<http://www.perl.com/perl/misc/Artistic.html>
+See L<http://www.perl.com/perl/misc/Artistic.html>
 
 
 =cut