diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
index 48f3fe4..3567db8 100644
--- a/Lib/distutils/sysconfig.py
+++ b/Lib/distutils/sysconfig.py
@@ -56,6 +56,18 @@
     """
     return sys.version[:3]
 
+def _get_build_dir(name, plat_specific):
+    # Assume the executable is in the build directory.  The
+    # pyconfig.h file should be in the same directory.  Since
+    # the build directory may not be the source directory, we
+    # must use "srcdir" from the makefile to find the "Include"
+    # directory.
+    base = os.path.dirname(os.path.abspath(sys.executable))
+    if plat_specific:
+        return base
+    else:
+        thedir = os.path.join(get_config_var('srcdir'), name)
+        return os.path.normpath(thedir)
 
 def get_python_inc(plat_specific=0, prefix=None):
     """Return the directory containing installed Python header files.
@@ -72,17 +84,7 @@
         prefix = plat_specific and EXEC_PREFIX or PREFIX
     if os.name == "posix":
         if python_build:
-            # Assume the executable is in the build directory.  The
-            # pyconfig.h file should be in the same directory.  Since
-            # the build directory may not be the source directory, we
-            # must use "srcdir" from the makefile to find the "Include"
-            # directory.
-            base = os.path.dirname(os.path.abspath(sys.executable))
-            if plat_specific:
-                return base
-            else:
-                incdir = os.path.join(get_config_var('srcdir'), 'Include')
-                return os.path.normpath(incdir)
+            return _get_build_dir('Include', plat_specific)
         return os.path.join(prefix, "include", "python" + get_python_version())
     elif os.name == "nt":
         return os.path.join(prefix, "include")
@@ -117,6 +119,8 @@
         prefix = plat_specific and EXEC_PREFIX or PREFIX
 
     if os.name == "posix":
+        if python_build:
+            return _get_build_dir('Lib', plat_specific)
         libpython = os.path.join(prefix,
                                  "lib", "python" + get_python_version())
         if standard_lib:
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index 134d923..42b957c 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -1439,6 +1439,12 @@
         """
         return self.logger.isEnabledFor(level)
 
+    def hasHandlers(self):
+        """
+        See if the underlying logger has any handlers.
+        """
+        return self.logger.hasHandlers()
+
 root = RootLogger(WARNING)
 Logger.root = root
 Logger.manager = Manager(Logger.root)
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
index 147bd6d..7372e3e 100644
--- a/Lib/sysconfig.py
+++ b/Lib/sysconfig.py
@@ -123,8 +123,9 @@
 
 if _PYTHON_BUILD:
     for scheme in ('posix_prefix', 'posix_home'):
-        _INSTALL_SCHEMES[scheme]['include'] = '{srcdir}/Include'
+        _INSTALL_SCHEMES[scheme]['include'] = '{projectbase}/Include'
         _INSTALL_SCHEMES[scheme]['platinclude'] = '{projectbase}/.'
+        _INSTALL_SCHEMES[scheme]['stdlib'] = '{projectbase}/Lib'
 
 def _subst_vars(s, local_vars):
     try:
