xref: /openbsd-src/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm (revision e068048151d29f2562a32185e21a8ba885482260)
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