File Coverage

lib/ExtUtils/MM.pm
Criterion Covered Total %
statement 12 15 80.0
branch 1 4 25.0
condition 0 3 0.0
subroutine 4 6 66.6
pod n/a
total 17 28 60.7


line stmt bran cond sub pod time code
1              
2             use strict;
3 52     52   420710 use warnings;
  52         279  
  52         1302  
4 52     52   234 use ExtUtils::MakeMaker::Config;
  52         84  
  52         1346  
5 52     52   9141  
  52         120  
  52         435  
6             our $VERSION = '7.64';
7             $VERSION =~ tr/_//d;
8              
9             require ExtUtils::Liblist;
10             require ExtUtils::MakeMaker;
11             our @ISA = qw(ExtUtils::Liblist ExtUtils::MakeMaker);
12              
13             =head1 NAME
14              
15             ExtUtils::MM - OS adjusted ExtUtils::MakeMaker subclass
16              
17             =head1 SYNOPSIS
18              
19             require ExtUtils::MM;
20             my $mm = MM->new(...);
21              
22             =head1 DESCRIPTION
23              
24             B<FOR INTERNAL USE ONLY>
25              
26             ExtUtils::MM is a subclass of L<ExtUtils::MakeMaker> which automatically
27             chooses the appropriate OS specific subclass for you
28             (ie. L<ExtUtils::MM_Unix>, etc...).
29              
30             It also provides a convenient alias via the MM class (I didn't want
31             MakeMaker modules outside of ExtUtils/).
32              
33             This class might turn out to be a temporary solution, but MM won't go
34             away.
35              
36             =cut
37              
38             {
39             # Convenient alias.
40             our @ISA = qw(ExtUtils::MM);
41              
42             # miniperl might not have the Win32 functions available and we need
43       0     # to run in miniperl.
44             my $have_win32 = eval { require Win32 };
45             return $have_win32 && defined &Win32::IsWin95 ? Win32::IsWin95()
46             : ! defined $ENV{SYSTEMROOT};
47             }
48              
49 0     0   0 my %Is = ();
  0         0  
50             $Is{VMS} = $^O eq 'VMS';
51 0 0 0     0 $Is{OS2} = $^O eq 'os2';
52             $Is{MacOS} = $^O eq 'MacOS';
53             if( $^O eq 'MSWin32' ) {
54             _is_win95() ? $Is{Win95} = 1 : $Is{Win32} = 1;
55             }
56             $Is{UWIN} = $^O =~ /^uwin(-nt)?$/;
57             $Is{Cygwin} = $^O eq 'cygwin';
58             $Is{NW5} = $Config{osname} eq 'NetWare'; # intentional
59             $Is{BeOS} = ($^O =~ /beos/i or $^O eq 'haiku');
60             $Is{DOS} = $^O eq 'dos';
61             if( $Is{NW5} ) {
62             $^O = 'NetWare';
63             delete $Is{Win32};
64             }
65             $Is{VOS} = $^O eq 'vos';
66             $Is{QNX} = $^O eq 'qnx';
67             $Is{AIX} = $^O eq 'aix';
68             $Is{Darwin} = $^O eq 'darwin';
69             $Is{OS390} = $^O eq 'os390';
70              
71             $Is{Unix} = !grep { $_ } values %Is;
72              
73             map { delete $Is{$_} unless $Is{$_} } keys %Is;
74             _assert( keys %Is == 1 );
75             my($OS) = keys %Is;
76              
77              
78             my $class = "ExtUtils::MM_$OS";
79             eval "require $class" unless $INC{"ExtUtils/MM_$OS.pm"}; ## no critic
80             die $@ if $@;
81             unshift @ISA, $class;
82              
83              
84             my $sanity = shift;
85             die sprintf "Assert failed at %s line %d\n", (caller)[1,2] unless $sanity;
86             return;
87             }