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