Commit | Line | Data |
f6d6199c |
1 | package ExtUtils::MM; |
2 | |
3 | use strict; |
4 | use Config; |
5 | use vars qw(@ISA $VERSION); |
6 | $VERSION = 0.04; |
7 | |
8 | require ExtUtils::Liblist; |
9 | require ExtUtils::MakeMaker; |
10 | |
11 | @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 ExtUtils::MakeMaker which automatically |
27 | chooses the appropriate OS specific subclass for you |
28 | (ie. ExtUils::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 | package MM; |
41 | use vars qw(@ISA); |
42 | @ISA = qw(ExtUtils::MM); |
43 | sub DESTROY {} |
44 | } |
45 | |
46 | my %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'; |
50 | if( $^O eq 'MSWin32' ) { |
51 | Win32::IsWin95() ? $Is{Win95} = 1 : $Is{Win32} = 1; |
52 | } |
a7d1454b |
53 | $Is{UWIN} = 1 if $^O =~ /^uwin(-nt)?$/; |
f6d6199c |
54 | $Is{Cygwin} = 1 if $^O eq 'cygwin'; |
45bc4d3a |
55 | $Is{NW5} = 1 if $Config{osname} eq 'NetWare'; # intentional |
f6d6199c |
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 | |
61 | if( $Is{NW5} ) { |
62 | $^O = 'NetWare'; |
63 | delete $Is{Win32}; |
64 | } |
65 | |
66 | _assert( keys %Is == 1 ); |
67 | my($OS) = keys %Is; |
68 | |
69 | |
70 | my $class = "ExtUtils::MM_$OS"; |
71 | eval "require $class" unless $INC{"ExtUtils/MM_$OS.pm"}; |
72 | die $@ if $@; |
73 | unshift @ISA, $class; |
74 | |
75 | |
76 | sub _assert { |
77 | my $sanity = shift; |
78 | die sprintf "Assert failed at %s line %d\n", (caller)[1,2] unless $sanity; |
79 | return; |
80 | } |