changeset: 79745:f85c3f4d9b98 parent: 79743:36b2ca7dc893 parent: 79744:24d52d3060e8 user: Trent Nelson date: Tue Oct 16 08:17:11 2012 -0400 summary: Merge issue #15298: ensure _sysconfigdata is generated in build directory, Taken from upstream. --- Lib/sysconfig.py | 11 ++++++++++- Makefile.pre.in | 24 +++++++++++++----------- setup.py | 14 -------------- 3 files changed, 23 insertions(+), 26 deletions(-) Index: Python-3.3.0/Lib/sysconfig.py =================================================================== --- Python-3.3.0.orig/Lib/sysconfig.py +++ Python-3.3.0/Lib/sysconfig.py @@ -390,13 +390,22 @@ if _PYTHON_BUILD: 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: f.write('# system configuration generated and used by' ' the sysconfig module\n') f.write('build_time_vars = ') 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): """Initialize the module as appropriate for POSIX systems.""" # _sysconfigdata is generated at build time, see _generate_posix_vars() Index: Python-3.3.0/Makefile.pre.in =================================================================== --- Python-3.3.0.orig/Makefile.pre.in +++ Python-3.3.0/Makefile.pre.in @@ -410,8 +410,6 @@ Objects/unicodectype.o \ Objects/weakrefobject.o -SYSCONFIGDATA=$(srcdir)/Lib/_sysconfigdata.py - ########################################################################## # objects that get linked into the Python library LIBRARY_OBJS_OMIT_FROZEN= \ @@ -432,7 +430,7 @@ # Default target 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. profile-opt: @@ -466,15 +464,17 @@ $(BUILDPYTHON): Modules/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) $(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Modules/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST) -platform: $(BUILDPYTHON) $(SYSCONFIGDATA) +platform: $(BUILDPYTHON) $(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 -$(SYSCONFIGDATA): $(BUILDPYTHON) +# Create build directory and generate the sysconfig build-time data there. +# 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 # Build the shared modules -sharedmods: $(BUILDPYTHON) $(SYSCONFIGDATA) +sharedmods: $(BUILDPYTHON) pybuilddir.txt case $$MAKEFLAGS in *s*) quiet=-q; esac; \ $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \ $(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build @@ -1036,7 +1036,7 @@ else true; \ fi; \ done - @for i in $(srcdir)/Lib/*.py ; \ + @for i in $(srcdir)/Lib/*.py `cat pybuilddir.txt`/_sysconfigdata.py; \ do \ if test -x $$i; then \ $(INSTALL_SCRIPT) $$i $(DESTDIR)$(LIBDEST); \ @@ -1196,6 +1196,8 @@ --install-scripts=$(BINDIR) \ --install-platlib=$(DESTSHARED) \ --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 # framework-based Python. frameworkinstall installs everything, the @@ -1341,9 +1343,10 @@ find . -name '*.s[ol]' -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.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 $(SYSCONFIGDATA) -rm -f Modules/_testembed Modules/_freeze_importlib profile-removal: @@ -1367,7 +1370,6 @@ Modules/Setup Modules/Setup.local Modules/Setup.config \ Modules/ld_so_aix Modules/python.exp Misc/python.pc -rm -f python*-gdb.py - -rm -f pybuilddir.txt find $(srcdir) '(' -name '*.fdc' -o -name '*~' \ -o -name '[@,#]*' -o -name '*.old' \ -o -name '*.orig' -o -name '*.rej' \ Index: Python-3.3.0/setup.py =================================================================== --- Python-3.3.0.orig/setup.py +++ Python-3.3.0/setup.py @@ -33,10 +33,6 @@ # This global variable is used to hold the list of modules to be disabled. 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): """Add the directory 'dir' to the list 'dirlist' (after any relative directories) if: @@ -252,16 +248,6 @@ args['compiler_so'] = compiler + ' ' + ccshared + ' ' + cflags 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) longest = max([len(e.name) for e in self.extensions])