From 273df2b1892ae130ffc042e07ffa9c25a0a75605 Mon Sep 17 00:00:00 2001 From: Ed J Date: Mon, 19 Jan 2015 00:17:31 +0000 Subject: Cache is_make_type --- cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm | 19 ++++++++++++++----- cpan/ExtUtils-MakeMaker/t/cd.t | 2 ++ 2 files changed, 16 insertions(+), 5 deletions(-) (limited to 'cpan') diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm index 570ea7203a..154f784653 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm @@ -202,19 +202,28 @@ Returns true if C<<$self->make>> is the given type; possibilities are: =cut +my %maketype2true; +# undocumented - so t/cd.t can still do its thing +sub _clear_maketype_cache { %maketype2true = () } + sub is_make_type { my($self, $type) = @_; + return $maketype2true{$type} if defined $maketype2true{$type}; (undef, undef, my $make_basename) = $self->splitpath($self->make); - return 1 if $make_basename =~ /\b$type\b/i; # executable's filename - return 0 if $make_basename =~ /\b(dmake|nmake)\b/i; # Never fall through for dmake/nmake + return $maketype2true{$type} = 1 + if $make_basename =~ /\b$type\b/i; # executable's filename + return $maketype2true{$type} = 0 + if $make_basename =~ /\b(dmake|nmake|gmake)\b/i; # Never fall through for dmake/nmake/gmake # now have to run with "-v" and guess my $redirect = $self->can_redirect_error ? '2>&1' : ''; my $make = $self->make || $self->{MAKE}; my $minus_v = `"$make" -v $redirect`; - return 1 if $type eq 'gmake' and $minus_v =~ /GNU make/i; - return 1 if $type eq 'bsdmake' + return $maketype2true{$type} = 1 + if $type eq 'gmake' and $minus_v =~ /GNU make/i; + return $maketype2true{$type} = 1 + if $type eq 'bsdmake' and $minus_v =~ /^usage: make \[-BeikNnqrstWwX\]/im; - 0; # it wasn't whatever you asked + $maketype2true{$type} = 0; # it wasn't whatever you asked } diff --git a/cpan/ExtUtils-MakeMaker/t/cd.t b/cpan/ExtUtils-MakeMaker/t/cd.t index 16f66679e4..67dfd9839e 100644 --- a/cpan/ExtUtils-MakeMaker/t/cd.t +++ b/cpan/ExtUtils-MakeMaker/t/cd.t @@ -26,6 +26,7 @@ my @cd_args = ($dir, "command1", "command2"); { local *make = sub { "nmake" }; + $mm->_clear_maketype_cache; my @dirs = (File::Spec->updir) x 2; my $expected_updir = File::Spec->catdir(@dirs); @@ -39,6 +40,7 @@ qq{cd $dir { local *make = sub { "dmake" }; + $mm->_clear_maketype_cache; ::is $mm->cd(@cd_args), qq{cd $dir && command1 -- cgit v1.2.1