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