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
|
---|
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 |
|
---|
54 | NOTE: Yes, this is a mess. See
|
---|
55 | http://archive.develooper.com/[email protected]/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_*
|
---|
63 | modules except ExtUtils::MM_Any chosen based on your operating system.
|
---|
64 |
|
---|
65 | NOTE: The main object used by MakeMaker is a PACK### object, *not*
|
---|
66 | ExtUtils::MakeMaker. It is, effectively, a subclass of MY,
|
---|
67 | ExtUtils::Makemaker, ExtUtils::Liblist and ExtUtils::MM_{Current OS}
|
---|
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 | \ /
|
---|
83 | MM_BeOS MM_Cygwin MM_OS2 MM_VMS MM_Win32 MM_DOS MM_UWIN
|
---|
84 | \ | | | / / /
|
---|
85 | ------------------------------------------------
|
---|
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.
|
---|