ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/staticperl/perl/lib/ExtUtils/NOTES
Revision: 1.1
Committed: Thu Jun 30 14:27:11 2005 UTC (21 years, 3 months ago) by root
Branch: MAIN
CVS Tags: PERL-5-8-7, HEAD
Branch point for: PERL
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.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.