Commit ee528ccc authored by Trent Nelson's avatar Trent Nelson

Issue #15298: fix an OS X bootstrap issue with _sysconfigdata.py.

Reported by: Ned Deily.
parent 547298c9
...@@ -390,18 +390,31 @@ def _generate_posix_vars(): ...@@ -390,18 +390,31 @@ def _generate_posix_vars():
if _PYTHON_BUILD: if _PYTHON_BUILD:
vars['LDSHARED'] = vars['BLDSHARED'] vars['LDSHARED'] = vars['BLDSHARED']
pybuilddir = 'build/lib.%s-%s' % (get_platform(), sys.version[:3]) # There's a chicken-and-egg situation on OS X with regards to the
if hasattr(sys, "gettotalrefcount"): # _sysconfigdata module after the changes introduced by #15298:
pybuilddir += '-pydebug' # get_config_vars() is called by get_platform() as part of the
os.makedirs(pybuilddir, exist_ok=True) # `make pybuilddir.txt` target -- which is a precursor to the
destfile = os.path.join(pybuilddir, '_sysconfigdata.py') # _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: with open(destfile, 'w', encoding='utf8') as f:
f.write('# system configuration generated and used by' f.write('# system configuration generated and used by'
' the sysconfig module\n') ' the sysconfig module\n')
f.write('build_time_vars = ') f.write('build_time_vars = ')
pprint.pprint(vars, stream=f) 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 # Create file used for sys.path fixup -- see Modules/getpath.c
with open('pybuilddir.txt', 'w', encoding='ascii') as f: with open('pybuilddir.txt', 'w', encoding='ascii') as f:
f.write(pybuilddir) f.write(pybuilddir)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment