my @PERL_ENV_LIB = split $splitchar, defined $ENV{'PERL5LIB'} ? $ENV{'PERL5LIB'} : $ENV{'PERLLIB'} || '';
my $Inc_uninstall_warn_handler;
+# install relative to here
+
+my $INSTALL_ROOT = $ENV{PERL_INSTALL_ROOT};
+
+use File::Spec;
+
+sub install_rooted_file {
+ if (defined $INSTALL_ROOT) {
+ MY->catfile($INSTALL_ROOT, $_[0]);
+ } else {
+ $_[0];
+ }
+}
+
+sub install_rooted_dir {
+ if (defined $INSTALL_ROOT) {
+ MY->catdir($INSTALL_ROOT, $_[0]);
+ } else {
+ $_[0];
+ }
+}
+
#our(@EXPORT, @ISA, $Is_VMS);
#use strict;
my(%hash) = %$hash;
my(%pack, $dir, $warn_permissions);
- my($packlist) = ExtUtils::Packlist->new(undef);
+ my($packlist) = ExtUtils::Packlist->new();
# -w doesn't work reliably on FAT dirs
$warn_permissions++ if $^O eq 'MSWin32';
local(*DIR);
opendir DIR, $source_dir_or_file or next;
for (readdir DIR) {
next if $_ eq "." || $_ eq ".." || $_ eq ".exists";
- if (-w $hash{$source_dir_or_file} ||
- mkpath($hash{$source_dir_or_file})) {
+ my $targetdir = install_rooted_dir($hash{$source_dir_or_file});
+ if (-w $targetdir ||
+ mkpath($targetdir)) {
last;
} else {
warn "Warning: You do not have permissions to " .
}
closedir DIR;
}
- $packlist->read($pack{"read"}) if (-f $pack{"read"});
+ my $tmpfile = install_rooted_file($pack{"read"});
+ $packlist->read($tmpfile) if (-f $tmpfile);
my $cwd = cwd();
my($source);
#October 1997: we want to install .pm files into archlib if
#there are any files in arch. So we depend on having ./blib/arch
#hardcoded here.
- my $targetroot = $hash{$source};
+
+ my $targetroot = install_rooted_dir($hash{$source});
+
if ($source eq "blib/lib" and
exists $hash{"blib/arch"} and
directory_not_empty("blib/arch")) {
- $targetroot = $hash{"blib/arch"};
+ $targetroot = install_rooted_dir($hash{"blib/arch"});
print "Files found in blib/arch: installing files in blib/lib into architecture dependent library tree\n";
}
chdir($source) or next;
$atime,$mtime,$ctime,$blksize,$blocks) = stat;
return unless -f _;
return if $_ eq ".exists";
- my $targetdir = MY->catdir($targetroot,$File::Find::dir);
- my $targetfile = MY->catfile($targetdir,$_);
+ my $targetdir = MY->catdir($targetroot, $File::Find::dir);
+ my $origfile = $_;
+ my $targetfile = MY->catfile($targetdir, $_);
my $diff = 0;
if ( -f $targetfile && -s _ == $size) {
} else {
inc_uninstall($_,$File::Find::dir,$verbose,0); # nonono set to 0
}
- $packlist->{$targetfile}++;
+ $packlist->{$origfile}++;
}, ".");
chdir($cwd) or Carp::croak("Couldn't chdir to $cwd: $!");
}
if ($pack{'write'}) {
- $dir = dirname($pack{'write'});
+ $dir = install_rooted_dir(dirname($pack{'write'}));
mkpath($dir,0,0755);
print "Writing $pack{'write'}\n";
- $packlist->write($pack{'write'});
+ $packlist->write(install_rooted_file($pack{'write'}));
}
}
}
sub DESTROY {
- my $self = shift;
- my($file,$i,$plural);
- foreach $file (sort keys %$self) {
- $plural = @{$self->{$file}} > 1 ? "s" : "";
- print "## Differing version$plural of $file found. You might like to\n";
- for (0..$#{$self->{$file}}) {
- print "rm ", $self->{$file}[$_], "\n";
- $i++;
+ unless(defined $INSTALL_ROOT) {
+ my $self = shift;
+ my($file,$i,$plural);
+ foreach $file (sort keys %$self) {
+ $plural = @{$self->{$file}} > 1 ? "s" : "";
+ print "## Differing version$plural of $file found. You might like to\n";
+ for (0..$#{$self->{$file}}) {
+ print "rm ", $self->{$file}[$_], "\n";
+ $i++;
+ }
+ }
+ $plural = $i>1 ? "all those files" : "this file";
+ print "## Running 'make install UNINST=1' will unlink $plural for you.\n";
}
- }
- $plural = $i>1 ? "all those files" : "this file";
- print "## Running 'make install UNINST=1' will unlink $plural for you.\n";
}
1;
the extension pm are autosplit. Second argument is the autosplit
directory.
+You can have an environment variable PERL_INSTALL_ROOT set which will
+be prepended as a directory to each installed file (and directory).
+
=cut