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 | | | |
5dca256e |
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 |
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 |
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 |
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 |
83 | MM_BeOS MM_Cygwin MM_OS2 MM_VMS MM_Win32 MM_DOS MM_UWIN |
84 | \ | | | / / / |
85 | ------------------------------------------------ |
479d2113 |
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. |