A potential fix for non-empty LD in Unix.
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / NOTES
CommitLineData
479d2113 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 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
56NOTE: Yes, this is a mess. See
57http://archive.develooper.com/makemaker@perl.org/msg00134.html
58for some history.
59
60NOTE: When ExtUtils::MM is loaded it chooses a superclass for MM from
61amongst the ExtUtils::MM_* modules based on the current operating
62system.
63
64NOTE: ExtUtils::MM_{Current OS} represents one of the ExtUtils::MM_*
65modules except ExtUtils::MM_Any.
66
67NOTE: ExtUtils::MM_{NonUnix} represents all of the ExtUtils::MM_*
68modules except ExtUtils::MM_Any and ExtUtils::MM_Unix.
69
70NOTE: The main object used by MakeMaker is a PACK### object, *not*
71ExtUtils::MakeMaker. It is, effectively, a subclass of MY,
72ExtUtils::Makemaker, ExtUtils::Liblist and an ExtUtils::MM_* class
73appropriate for your operating system.
74
75NOTE: The methods in MY are simply copied into PACK### rather than
76MY being a superclass of PACK###. I don't remember the rationale.
77
78NOTE: ExtUtils::Liblist should be removed from the inheritence hiearchy
79and simply be called as functions.
80
81NOTE: Modules like File::Spec and Exporter have been omitted for clarity.
82
83
84The MM_* hierarchy
85******************
86
87 MM_Win95 MM_NW5
88 \ /
89MM_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
97NOTE: Each direct MM_Unix subclass is also an MM_Any subclass. This
98is a temporary hack because MM_Unix overrides some MM_Any methods with
99Unix specific code. It allows the non-Unix modules to see the
100original MM_Any implementations.
101
102NOTE: Modules like File::Spec and Exporter have been omitted for clarity.