1package ExtUtils::MM; 2 3use strict; 4use Config; 5use vars qw(@ISA $VERSION); 6$VERSION = 0.04; 7 8require ExtUtils::Liblist; 9require ExtUtils::MakeMaker; 10 11@ISA = qw(ExtUtils::Liblist ExtUtils::MakeMaker); 12 13=head1 NAME 14 15ExtUtils::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 24B<FOR INTERNAL USE ONLY> 25 26ExtUtils::MM is a subclass of ExtUtils::MakeMaker which automatically 27chooses the appropriate OS specific subclass for you 28(ie. ExtUils::MM_Unix, etc...). 29 30It also provides a convenient alias via the MM class (I didn't want 31MakeMaker modules outside of ExtUtils/). 32 33This class might turn out to be a temporary solution, but MM won't go 34away. 35 36=cut 37 38{ 39 # Convenient alias. 40 package MM; 41 use vars qw(@ISA); 42 @ISA = qw(ExtUtils::MM); 43 sub DESTROY {} 44} 45 46my %Is = (); 47$Is{VMS} = 1 if $^O eq 'VMS'; 48$Is{OS2} = 1 if $^O eq 'os2'; 49$Is{MacOS} = 1 if $^O eq 'MacOS'; 50if( $^O eq 'MSWin32' ) { 51 Win32::IsWin95() ? $Is{Win95} = 1 : $Is{Win32} = 1; 52} 53$Is{UWIN} = 1 if $^O eq 'uwin'; 54$Is{Cygwin} = 1 if $^O eq 'cygwin'; 55$Is{NW5} = 1 if $Config{osname} eq 'NetWare'; # intentional 56$Is{BeOS} = 1 if $^O =~ /beos/i; # XXX should this be that loose? 57$Is{DOS} = 1 if $^O eq 'dos'; 58 59$Is{Unix} = 1 if !keys %Is; 60 61if( $Is{NW5} ) { 62 $^O = 'NetWare'; 63 delete $Is{Win32}; 64} 65 66_assert( keys %Is == 1 ); 67my($OS) = keys %Is; 68 69 70my $class = "ExtUtils::MM_$OS"; 71eval "require $class" unless $INC{"ExtUtils/MM_$OS.pm"}; 72die $@ if $@; 73unshift @ISA, $class; 74 75 76sub _assert { 77 my $sanity = shift; 78 die sprintf "Assert failed at %s line %d\n", (caller)[1,2] unless $sanity; 79 return; 80} 81