Commit | Line | Data |
479d2113 |
1 | The Simplified MakeMaker class hierarchy |
2 | **************************************** |
3 | |
4 | What 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 | |
18 | The object actually used is of the class MY which allows you to |
19 | override bits of MakeMaker inside your Makefile.PL by declaring |
20 | MY::foo() methods. |
21 | |
22 | |
23 | The Real MakeMaker class hierarchy |
24 | ********************************** |
25 | |
26 | You wish it was that simple. |
27 | |
28 | Here'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 ExtUtils::MM_{Current OS} |
39 | | | . |
40 | | | |
41 | ExtUtils::Liblist ExtUtils::MakeMaker . |
42 | | |
43 | ExtUtils::Liblist::Kid . |
44 | |
45 | (variable subclass) |
46 | |
47 | . |
48 | |
49 | ExtUtils::MM_{NonUnix}. . . . . . . . . . . . . . . . |
50 | | |
51 | ExtUtils::MM_Unix . . . . . . . . . . . . . . . . . . |
52 | | |
53 | ExtUtils::MM_Any |
54 | |
55 | |
56 | NOTE: Yes, this is a mess. See |
57 | http://archive.develooper.com/makemaker@perl.org/msg00134.html |
58 | for some history. |
59 | |
60 | NOTE: When ExtUtils::MM is loaded it chooses a superclass for MM from |
61 | amongst the ExtUtils::MM_* modules based on the current operating |
62 | system. |
63 | |
64 | NOTE: ExtUtils::MM_{Current OS} represents one of the ExtUtils::MM_* |
65 | modules except ExtUtils::MM_Any. |
66 | |
67 | NOTE: ExtUtils::MM_{NonUnix} represents all of the ExtUtils::MM_* |
68 | modules except ExtUtils::MM_Any and ExtUtils::MM_Unix. |
69 | |
70 | NOTE: The main object used by MakeMaker is a PACK### object, *not* |
71 | ExtUtils::MakeMaker. It is, effectively, a subclass of MY, |
72 | ExtUtils::Makemaker, ExtUtils::Liblist and an ExtUtils::MM_* class |
73 | appropriate for your operating system. |
74 | |
75 | NOTE: The methods in MY are simply copied into PACK### rather than |
76 | MY being a superclass of PACK###. I don't remember the rationale. |
77 | |
78 | NOTE: ExtUtils::Liblist should be removed from the inheritence hiearchy |
79 | and simply be called as functions. |
80 | |
81 | NOTE: Modules like File::Spec and Exporter have been omitted for clarity. |
82 | |
83 | |
84 | The MM_* hierarchy |
85 | ****************** |
86 | |
87 | MM_Win95 MM_NW5 |
88 | \ / |
89 | MM_BeOS MM_Cygwin MM_OS2 MM_VMS MM_Win32 MM_DOS MM_MacOS MM_UWIN |
90 | \ | | | / / / / |
91 | --------------------------------------------------------- |
92 | | | |
93 | MM_Unix | |
94 | | | |
95 | MM_Any |
96 | |
97 | NOTE: Each direct MM_Unix subclass is also an MM_Any subclass. This |
98 | is a temporary hack because MM_Unix overrides some MM_Any methods with |
99 | Unix specific code. It allows the non-Unix modules to see the |
100 | original MM_Any implementations. |
101 | |
102 | NOTE: Modules like File::Spec and Exporter have been omitted for clarity. |