buildroot/package/python3/python3-000-generate-sysconfigdata-buildir.patch
Maxime Ripard f1c092da8b python3: Port python2 patches to reduce the interpreter size
Some of the python2 patches were left behind when doing the python3
package. This was because the python build system can now autodetect
what packages can be built in the system.

However, some of these patches are actually useful to reduce drastically
the size of the interpreter.

This patch ports the relevant patches to the python3 package, and adds a
new patch to remove the idle3 IDE as well from the interpreter.

Fixes #5696

Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
2013-06-28 22:02:44 +02:00

159 lines
6.1 KiB
Diff

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])