X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FExtUtils%2FInstall.pm;h=a744a6fecd6f2463c6578cfb2064bcc0568da98c;hb=e7f779c800b16cb35dd756b0caf53fb5591bd201;hp=5763f1bb97a03a7bf62d2d857fc33d3d878cc9a7;hpb=dedf98bc6289c70e2368bc395e2ec91fed11fc33;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/ExtUtils/Install.pm b/lib/ExtUtils/Install.pm index 5763f1b..a744a6f 100644 --- a/lib/ExtUtils/Install.pm +++ b/lib/ExtUtils/Install.pm @@ -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(\%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 > +Currently maintained by Michael G Schwern C -Send patches and ideas to >. +Send patches and ideas to C. 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. =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 +See L =cut