Commit | Line | Data |
---|---|---|
479d2113 MS |
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 | | | | |
5dca256e RGS |
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 | |
479d2113 MS |
52 | |
53 | ||
54 | NOTE: Yes, this is a mess. See | |
55 | http://archive.develooper.com/makemaker@perl.org/msg00134.html | |
56 | for some history. | |
57 | ||
58 | NOTE: When ExtUtils::MM is loaded it chooses a superclass for MM from | |
59 | amongst the ExtUtils::MM_* modules based on the current operating | |
60 | system. | |
61 | ||
62 | NOTE: ExtUtils::MM_{Current OS} represents one of the ExtUtils::MM_* | |
5dca256e | 63 | modules except ExtUtils::MM_Any chosen based on your operating system. |
479d2113 MS |
64 | |
65 | NOTE: The main object used by MakeMaker is a PACK### object, *not* | |
66 | ExtUtils::MakeMaker. It is, effectively, a subclass of MY, | |
5dca256e | 67 | ExtUtils::Makemaker, ExtUtils::Liblist and ExtUtils::MM_{Current OS} |
479d2113 MS |
68 | |
69 | NOTE: The methods in MY are simply copied into PACK### rather than | |
70 | MY being a superclass of PACK###. I don't remember the rationale. | |
71 | ||
72 | NOTE: ExtUtils::Liblist should be removed from the inheritence hiearchy | |
73 | and simply be called as functions. | |
74 | ||
75 | NOTE: Modules like File::Spec and Exporter have been omitted for clarity. | |
76 | ||
77 | ||
78 | The MM_* hierarchy | |
79 | ****************** | |
80 | ||
81 | MM_Win95 MM_NW5 | |
82 | \ / | |
5dca256e RGS |
83 | MM_BeOS MM_Cygwin MM_OS2 MM_VMS MM_Win32 MM_DOS MM_UWIN |
84 | \ | | | / / / | |
85 | ------------------------------------------------ | |
479d2113 MS |
86 | | | |
87 | MM_Unix | | |
88 | | | | |
89 | MM_Any | |
90 | ||
91 | NOTE: Each direct MM_Unix subclass is also an MM_Any subclass. This | |
92 | is a temporary hack because MM_Unix overrides some MM_Any methods with | |
93 | Unix specific code. It allows the non-Unix modules to see the | |
94 | original MM_Any implementations. | |
95 | ||
96 | NOTE: Modules like File::Spec and Exporter have been omitted for clarity. |