summaryrefslogtreecommitdiff
path: root/lib/ExtUtils/Install.pm
diff options
context:
space:
mode:
authorRaphael Manfredi <Raphael.Manfredi@pobox.com>2001-01-03 23:01:30 +0100
committerJarkko Hietaniemi <jhi@iki.fi>2001-01-04 18:36:08 +0000
commit131aa08964be247006f8347599148405626429ac (patch)
tree0a7ccb35961e6f124f15ef0cacdeec9006841380 /lib/ExtUtils/Install.pm
parentcb49b31f4c369cd12097a08c45c1d3cba3657976 (diff)
downloadperl-131aa08964be247006f8347599148405626429ac.tar.gz
Add a new MakeMaker variable PM_FILTER that defines a Unix
filter to be run on each .pm during the pm_to_blib() phase, a fixed version of Subject: PATCH (blead 8269) ExtUtils::MakeMaker Message-ID: <5296.978555690@nice.ram.loc> p4raw-id: //depot/perl@8311
Diffstat (limited to 'lib/ExtUtils/Install.pm')
-rw-r--r--lib/ExtUtils/Install.pm58
1 files changed, 44 insertions, 14 deletions
diff --git a/lib/ExtUtils/Install.pm b/lib/ExtUtils/Install.pm
index 4a148a655e..c496aa0ae5 100644
--- a/lib/ExtUtils/Install.pm
+++ b/lib/ExtUtils/Install.pm
@@ -262,8 +262,22 @@ sub inc_uninstall {
}
}
+sub run_filter {
+ my ($cmd, $src, $dest) = @_;
+ local *SRC, *CMD;
+ open(CMD, "|$cmd >$dest") || die "Cannot fork: $!";
+ open(SRC, $src) || die "Cannot open $src: $!";
+ my $buf;
+ my $sz = 1024;
+ while (my $len = sysread(SRC, $buf, $sz)) {
+ syswrite(CMD, $buf, $len);
+ }
+ close SRC;
+ close CMD or die "Filter command '$cmd' failed for $src";
+}
+
sub pm_to_blib {
- my($fromto,$autodir) = @_;
+ my($fromto,$autodir,$pm_filter) = @_;
use File::Basename qw(dirname);
use File::Copy qw(copy);
@@ -286,23 +300,37 @@ sub pm_to_blib {
mkpath($autodir,0,0755);
foreach (keys %$fromto) {
- next if -f $fromto->{$_} && -M $fromto->{$_} < -M $_;
- unless (compare($_,$fromto->{$_})){
- print "Skip $fromto->{$_} (unchanged)\n";
+ my $dest = $fromto->{$_};
+ next if -f $dest && -M $dest < -M $_;
+
+ # When a pm_filter is defined, we need to pre-process the source first
+ # to determine whether it has changed or not. Therefore, only perform
+ # the comparison check when there's no filter to be ran.
+ # -- RAM, 03/01/2001
+
+ my $need_filtering = defined $pm_filter && length $pm_filter && /\.pm$/;
+
+ if (!$need_filtering && 0 == compare($_,$dest)) {
+ print "Skip $dest (unchanged)\n";
next;
}
- if (-f $fromto->{$_}){
- forceunlink($fromto->{$_});
+ if (-f $dest){
+ forceunlink($dest);
+ } else {
+ mkpath(dirname($dest),0,0755);
+ }
+ if ($need_filtering) {
+ run_filter($pm_filter, $_, $dest);
+ print "$pm_filter <$_ >$dest\n";
} else {
- mkpath(dirname($fromto->{$_}),0,0755);
+ copy($_,$dest);
+ print "cp $_ $dest\n";
}
- copy($_,$fromto->{$_});
my($mode,$atime,$mtime) = (stat)[2,8,9];
- utime($atime,$mtime+$Is_VMS,$fromto->{$_});
- chmod(0444 | ( $mode & 0111 ? 0111 : 0 ),$fromto->{$_});
- print "cp $_ $fromto->{$_}\n";
- next unless /\.pm\z/;
- autosplit($fromto->{$_},$autodir);
+ utime($atime,$mtime+$Is_VMS,$dest);
+ chmod(0444 | ( $mode & 0111 ? 0111 : 0 ),$dest);
+ next unless /\.pm$/;
+ autosplit($dest,$autodir);
}
}
@@ -392,7 +420,9 @@ no-don't-really-do-it-now switch.
pm_to_blib() takes a hashref as the first argument and copies all keys
of the hash to the corresponding values efficiently. Filenames with
the extension pm are autosplit. Second argument is the autosplit
-directory.
+directory. If third argument is not empty, it is taken as a filter command
+to be ran on each .pm file, the output of the command being what is finally
+copied, and the source for auto-splitting.
You can have an environment variable PERL_INSTALL_ROOT set which will
be prepended as a directory to each installed file (and directory).