Factor out the build_ext fixup for shared Python builds.

I need this to fix the failing test_install.
diff --git a/Lib/distutils/tests/support.py b/Lib/distutils/tests/support.py
index 4927711..ffef98b 100644
--- a/Lib/distutils/tests/support.py
+++ b/Lib/distutils/tests/support.py
@@ -1,5 +1,6 @@
 """Support code for distutils test cases."""
 import os
+import sys
 import shutil
 import tempfile
 import unittest
@@ -165,3 +166,29 @@
     for path in candidates:
         if os.path.exists(path):
             return path
+
+
+def fixup_build_ext(cmd):
+    """Function needed to make build_ext tests pass on shared builds.
+
+    When Python was build with --enable-shared, -L. is not good enough to find
+    the libpython<blah>.so.  This is because regrtest runs it under a tempdir,
+    not in the top level where the .so lives.  By the time we've gotten here,
+    Python's already been chdir'd to the tempdir.  This function work arounds
+    that.  Example use:
+
+        cmd = build_ext(dist)
+        support.fixup_build_ext(cmd)
+        cmd.ensure_finalized()
+    """
+    # To further add to the fun, we can't just add library_dirs to the
+    # Extension() instance because that doesn't get plumbed through to the
+    # final compiler command.
+    if (sysconfig.get_config_var('Py_ENABLE_SHARED') and
+        not sys.platform.startswith('win')):
+        runshared = sysconfig.get_config_var('RUNSHARED')
+        if runshared is None:
+            cmd.library_dirs = ['.']
+        else:
+            name, equals, value = runshared.partition('=')
+            cmd.library_dirs = value.split(os.pathsep)