This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
ExtUtils-Install: sync with cpan version 2.16
authorChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Wed, 2 Sep 2020 12:23:01 +0000 (08:23 -0400)
committerJames E Keenan <jkeenan@cpan.org>
Wed, 2 Sep 2020 12:24:35 +0000 (08:24 -0400)
Committer updated VERSION in initial POD section in Install.pm.

Porting/Maintainers.pl
cpan/ExtUtils-Install/lib/ExtUtils/Install.pm
cpan/ExtUtils-Install/lib/ExtUtils/Installed.pm
cpan/ExtUtils-Install/lib/ExtUtils/Packlist.pm
cpan/ExtUtils-Install/t/Installed.t

index d0f525d..bfe5ba5 100755 (executable)
@@ -461,7 +461,7 @@ use File::Glob qw(:case);
     },
 
     'ExtUtils::Install' => {
-        'DISTRIBUTION' => 'BINGOS/ExtUtils-Install-2.14.tar.gz',
+        'DISTRIBUTION' => 'BINGOS/ExtUtils-Install-2.16.tar.gz',
         'FILES'        => q[cpan/ExtUtils-Install],
         'EXCLUDED'     => [
             qw( t/lib/Test/Builder.pm
index 047c007..f59ec32 100644 (file)
@@ -32,11 +32,11 @@ ExtUtils::Install - install files from here to there
 
 =head1 VERSION
 
-2.14
+2.16
 
 =cut
 
-our $VERSION = '2.14';  # <-- do not forget to update the POD section just above this line!
+our $VERSION = '2.16';  # <-- do not forget to update the POD section just above this line!
 $VERSION = eval $VERSION;
 
 =pod
@@ -90,10 +90,10 @@ Dies with a special message.
 =cut
 
 BEGIN {
-    *Is_VMS        = $^O eq 'VMS'     ? sub(){1} : sub(){0};
-    *Is_Win32      = $^O eq 'MSWin32' ? sub(){1} : sub(){0};
-    *Is_cygwin     = $^O eq 'cygwin'  ? sub(){1} : sub(){0};
-    *CanMoveAtBoot = ($^O eq 'MSWin32' || $^O eq 'cygwin') ? sub(){1} : sub(){0};
+    *_Is_VMS        = $^O eq 'VMS'     ? sub(){1} : sub(){0};
+    *_Is_Win32      = $^O eq 'MSWin32' ? sub(){1} : sub(){0};
+    *_Is_cygwin     = $^O eq 'cygwin'  ? sub(){1} : sub(){0};
+    *_CanMoveAtBoot = ($^O eq 'MSWin32' || $^O eq 'cygwin') ? sub(){1} : sub(){0};
 }
 
 my $Inc_uninstall_warn_handler;
@@ -184,15 +184,15 @@ If $moan is true then returns 0 on error and warns instead of dies.
     sub _move_file_at_boot { #XXX OS-SPECIFIC
         my ( $file, $target, $moan  )= @_;
         _confess("Panic: Can't _move_file_at_boot on this platform!")
-             unless CanMoveAtBoot;
+             unless _CanMoveAtBoot;
 
         my $descr= ref $target
                     ? "'$file' for deletion"
                     : "'$file' for installation as '$target'";
 
-        # *note* CanMoveAtBoot is only incidentally the same condition as below
+        # *note* _CanMoveAtBoot is only incidentally the same condition as below
         # this needs not hold true in the future.
-        $Has_Win32API_File = (Is_Win32 || Is_cygwin)
+        $Has_Win32API_File = (_Is_Win32 || _Is_cygwin)
             ? (eval {require Win32API::File; 1} || 0)
             : 0 unless defined $Has_Win32API_File;
         if ( ! $Has_Win32API_File ) {
@@ -282,7 +282,7 @@ sub _unlink_or_rename { #XXX OS-SPECIFIC
     my $error="$!";
 
     _choke("Cannot unlink '$file': $!")
-          unless CanMoveAtBoot && $tryhard;
+          unless _CanMoveAtBoot && $tryhard;
 
     my $tmp= "AAA";
     ++$tmp while -e "$file.$tmp";
@@ -391,7 +391,7 @@ Abstract a -w check that tries to use POSIX::access() if possible.
     sub _have_write_access {
         my $dir=shift;
         unless (defined $has_posix) {
-            $has_posix = (!Is_cygwin && !Is_Win32
+            $has_posix = (!_Is_cygwin && !_Is_Win32
              && eval { local $^W; require POSIX; 1} ) || 0;
         }
         if ($has_posix) {
@@ -437,7 +437,7 @@ sub _can_write_dir {
     my $path='';
     my @make;
     while (@dirs) {
-        if (Is_VMS) {
+        if (_Is_VMS) {
             $dir = File::Spec->catdir($vol,@dirs);
         }
         else {
@@ -822,7 +822,7 @@ sub install { #XXX OS-SPECIFIC
 
                 #XXX OS-SPECIFIC
                 print "utime($atime,$mtime,$targetfile)\n" if $verbose>1;
-                utime($atime,$mtime + Is_VMS,$targetfile) unless $dry_run>1;
+                utime($atime,$mtime + _Is_VMS,$targetfile) unless $dry_run>1;
 
 
                 $mode = 0444 | ( $mode & 0111 ? 0111 : 0 );
@@ -1094,7 +1094,7 @@ sub inc_uninstall {
     #warn join "\n","---",@dirs,"---";
     my $seen_ours;
     foreach $dir ( @dirs ) {
-        my $canonpath = Is_VMS ? $dir : File::Spec->canonpath($dir);
+        my $canonpath = _Is_VMS ? $dir : File::Spec->canonpath($dir);
         next if $canonpath eq $Curdir;
         next if $seen_dir{$canonpath}++;
         my $targetfile = File::Spec->catfile($canonpath,$libdir,$file);
@@ -1232,7 +1232,7 @@ sub pm_to_blib {
             print "cp $from $to\n" unless $INSTALL_QUIET;
         }
         my($mode,$atime,$mtime) = (stat $from)[2,8,9];
-        utime($atime,$mtime+Is_VMS,$to);
+        utime($atime,$mtime+_Is_VMS,$to);
         _chmod(0444 | ( $mode & 0111 ? 0111 : 0 ),$to);
         next unless $from =~ /\.pm$/;
         _autosplit($to,$autodir) if defined $autodir;
@@ -1285,7 +1285,7 @@ sub DESTROY {
         $plural = $i>1 ? "all those files" : "this file";
         my $inst = (_invokant() eq 'ExtUtils::MakeMaker')
                  ? ( $Config::Config{make} || 'make' ).' install'
-                     . ( ExtUtils::Install::Is_VMS ? '/MACRO="UNINST"=1' : ' UNINST=1' )
+                     . ( ExtUtils::Install::_Is_VMS ? '/MACRO="UNINST"=1' : ' UNINST=1' )
                  : './Build install uninst=1';
         print "## Running '$inst' will unlink $plural for you.\n";
     }
index 8327a95..57df708 100644 (file)
@@ -17,7 +17,7 @@ my $DOSISH = ($^O =~ /^(MSWin\d\d|os2|dos|mint)$/);
 require VMS::Filespec if $Is_VMS;
 
 use vars qw($VERSION);
-$VERSION = '2.14';
+$VERSION = '2.16';
 $VERSION = eval $VERSION;
 
 sub _is_prefix {
@@ -309,7 +309,7 @@ sub version {
     return($self->{$module}{version});
 }
 
-sub debug_dump {
+sub _debug_dump {
     my ($self, $module) = @_;
     $self= $self->new(default=>1) if !ref $self;
     local $self->{":private:"}{Config};
index f94e3d0..ffae490 100644 (file)
@@ -5,7 +5,7 @@ use strict;
 use Carp qw();
 use Config;
 use vars qw($VERSION $Relocations);
-$VERSION = '2.14';
+$VERSION = '2.16';
 $VERSION = eval $VERSION;
 
 # Used for generating filehandle globs.  IO::File might not be available!
index d6a099e..949bd04 100644 (file)
@@ -1,6 +1,9 @@
 #!/usr/bin/perl -w
 
+# Test ExtUtils::Installed
+
 BEGIN {
+    # For backwards compatibility, use bundled version of Test::More
     unshift @INC, 't/lib/';
 }
 
@@ -13,8 +16,9 @@ use Cwd;
 use File::Path;
 use File::Basename;
 use File::Spec;
+use File::Temp qw[tempdir];
 
-use Test::More tests => 73;
+use Test::More tests => 74;
 
 BEGIN { use_ok( 'ExtUtils::Installed' ) }
 
@@ -63,7 +67,7 @@ ok( $ei->_is_type( File::Spec->catfile($prefix, 'bar'), 'prog'),
 SKIP: {
     skip('no man directories on this system', 1) unless $mandirs;
     is( $ei->_is_type('bar', 'doc'), 0,
-       '... should not find doc file outside path' );
+        '... should not find doc file outside path' );
 }
 
 ok( !$ei->_is_type('bar', 'prog'),
@@ -77,268 +81,275 @@ my @under = qw( boo bar baz );
 ok( !$ei->_is_under('foo', @under), '... should find no file not under dirs');
 ok( $ei->_is_under('baz', @under),  '... should find file under dir' );
 
+my $startdir = cwd();
+END { ok(chdir $startdir, "Return to where we started"); }
+
+{
+    my $tmpdir = tempdir( CLEANUP => 1 );
+    chdir $tmpdir;
 
-rmtree 'auto/FakeMod';
-ok( mkpath('auto/FakeMod') );
-END { rmtree 'auto' }
+    my $fakedir = 'FakeMod';
+    my $fakepath = File::Spec->catdir('auto', $fakedir);
+    ok( mkpath($fakepath), "Able to create directory $fakepath for testing" );
 
-ok(open(PACKLIST, '>auto/FakeMod/.packlist'));
-print PACKLIST 'list';
-close PACKLIST;
+    ok(open(PACKLIST, '>', File::Spec->catfile($fakepath, '.packlist')));
+    print PACKLIST 'list';
+    close PACKLIST;
 
-ok(open(FAKEMOD, '>auto/FakeMod/FakeMod.pm'));
+    ok(open(FAKEMOD, '>', File::Spec->catfile($fakepath, 'FakeMod.pm')));
 
-print FAKEMOD <<'FAKE';
+    print FAKEMOD <<'FAKE';
 package FakeMod;
 use vars qw( $VERSION );
 $VERSION = '1.1.1';
 1;
 FAKE
 
-close FAKEMOD;
+    close FAKEMOD;
+
+    my $fake_mod_dir = File::Spec->catdir(cwd(), $fakepath);
+    {
+        # avoid warning and death by localizing glob
+        local *ExtUtils::Installed::Config;
+        %ExtUtils::Installed::Config = (
+            %Config,
+            archlibexp         => cwd(),
+            sitearchexp        => $fake_mod_dir,
+        );
+
+        # should find $fake_mod_dir via '.' in @INC
+
+        local @INC = @INC;
+        push @INC, '.' if not $INC[-1] eq '.';
+
+        my $realei = ExtUtils::Installed->new();
+        isa_ok( $realei, 'ExtUtils::Installed' );
+        isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' );
+        is( $realei->{Perl}{version}, $Config{version},
+            'new() should set Perl version from %Config' );
+
+        ok( exists $realei->{FakeMod}, 'new() should find modules with .packlists');
+        isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' );
+        is( $realei->{FakeMod}{version}, '1.1.1',
+            '... should find version in modules' );
+    }
 
-my $fake_mod_dir = File::Spec->catdir(cwd(), 'auto', 'FakeMod');
-{
-    # avoid warning and death by localizing glob
-    local *ExtUtils::Installed::Config;
-    %ExtUtils::Installed::Config = (
-        %Config,
-        archlibexp         => cwd(),
-        sitearchexp        => $fake_mod_dir,
-    );
-
-    # should find $fake_mod_dir via '.' in @INC
-
-    local @INC = @INC;
-    push @INC, '.' if not $INC[-1] eq '.';
-
-    my $realei = ExtUtils::Installed->new();
-    isa_ok( $realei, 'ExtUtils::Installed' );
-    isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' );
-    is( $realei->{Perl}{version}, $Config{version},
-        'new() should set Perl version from %Config' );
-
-    ok( exists $realei->{FakeMod}, 'new() should find modules with .packlists');
-    isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' );
-    is( $realei->{FakeMod}{version}, '1.1.1',
-       '... should find version in modules' );
-}
+    {
+        # avoid warning and death by localizing glob
+        local *ExtUtils::Installed::Config;
+        %ExtUtils::Installed::Config = (
+            %Config,
+            archlibexp         => cwd(),
+            sitearchexp        => $fake_mod_dir,
+        );
 
-{
-    # avoid warning and death by localizing glob
-    local *ExtUtils::Installed::Config;
-    %ExtUtils::Installed::Config = (
-        %Config,
-        archlibexp         => cwd(),
-        sitearchexp        => $fake_mod_dir,
-    );
-
-    # disable '.' search
-
-    my $realei = ExtUtils::Installed->new( skip_cwd => 1 );
-    isa_ok( $realei, 'ExtUtils::Installed' );
-    isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' );
-    is( $realei->{Perl}{version}, $Config{version},
-        'new() should set Perl version from %Config' );
-
-    ok( ! exists $realei->{FakeMod}, 'new( skip_cwd => 1 ) should fail to find modules with .packlists');
-}
+        # disable '.' search
 
-{
-    # avoid warning and death by localizing glob
-    local *ExtUtils::Installed::Config;
-    %ExtUtils::Installed::Config = (
-        %Config,
-        archlibexp         => cwd(),
-        sitearchexp        => $fake_mod_dir,
-    );
-
-    # necessary to fool new() since we'll disable searching '.'
-    push @INC, $fake_mod_dir;
-
-    my $realei = ExtUtils::Installed->new( skip_cwd => 1 );
-    isa_ok( $realei, 'ExtUtils::Installed' );
-    isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' );
-    is( $realei->{Perl}{version}, $Config{version},
-        'new() should set Perl version from %Config' );
-
-    ok( exists $realei->{FakeMod}, 'new() should find modules with .packlists');
-    isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' );
-    is( $realei->{FakeMod}{version}, '1.1.1',
-       '... should find version in modules' );
-}
+        my $realei = ExtUtils::Installed->new( skip_cwd => 1 );
+        isa_ok( $realei, 'ExtUtils::Installed' );
+        isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' );
+        is( $realei->{Perl}{version}, $Config{version},
+            'new() should set Perl version from %Config' );
 
-# Now try this using PERL5LIB
-{
-    local $ENV{PERL5LIB} = join $Config{path_sep}, $fake_mod_dir;
-    local *ExtUtils::Installed::Config;
-    %ExtUtils::Installed::Config = (
-        %Config,
-        archlibexp         => cwd(),
-        sitearchexp        => cwd(),
-    );
-
-    my $realei = ExtUtils::Installed->new();
-    isa_ok( $realei, 'ExtUtils::Installed' );
-    isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' );
-    is( $realei->{Perl}{version}, $Config{version},
-        'new() should set Perl version from %Config' );
-
-    ok( exists $realei->{FakeMod},
-        'new() should find modules with .packlists using PERL5LIB'
-    );
-    isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' );
-    is( $realei->{FakeMod}{version}, '1.1.1',
-       '... should find version in modules' );
-}
+        ok( ! exists $realei->{FakeMod}, 'new( skip_cwd => 1 ) should fail to find modules with .packlists');
+    }
 
-# Do the same thing as the last block, but with overrides for
-# %Config and @INC.
-{
-    my $config_override = { %Config::Config };
-    $config_override->{archlibexp} = cwd();
-    $config_override->{sitearchexp} = $fake_mod_dir;
-    $config_override->{version} = 'fake_test_version';
-
-    my @inc_override = (@INC, $fake_mod_dir);
-
-    my $realei = ExtUtils::Installed->new(
-        'config_override' => $config_override,
-        'inc_override' => \@inc_override,
-    );
-    isa_ok( $realei, 'ExtUtils::Installed' );
-    isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' );
-    is( $realei->{Perl}{version}, 'fake_test_version',
-        'new(config_override => HASH) overrides %Config' );
-
-    ok( exists $realei->{FakeMod}, 'new() with overrides should find modules with .packlists');
-    isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' );
-    is( $realei->{FakeMod}{version}, '1.1.1',
-       '... should find version in modules' );
-}
+    {
+        # avoid warning and death by localizing glob
+        local *ExtUtils::Installed::Config;
+        %ExtUtils::Installed::Config = (
+            %Config,
+            archlibexp         => cwd(),
+            sitearchexp        => $fake_mod_dir,
+        );
+
+        # necessary to fool new() since we'll disable searching '.'
+        push @INC, $fake_mod_dir;
+
+        my $realei = ExtUtils::Installed->new( skip_cwd => 1 );
+        isa_ok( $realei, 'ExtUtils::Installed' );
+        isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' );
+        is( $realei->{Perl}{version}, $Config{version},
+            'new() should set Perl version from %Config' );
+
+        ok( exists $realei->{FakeMod}, 'new() should find modules with .packlists');
+        isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' );
+        is( $realei->{FakeMod}{version}, '1.1.1',
+            '... should find version in modules' );
+    }
 
-# Check if extra_libs works.
-{
-    my $realei = ExtUtils::Installed->new(
-        'extra_libs' => [ cwd() ],
-    );
-    isa_ok( $realei, 'ExtUtils::Installed' );
-    isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' );
-    ok( exists $realei->{FakeMod}, 
-        'new() with extra_libs should find modules with .packlists');
-    
-    #{ use Data::Dumper; local $realei->{':private:'}{Config};
-    #  warn Dumper($realei); }
-    
-    isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' );
-    is( $realei->{FakeMod}{version}, '1.1.1',
-       '... should find version in modules' );
-}
+    # Now try this using PERL5LIB
+    {
+        local $ENV{PERL5LIB} = join $Config{path_sep}, $fake_mod_dir;
+        local *ExtUtils::Installed::Config;
+        %ExtUtils::Installed::Config = (
+            %Config,
+            archlibexp         => cwd(),
+            sitearchexp        => cwd(),
+        );
+
+        my $realei = ExtUtils::Installed->new();
+        isa_ok( $realei, 'ExtUtils::Installed' );
+        isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' );
+        is( $realei->{Perl}{version}, $Config{version},
+            'new() should set Perl version from %Config' );
+
+        ok( exists $realei->{FakeMod},
+            'new() should find modules with .packlists using PERL5LIB'
+        );
+        isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' );
+        is( $realei->{FakeMod}{version}, '1.1.1',
+            '... should find version in modules' );
+    }
 
-# modules
-$ei->{$_} = 1 for qw( abc def ghi );
-is( join(' ', $ei->modules()), 'abc def ghi',
-    'modules() should return sorted keys' );
-
-# This didn't work for a long time due to a sort in scalar context oddity.
-is( $ei->modules, 3,    'modules() in scalar context' );
-
-# files
-$ei->{goodmod} = {
-        packlist => {
-                ($Config{man1direxp} ?
-                    (File::Spec->catdir($Config{man1direxp}, 'foo') => 1) :
-                        ()),
-                ($Config{man3direxp} ?
-                    (File::Spec->catdir($Config{man3direxp}, 'bar') => 1) :
-                        ()),
-                File::Spec->catdir($prefix, 'foobar') => 1,
-                foobaz  => 1,
-        },
-};
-
-eval { $ei->files('badmod') };
-like( $@, qr/badmod is not installed/,'files() should croak given bad modname');
-eval { $ei->files('goodmod', 'badtype' ) };
-like( $@, qr/type must be/,'files() should croak given bad type' );
-
-my @files;
-SKIP: {
-    skip('no man directory man1dir on this system', 2)
-      unless $Config{man1direxp};
-    @files = $ei->files('goodmod', 'doc', $Config{man1direxp});
-    is( scalar @files, 1, '... should find doc file under given dir' );
-    is( (grep { /foo$/ } @files), 1, '... checking file name' );
-}
-SKIP: {
-    skip('no man directories on this system', 1) unless $mandirs;
-    @files = $ei->files('goodmod', 'doc');
-    is( scalar @files, $mandirs, '... should find all doc files with no dir' );
-}
+    # Do the same thing as the last block, but with overrides for
+    # %Config and @INC.
+    {
+        my $config_override = { %Config::Config };
+        $config_override->{archlibexp} = cwd();
+        $config_override->{sitearchexp} = $fake_mod_dir;
+        $config_override->{version} = 'fake_test_version';
+
+        my @inc_override = (@INC, $fake_mod_dir);
+
+        my $realei = ExtUtils::Installed->new(
+            'config_override' => $config_override,
+            'inc_override' => \@inc_override,
+        );
+        isa_ok( $realei, 'ExtUtils::Installed' );
+        isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' );
+        is( $realei->{Perl}{version}, 'fake_test_version',
+            'new(config_override => HASH) overrides %Config' );
+
+        ok( exists $realei->{FakeMod}, 'new() with overrides should find modules with .packlists');
+        isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' );
+        is( $realei->{FakeMod}{version}, '1.1.1',
+            '... should find version in modules' );
+    }
 
-@files = $ei->files('goodmod', 'prog', 'fake', 'fake2');
-is( scalar @files, 0, '... should find no doc files given wrong dirs' );
-@files = $ei->files('goodmod', 'prog');
-is( scalar @files, 1, '... should find doc file in correct dir' );
-like( $files[0], qr/foobar[>\]]?$/, '... checking file name' );
-@files = $ei->files('goodmod');
-is( scalar @files, 2 + $mandirs, '... should find all files with no type specified' );
-my %dirnames = map { lc($_) => dirname($_) } @files;
+    # Check if extra_libs works.
+    {
+        my $realei = ExtUtils::Installed->new(
+            'extra_libs' => [ cwd() ],
+        );
+        isa_ok( $realei, 'ExtUtils::Installed' );
+        isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' );
+        ok( exists $realei->{FakeMod},
+            'new() with extra_libs should find modules with .packlists');
+
+        #{ use Data::Dumper; local $realei->{':private:'}{Config};
+        #  warn Dumper($realei); }
+
+        isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' );
+        is( $realei->{FakeMod}{version}, '1.1.1',
+            '... should find version in modules' );
+    }
 
-# directories
-my @dirs = $ei->directories('goodmod', 'prog', 'fake');
-is( scalar @dirs, 0, 'directories() should return no dirs if no files found' );
+    # modules
+    $ei->{$_} = 1 for qw( abc def ghi );
+    is( join(' ', $ei->modules()), 'abc def ghi',
+        'modules() should return sorted keys' );
+
+    # This didn't work for a long time due to a sort in scalar context oddity.
+    is( $ei->modules, 3,    'modules() in scalar context' );
+
+    # files
+    $ei->{goodmod} = {
+            packlist => {
+                    ($Config{man1direxp} ?
+                        (File::Spec->catdir($Config{man1direxp}, 'foo') => 1) :
+                            ()),
+                    ($Config{man3direxp} ?
+                        (File::Spec->catdir($Config{man3direxp}, 'bar') => 1) :
+                            ()),
+                    File::Spec->catdir($prefix, 'foobar') => 1,
+                    foobaz  => 1,
+            },
+    };
+
+    eval { $ei->files('badmod') };
+    like( $@, qr/badmod is not installed/,'files() should croak given bad modname');
+    eval { $ei->files('goodmod', 'badtype' ) };
+    like( $@, qr/type must be/,'files() should croak given bad type' );
+
+    my @files;
+    SKIP: {
+        skip('no man directory man1dir on this system', 2)
+          unless $Config{man1direxp};
+        @files = $ei->files('goodmod', 'doc', $Config{man1direxp});
+        is( scalar @files, 1, '... should find doc file under given dir' );
+        is( (grep { /foo$/ } @files), 1, '... checking file name' );
+    }
+    SKIP: {
+        skip('no man directories on this system', 1) unless $mandirs;
+        @files = $ei->files('goodmod', 'doc');
+        is( scalar @files, $mandirs, '... should find all doc files with no dir' );
+    }
 
-SKIP: {
-    skip('no man directories on this system', 1) unless $mandirs;
-    @dirs = $ei->directories('goodmod', 'doc');
-    is( scalar @dirs, $mandirs, '... should find all files files() would' );
-}
-@dirs = $ei->directories('goodmod');
-is( scalar @dirs, 2 + $mandirs, '... should find all files files() would, again' );
-@files = sort map { exists $dirnames{lc($_)} ? $dirnames{lc($_)} : '' } @files;
-is( join(' ', @files), join(' ', @dirs), '... should sort output' );
+    @files = $ei->files('goodmod', 'prog', 'fake', 'fake2');
+    is( scalar @files, 0, '... should find no doc files given wrong dirs' );
+    @files = $ei->files('goodmod', 'prog');
+    is( scalar @files, 1, '... should find doc file in correct dir' );
+    like( $files[0], qr/foobar[>\]]?$/, '... checking file name' );
+    @files = $ei->files('goodmod');
+    is( scalar @files, 2 + $mandirs, '... should find all files with no type specified' );
+    my %dirnames = map { lc($_) => dirname($_) } @files;
 
-# directory_tree
-my $expectdirs =
-       ($mandirs == 2) &&
-       (dirname($Config{man1direxp}) eq dirname($Config{man3direxp}))
-       ? 3 : 2;
+    # directories
+    my @dirs = $ei->directories('goodmod', 'prog', 'fake');
+    is( scalar @dirs, 0, 'directories() should return no dirs if no files found' );
 
-SKIP: {
-    skip('no man directories on this system', 1) unless $mandirs;
-    @dirs = $ei->directory_tree('goodmod', 'doc', $Config{man1direxp} ?
-       dirname($Config{man1direxp}) : dirname($Config{man3direxp}));
-    is( scalar @dirs, $expectdirs,
-        'directory_tree() should report intermediate dirs to those requested' );
-}
+    SKIP: {
+        skip('no man directories on this system', 1) unless $mandirs;
+        @dirs = $ei->directories('goodmod', 'doc');
+        is( scalar @dirs, $mandirs, '... should find all files files() would' );
+    }
+    @dirs = $ei->directories('goodmod');
+    is( scalar @dirs, 2 + $mandirs, '... should find all files files() would, again' );
+    @files = sort map { exists $dirnames{lc($_)} ? $dirnames{lc($_)} : '' } @files;
+    is( join(' ', @files), join(' ', @dirs), '... should sort output' );
 
-my $fakepak = Fakepak->new(102);
+    # directory_tree
+    my $expectdirs =
+           ($mandirs == 2) &&
+           (dirname($Config{man1direxp}) eq dirname($Config{man3direxp}))
+           ? 3 : 2;
 
-$ei->{yesmod} = {
-        version         => 101,
-        packlist        => $fakepak,
-};
+    SKIP: {
+        skip('no man directories on this system', 1) unless $mandirs;
+        @dirs = $ei->directory_tree('goodmod', 'doc', $Config{man1direxp} ?
+           dirname($Config{man1direxp}) : dirname($Config{man3direxp}));
+        is( scalar @dirs, $expectdirs,
+            'directory_tree() should report intermediate dirs to those requested' );
+    }
 
-# these should all croak
-foreach my $sub (qw( validate packlist version )) {
-    eval { $ei->$sub('nomod') };
-    like( $@, qr/nomod is not installed/,
-         "$sub() should croak when asked about uninstalled module" );
-}
+    my $fakepak = Fakepak->new(102);
+
+    $ei->{yesmod} = {
+            version         => 101,
+            packlist        => $fakepak,
+    };
+
+    # these should all croak
+    foreach my $sub (qw( validate packlist version )) {
+        eval { $ei->$sub('nomod') };
+        like( $@, qr/nomod is not installed/,
+            "$sub() should croak when asked about uninstalled module" );
+    }
 
-# validate
-is( $ei->validate('yesmod'), 'validated',
-        'validate() should return results of packlist validate() call' );
+    # validate
+    is( $ei->validate('yesmod'), 'validated',
+            'validate() should return results of packlist validate() call' );
 
-# packlist
-is( ${ $ei->packlist('yesmod') }, 102,
-        'packlist() should report installed mod packlist' );
+    # packlist
+    is( ${ $ei->packlist('yesmod') }, 102,
+            'packlist() should report installed mod packlist' );
 
-# version
-is( $ei->version('yesmod'), 101,
-        'version() should report installed mod version' );
+    # version
+    is( $ei->version('yesmod'), 101,
+            'version() should report installed mod version' );
 
+} # End of block enclosing tempdir
 
 package Fakepak;