1The Simplified MakeMaker class hierarchy
2****************************************
3
4What most people need to know.
5
6(Subclasses on top.)
7
8               MY
9                |
10        ExtUtils::MakeMaker
11                |
12        ExtUtils::MM_{Current OS}
13                |
14        ExtUtils::MM_Unix
15                |
16        ExtUtils::MM_Any
17
18The object actually used is of the class MY which allows you to
19override bits of MakeMaker inside your Makefile.PL by declaring
20MY::foo() methods.
21
22
23The Real MakeMaker class hierarchy
24**********************************
25
26You wish it was that simple.
27
28Here's how it really works.
29
30               PACK### (created each call to ExtUtils::MakeMaker->new)
31                    .                       |
32                 (mixin)                    |
33                    .                       |
34        MY (created by ExtUtils::MY)        |
35        |                                   |
36        ExtUtils::MY         MM (created by ExtUtils::MM)
37                   |          |
38                   ExtUtils::MM
39                    |     |   |-----------------------
40                    |     |                          |
41    ExtUtils::Liblist     ExtUtils::MakeMaker        |
42          |                                          |
43    ExtUtils::Liblist::Kid                           |
44                                                     |
45                                                     |
46                                                     |
47                                    ExtUtils::MM_{Current OS} (if necessary)
48                                            |
49                                    ExtUtils::MM_Unix
50                                            |
51                                    ExtUtils::MM_Any
52
53
54NOTE: Yes, this is a mess.  See
55http://archive.develooper.com/makemaker@perl.org/msg00134.html
56for some history.
57
58NOTE: When ExtUtils::MM is loaded it chooses a superclass for MM from
59amongst the ExtUtils::MM_* modules based on the current operating
60system.
61
62NOTE: ExtUtils::MM_{Current OS} represents one of the ExtUtils::MM_*
63modules except ExtUtils::MM_Any chosen based on your operating system.
64
65NOTE: The main object used by MakeMaker is a PACK### object, *not*
66ExtUtils::MakeMaker.  It is, effectively, a subclass of MY,
67ExtUtils::Makemaker, ExtUtils::Liblist and ExtUtils::MM_{Current OS}
68
69NOTE: The methods in MY are simply copied into PACK### rather than
70MY being a superclass of PACK###.  I don't remember the rationale.
71
72NOTE: ExtUtils::Liblist should be removed from the inheritence hiearchy
73and simply be called as functions.
74
75NOTE: Modules like File::Spec and Exporter have been omitted for clarity.
76
77
78The MM_* hierarchy
79******************
80
81                               MM_Win95   MM_NW5
82                                    \      /
83MM_BeOS  MM_Cygwin  MM_OS2  MM_VMS  MM_Win32  MM_DOS  MM_UWIN
84      \        |      |         |        /      /      /
85       ------------------------------------------------
86                           |       |
87                        MM_Unix    |
88                              |    |
89                              MM_Any
90
91NOTE: Each direct MM_Unix subclass is also an MM_Any subclass.  This
92is a temporary hack because MM_Unix overrides some MM_Any methods with
93Unix specific code.  It allows the non-Unix modules to see the
94original MM_Any implementations.
95
96NOTE: Modules like File::Spec and Exporter have been omitted for clarity.
97