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