| changeset: 79745:f85c3f4d9b98 |
| parent: 79743:36b2ca7dc893 |
| parent: 79744:24d52d3060e8 |
| user: Trent Nelson <trent@trent.me> |
| 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]) |