Added Joe Van Andel's 'get_python_inc()', adapted by me to supply
  the platform-neutral include dir by default and with Mac support.
Added 'get_python_lib()', inspired by 'get_python_inc()'.
Rewrote 'get_config_h_filename()' and 'get_makefile_filename()'
  in terms of 'get_python_inc()' and 'get_python_lib()'.
Changed '_init_nt()' and '_init_mac()' to use 'get_python_inc()' and
  'get_python_lib()' for directory names.
diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
index 2107ffe..49e58eb 100644
--- a/Lib/distutils/sysconfig.py
+++ b/Lib/distutils/sysconfig.py
@@ -17,20 +17,83 @@
 exec_prefix = os.path.normpath (sys.exec_prefix)
 
 
+def get_python_inc (plat_specific=0):
+    """Return the directory containing installed Python header files.
+       If 'plat_specific' is false (the default), this is the path to the
+       non-platform-specific header files, i.e. Python.h and so on;
+       otherwise, this is the path to platform-specific header files
+       (namely config.h)."""
+    
+    the_prefix = (plat_specific and exec_prefix or prefix)
+    if os.name == "posix":
+        return os.path.join (the_prefix, "include", "python" + sys.version[:3])
+    elif os.name == "nt":
+        return os.path.join (the_prefix, "Include") # include or Include?
+    elif os.name == "mac":
+        return os.path.join (the_prefix, "Include")
+    else:
+        raise DistutilsPlatformError, \
+              ("I don't know where Python installs its C header files " +
+               "on platform '%s'") % os.name
+
+
+def get_python_lib (plat_specific=0, standard_lib=0):
+    """Return the directory containing the Python library (standard or
+       site additions).  If 'plat_specific' is true, return the directory
+       containing platform-specific modules, i.e. any module from a
+       non-pure-Python module distribution; otherwise, return the
+       platform-shared library directory.  If 'standard_lib' is true,
+       return the directory containing standard Python library modules;
+       otherwise, return the directory for site-specific modules."""
+
+    the_prefix = (plat_specific and exec_prefix or prefix)
+       
+    if os.name == "posix":
+        libpython = os.path.join (the_prefix,
+                                  "lib", "python" + sys.version[:3])
+        if standard_lib:
+            return libpython
+        else:
+            return os.path.join (libpython, "site-packages")
+
+    elif os.name == "nt":
+        if standard_lib:
+            return os.path.join (the_prefix, "Lib")
+        else:
+            return the_prefix
+
+    elif os.name == "mac":
+        if platform_specific:
+            if standard_lib:
+                return os.path.join (exec_prefix, "Mac", "Plugins")
+            else:
+                raise DistutilsPlatformError, \
+                      "OK, where DO site-specific extensions go on the Mac?"
+        else:
+            if standard_lib:
+                return os.path.join (prefix, "Lib")
+            else:
+                raise DistutilsPlatformError, \
+                      "OK, where DO site-specific modules go on the Mac?"
+    else:
+        raise DistutilsPlatformError, \
+              ("I don't know where Python installs its library " +
+               "on platform '%s'") % os.name
+
+# get_python_lib ()
+        
+
 def get_config_h_filename():
     """Return full pathname of installed config.h file."""
-    if os.name == "nt":
-        return os.path.join(exec_prefix, "include", "config.h")
-    else:
-        return os.path.join(exec_prefix,
-                            "include", "python" + sys.version[:3],
-                            "config.h")
+    inc_dir = get_python_inc (plat_specific=1)
+    return os.path.join (inc_dir, "config.h")
+
 
 def get_makefile_filename():
     """Return full pathname of installed Makefile from the Python build."""
-    return os.path.join(exec_prefix,
-                        "lib", "python" + sys.version[:3],
-                        "config", "Makefile")
+    lib_dir = get_python_lib (plat_specific=1, standard_lib=1)
+    return os.path.join (lib_dir, "config", "Makefile")
+
 
 def parse_config_h(fp, g=None):
     """Parse a config.h-style file.  A dictionary containing name/value
@@ -143,11 +206,11 @@
     # load config.h, though I don't know how useful this is
     parse_config_h(open(get_config_h_filename()), g)
     # set basic install directories
-    g['LIBDEST'] = os.path.join(exec_prefix, "Lib")
-    g['BINLIBDEST'] = os.path.join(exec_prefix, "Lib")
+    g['LIBDEST'] = get_python_lib (plat_specific=0, standard_lib=1)
+    g['BINLIBDEST'] = get_python_lib (plat_specific=1, standard_lib=1)
 
     # XXX hmmm.. a normal install puts include files here
-    g['INCLUDEPY'] = os.path.join(prefix, 'include')
+    g['INCLUDEPY'] = get_python_inc (plat_specific=0)
 
     g['SO'] = '.pyd'
     g['exec_prefix'] = exec_prefix
@@ -161,15 +224,17 @@
     parse_config_h(open(
             os.path.join(sys.exec_prefix, "Mac", "Include", "config.h")), g)
     # set basic install directories
-    g['LIBDEST']=os.path.join(sys.exec_prefix, "Lib")
-    g['BINLIBDEST']= os.path.join(sys.exec_prefix, "Mac", "Plugins")
+    g['LIBDEST'] = get_python_lib (plat_specific=0, standard_lib=1)
+    g['BINLIBDEST'] = get_python_lib (plat_specific=1, standard_lib=1)
 
     # XXX hmmm.. a normal install puts include files here
-    g['INCLUDEPY'] = os.path.join (sys.prefix, 'Include' )
+    g['INCLUDEPY'] = get_python_inc (plat_specific=0)
 
     g['SO'] = '.ppc.slb'
     g['exec_prefix'] = sys.exec_prefix
     print sys.prefix
+
+    # XXX are these used anywhere?
     g['install_lib'] = os.path.join(sys.exec_prefix, "Lib")
     g['install_platlib'] = os.path.join(sys.exec_prefix, "Mac", "Lib")