[Python-checkins] cpython (merge 3.3 -> default): Merge issue #15298: fix an OS X bootstrap issue with _sysconfigdata.py.

trent.nelson python-checkins at python.org
Wed Oct 17 10:25:01 CEST 2012


http://hg.python.org/cpython/rev/429774e8d9f9
changeset:   79779:429774e8d9f9
parent:      79777:47b9732696eb
parent:      79778:66959d419369
user:        Trent Nelson <trent at trent.me>
date:        Wed Oct 17 04:24:44 2012 -0400
summary:
  Merge issue #15298: fix an OS X bootstrap issue with _sysconfigdata.py.

files:
  Lib/sysconfig.py |  25 +++++++++++++++++++------
  1 files changed, 19 insertions(+), 6 deletions(-)


diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
--- a/Lib/sysconfig.py
+++ b/Lib/sysconfig.py
@@ -371,18 +371,31 @@
     if _PYTHON_BUILD:
         vars['LDSHARED'] = vars['BLDSHARED']
 
-    pybuilddir = 'build/lib.%s-%s' % (get_platform(), sys.version[:3])
-    if hasattr(sys, "gettotalrefcount"):
-        pybuilddir += '-pydebug'
-    os.makedirs(pybuilddir, exist_ok=True)
-    destfile = os.path.join(pybuilddir, '_sysconfigdata.py')
-
+    # There's a chicken-and-egg situation on OS X with regards to the
+    # _sysconfigdata module after the changes introduced by #15298:
+    # get_config_vars() is called by get_platform() as part of the
+    # `make pybuilddir.txt` target -- which is a precursor to the
+    # _sysconfigdata.py module being constructed.  Unfortunately,
+    # get_config_vars() eventually calls _init_posix(), which attempts
+    # to import _sysconfigdata, which we won't have built yet.  So,
+    # write out _sysconfigdata.py to the current directory first,
+    # then call get_platform() to get the pybuilddir, then move it.
+    destfile = '_sysconfigdata.py'
     with open(destfile, 'w', encoding='utf8') as f:
         f.write('# system configuration generated and used by'
                 ' the sysconfig module\n')
         f.write('build_time_vars = ')
         pprint.pprint(vars, stream=f)
 
+    pybuilddir = 'build/lib.%s-%s' % (get_platform(), sys.version[:3])
+    if hasattr(sys, "gettotalrefcount"):
+        pybuilddir += '-pydebug'
+    os.makedirs(pybuilddir, exist_ok=True)
+    target = os.path.join(pybuilddir, destfile)
+
+    # Relocate _sysconfigdata.py into its final home.
+    os.rename(destfile, target)
+
     # Create file used for sys.path fixup -- see Modules/getpath.c
     with open('pybuilddir.txt', 'w', encoding='ascii') as f:
         f.write(pybuilddir)

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list