Issue #15298: ensure _sysconfigdata is generated in build directory,
not source directory. Patch by Richard Oudkerk (sbt).
This commit is contained in:
parent
8a42022748
commit
c101bf32c4
|
@ -390,13 +390,22 @@ def _generate_posix_vars():
|
||||||
if _PYTHON_BUILD:
|
if _PYTHON_BUILD:
|
||||||
vars['LDSHARED'] = vars['BLDSHARED']
|
vars['LDSHARED'] = vars['BLDSHARED']
|
||||||
|
|
||||||
destfile = os.path.join(os.path.dirname(__file__), '_sysconfigdata.py')
|
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')
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
|
# Create file used for sys.path fixup -- see Modules/getpath.c
|
||||||
|
with open('pybuilddir.txt', 'w', encoding='ascii') as f:
|
||||||
|
f.write(pybuilddir)
|
||||||
|
|
||||||
def _init_posix(vars):
|
def _init_posix(vars):
|
||||||
"""Initialize the module as appropriate for POSIX systems."""
|
"""Initialize the module as appropriate for POSIX systems."""
|
||||||
# _sysconfigdata is generated at build time, see _generate_posix_vars()
|
# _sysconfigdata is generated at build time, see _generate_posix_vars()
|
||||||
|
|
|
@ -410,8 +410,6 @@ OBJECT_OBJS= \
|
||||||
Objects/unicodectype.o \
|
Objects/unicodectype.o \
|
||||||
Objects/weakrefobject.o
|
Objects/weakrefobject.o
|
||||||
|
|
||||||
SYSCONFIGDATA=$(srcdir)/Lib/_sysconfigdata.py
|
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
# objects that get linked into the Python library
|
# objects that get linked into the Python library
|
||||||
LIBRARY_OBJS_OMIT_FROZEN= \
|
LIBRARY_OBJS_OMIT_FROZEN= \
|
||||||
|
@ -432,7 +430,7 @@ LIBRARY_OBJS= \
|
||||||
|
|
||||||
# Default target
|
# Default target
|
||||||
all: build_all
|
all: build_all
|
||||||
build_all: $(BUILDPYTHON) $(SYSCONFIGDATA) oldsharedmods sharedmods gdbhooks Modules/_testembed
|
build_all: $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks Modules/_testembed
|
||||||
|
|
||||||
# Compile a binary with gcc profile guided optimization.
|
# Compile a binary with gcc profile guided optimization.
|
||||||
profile-opt:
|
profile-opt:
|
||||||
|
@ -466,17 +464,19 @@ coverage:
|
||||||
$(BUILDPYTHON): Modules/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
|
$(BUILDPYTHON): Modules/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
|
||||||
$(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Modules/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
|
$(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Modules/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
|
||||||
|
|
||||||
platform: $(BUILDPYTHON) $(SYSCONFIGDATA)
|
platform: $(BUILDPYTHON) pybuilddir.txt
|
||||||
$(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print(get_platform()+"-"+sys.version[0:3])' >platform
|
$(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print(get_platform()+"-"+sys.version[0:3])' >platform
|
||||||
|
|
||||||
# Generate the sysconfig build-time data
|
# Create build directory and generate the sysconfig build-time data there.
|
||||||
$(SYSCONFIGDATA): $(BUILDPYTHON)
|
# pybuilddir.txt contains the name of the build dir and is used for
|
||||||
|
# sys.path fixup -- see Modules/getpath.c.
|
||||||
|
pybuilddir.txt: $(BUILDPYTHON)
|
||||||
$(RUNSHARED) $(PYTHON_FOR_BUILD) -S -m sysconfig --generate-posix-vars
|
$(RUNSHARED) $(PYTHON_FOR_BUILD) -S -m sysconfig --generate-posix-vars
|
||||||
|
|
||||||
# Build the shared modules
|
# Build the shared modules
|
||||||
# MAKEFLAGS are sorted and normalized. Under GNU make the 's' for
|
# MAKEFLAGS are sorted and normalized. Under GNU make the 's' for
|
||||||
# -s, --silent or --quiet is always the first char.
|
# -s, --silent or --quiet is always the first char.
|
||||||
sharedmods: $(BUILDPYTHON) $(SYSCONFIGDATA)
|
sharedmods: $(BUILDPYTHON) pybuilddir.txt
|
||||||
@case "$$MAKEFLAGS" in \
|
@case "$$MAKEFLAGS" in \
|
||||||
s*) quiet="-q";; \
|
s*) quiet="-q";; \
|
||||||
*) quiet="";; \
|
*) quiet="";; \
|
||||||
|
@ -1043,7 +1043,7 @@ libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c
|
||||||
else true; \
|
else true; \
|
||||||
fi; \
|
fi; \
|
||||||
done
|
done
|
||||||
@for i in $(srcdir)/Lib/*.py ; \
|
@for i in $(srcdir)/Lib/*.py `cat pybuilddir.txt`/_sysconfigdata.py; \
|
||||||
do \
|
do \
|
||||||
if test -x $$i; then \
|
if test -x $$i; then \
|
||||||
$(INSTALL_SCRIPT) $$i $(DESTDIR)$(LIBDEST); \
|
$(INSTALL_SCRIPT) $$i $(DESTDIR)$(LIBDEST); \
|
||||||
|
@ -1203,6 +1203,8 @@ sharedinstall: sharedmods
|
||||||
--install-scripts=$(BINDIR) \
|
--install-scripts=$(BINDIR) \
|
||||||
--install-platlib=$(DESTSHARED) \
|
--install-platlib=$(DESTSHARED) \
|
||||||
--root=$(DESTDIR)/
|
--root=$(DESTDIR)/
|
||||||
|
-rm $(DESTDIR)$(DESTSHARED)/_sysconfigdata.py
|
||||||
|
-rm -r $(DESTDIR)$(DESTSHARED)/__pycache__
|
||||||
|
|
||||||
# Here are a couple of targets for MacOSX again, to install a full
|
# Here are a couple of targets for MacOSX again, to install a full
|
||||||
# framework-based Python. frameworkinstall installs everything, the
|
# framework-based Python. frameworkinstall installs everything, the
|
||||||
|
@ -1348,9 +1350,10 @@ clean: pycremoval
|
||||||
find . -name '*.s[ol]' -exec rm -f {} ';'
|
find . -name '*.s[ol]' -exec rm -f {} ';'
|
||||||
find . -name '*.so.[0-9]*.[0-9]*' -exec rm -f {} ';'
|
find . -name '*.so.[0-9]*.[0-9]*' -exec rm -f {} ';'
|
||||||
find build -name 'fficonfig.h' -exec rm -f {} ';' || true
|
find build -name 'fficonfig.h' -exec rm -f {} ';' || true
|
||||||
find build -name 'fficonfig.py' -exec rm -f {} ';' || true
|
find build -name '*.py' -exec rm -f {} ';' || true
|
||||||
|
find build -name '*.py[co]' -exec rm -f {} ';' || true
|
||||||
|
-rm -f pybuilddir.txt
|
||||||
-rm -f Lib/lib2to3/*Grammar*.pickle
|
-rm -f Lib/lib2to3/*Grammar*.pickle
|
||||||
-rm -f $(SYSCONFIGDATA)
|
|
||||||
-rm -f Modules/_testembed Modules/_freeze_importlib
|
-rm -f Modules/_testembed Modules/_freeze_importlib
|
||||||
|
|
||||||
profile-removal:
|
profile-removal:
|
||||||
|
@ -1374,7 +1377,6 @@ distclean: clobber
|
||||||
Modules/Setup Modules/Setup.local Modules/Setup.config \
|
Modules/Setup Modules/Setup.local Modules/Setup.config \
|
||||||
Modules/ld_so_aix Modules/python.exp Misc/python.pc
|
Modules/ld_so_aix Modules/python.exp Misc/python.pc
|
||||||
-rm -f python*-gdb.py
|
-rm -f python*-gdb.py
|
||||||
-rm -f pybuilddir.txt
|
|
||||||
find $(srcdir) '(' -name '*.fdc' -o -name '*~' \
|
find $(srcdir) '(' -name '*.fdc' -o -name '*~' \
|
||||||
-o -name '[@,#]*' -o -name '*.old' \
|
-o -name '[@,#]*' -o -name '*.old' \
|
||||||
-o -name '*.orig' -o -name '*.rej' \
|
-o -name '*.orig' -o -name '*.rej' \
|
||||||
|
|
|
@ -127,6 +127,9 @@ Tests
|
||||||
Build
|
Build
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
- Issue #15298: ensure _sysconfigdata is generated in build directory, not
|
||||||
|
source directory.
|
||||||
|
|
||||||
- Issue #15833: Fix a regression in 3.3 that resulted in exceptions being
|
- Issue #15833: Fix a regression in 3.3 that resulted in exceptions being
|
||||||
raised if importlib failed to write byte-compiled files. This affected
|
raised if importlib failed to write byte-compiled files. This affected
|
||||||
attempts to build Python out-of-tree from a read-only source directory.
|
attempts to build Python out-of-tree from a read-only source directory.
|
||||||
|
@ -134,8 +137,8 @@ Build
|
||||||
- Issue #15923: Fix a mistake in ``asdl_c.py`` that resulted in a TypeError
|
- Issue #15923: Fix a mistake in ``asdl_c.py`` that resulted in a TypeError
|
||||||
after 2801bf875a24 (see #15801).
|
after 2801bf875a24 (see #15801).
|
||||||
|
|
||||||
- Issue #15819: Make sure we can build Python out-of-tree from a readonly source
|
- Issue #15819: Make sure we can build Python out-of-tree from a read-only
|
||||||
directory. (Somewhat related to issue #9860.)
|
source directory. (Somewhat related to issue #9860.)
|
||||||
|
|
||||||
Documentation
|
Documentation
|
||||||
-------------
|
-------------
|
||||||
|
|
14
setup.py
14
setup.py
|
@ -33,10 +33,6 @@ COMPILED_WITH_PYDEBUG = ('--with-pydebug' in sysconfig.get_config_var("CONFIG_AR
|
||||||
# This global variable is used to hold the list of modules to be disabled.
|
# This global variable is used to hold the list of modules to be disabled.
|
||||||
disabled_module_list = []
|
disabled_module_list = []
|
||||||
|
|
||||||
# File which contains the directory for shared mods (for sys.path fixup
|
|
||||||
# when running from the build dir, see Modules/getpath.c)
|
|
||||||
_BUILDDIR_COOKIE = "pybuilddir.txt"
|
|
||||||
|
|
||||||
def add_dir_to_list(dirlist, dir):
|
def add_dir_to_list(dirlist, dir):
|
||||||
"""Add the directory 'dir' to the list 'dirlist' (after any relative
|
"""Add the directory 'dir' to the list 'dirlist' (after any relative
|
||||||
directories) if:
|
directories) if:
|
||||||
|
@ -252,16 +248,6 @@ class PyBuildExt(build_ext):
|
||||||
args['compiler_so'] = compiler + ' ' + ccshared + ' ' + cflags
|
args['compiler_so'] = compiler + ' ' + ccshared + ' ' + cflags
|
||||||
self.compiler.set_executables(**args)
|
self.compiler.set_executables(**args)
|
||||||
|
|
||||||
# Not only do we write the builddir cookie, but we manually install
|
|
||||||
# the shared modules directory if it isn't already in sys.path.
|
|
||||||
# Otherwise trying to import the extensions after building them
|
|
||||||
# will fail.
|
|
||||||
with open(_BUILDDIR_COOKIE, "wb") as f:
|
|
||||||
f.write(self.build_lib.encode('utf-8', 'surrogateescape'))
|
|
||||||
abs_build_lib = os.path.join(os.getcwd(), self.build_lib)
|
|
||||||
if abs_build_lib not in sys.path:
|
|
||||||
sys.path.append(abs_build_lib)
|
|
||||||
|
|
||||||
build_ext.build_extensions(self)
|
build_ext.build_extensions(self)
|
||||||
|
|
||||||
longest = max([len(e.name) for e in self.extensions])
|
longest = max([len(e.name) for e in self.extensions])
|
||||||
|
|
Loading…
Reference in New Issue