xref: /onnv-gate/usr/src/cmd/perl/5.8.4/utils/lib/ExtUtils/MM.pm (revision 0:68f95e015346)
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