summaryrefslogtreecommitdiff
path: root/lib/ExtUtils/NOTES
diff options
context:
space:
mode:
authorMichael G. Schwern <schwern@pobox.com>2003-03-30 18:42:58 -0800
committerJarkko Hietaniemi <jhi@iki.fi>2003-03-31 09:54:52 +0000
commit479d2113ccb2226821ef75027b9186d1d0e367e9 (patch)
treea9b0815b35ca20eb8b0e60c5a7881b0ed3033e7e /lib/ExtUtils/NOTES
parentf18b2318c1a1ea8f33016f2bf34abc4ac137b8e3 (diff)
downloadperl-479d2113ccb2226821ef75027b9186d1d0e367e9.tar.gz
ExtUtils::MakeMaker 6.03 -> 6.06_05ish
Message-ID: <20030331104257.GB15327@windhund.schwern.org> p4raw-id: //depot/perl@19099
Diffstat (limited to 'lib/ExtUtils/NOTES')
-rw-r--r--lib/ExtUtils/NOTES102
1 files changed, 102 insertions, 0 deletions
diff --git a/lib/ExtUtils/NOTES b/lib/ExtUtils/NOTES
new file mode 100644
index 0000000000..837167c026
--- /dev/null
+++ b/lib/ExtUtils/NOTES
@@ -0,0 +1,102 @@
+The Simplified MakeMaker class hierarchy
+****************************************
+
+What most people need to know.
+
+(Subclasses on top.)
+
+ MY
+ |
+ ExtUtils::MakeMaker
+ |
+ ExtUtils::MM_{Current OS}
+ |
+ ExtUtils::MM_Unix
+ |
+ ExtUtils::MM_Any
+
+The object actually used is of the class MY which allows you to
+override bits of MakeMaker inside your Makefile.PL by declaring
+MY::foo() methods.
+
+
+The Real MakeMaker class hierarchy
+**********************************
+
+You wish it was that simple.
+
+Here's how it really works.
+
+ PACK### (created each call to ExtUtils::MakeMaker->new)
+ . |
+ (mixin) |
+ . |
+ MY (created by ExtUtils::MY) |
+ | |
+ ExtUtils::MY MM (created by ExtUtils::MM)
+ | | |
+ ExtUtils::MM ExtUtils::MM_{Current OS}
+ | | .
+ | |
+ ExtUtils::Liblist ExtUtils::MakeMaker .
+ |
+ ExtUtils::Liblist::Kid .
+
+ (variable subclass)
+
+ .
+
+ ExtUtils::MM_{NonUnix}. . . . . . . . . . . . . . . .
+ |
+ ExtUtils::MM_Unix . . . . . . . . . . . . . . . . . .
+ |
+ ExtUtils::MM_Any
+
+
+NOTE: Yes, this is a mess. See
+http://archive.develooper.com/makemaker@perl.org/msg00134.html
+for some history.
+
+NOTE: When ExtUtils::MM is loaded it chooses a superclass for MM from
+amongst the ExtUtils::MM_* modules based on the current operating
+system.
+
+NOTE: ExtUtils::MM_{Current OS} represents one of the ExtUtils::MM_*
+modules except ExtUtils::MM_Any.
+
+NOTE: ExtUtils::MM_{NonUnix} represents all of the ExtUtils::MM_*
+modules except ExtUtils::MM_Any and ExtUtils::MM_Unix.
+
+NOTE: The main object used by MakeMaker is a PACK### object, *not*
+ExtUtils::MakeMaker. It is, effectively, a subclass of MY,
+ExtUtils::Makemaker, ExtUtils::Liblist and an ExtUtils::MM_* class
+appropriate for your operating system.
+
+NOTE: The methods in MY are simply copied into PACK### rather than
+MY being a superclass of PACK###. I don't remember the rationale.
+
+NOTE: ExtUtils::Liblist should be removed from the inheritence hiearchy
+and simply be called as functions.
+
+NOTE: Modules like File::Spec and Exporter have been omitted for clarity.
+
+
+The MM_* hierarchy
+******************
+
+ MM_Win95 MM_NW5
+ \ /
+MM_BeOS MM_Cygwin MM_OS2 MM_VMS MM_Win32 MM_DOS MM_MacOS MM_UWIN
+ \ | | | / / / /
+ ---------------------------------------------------------
+ | |
+ MM_Unix |
+ | |
+ MM_Any
+
+NOTE: Each direct MM_Unix subclass is also an MM_Any subclass. This
+is a temporary hack because MM_Unix overrides some MM_Any methods with
+Unix specific code. It allows the non-Unix modules to see the
+original MM_Any implementations.
+
+NOTE: Modules like File::Spec and Exporter have been omitted for clarity.