Patchwork [2/2] Add python3 package

login
register
mail settings
Submitter Maxime Ripard
Date Nov. 7, 2012, 3:01 p.m.
Message ID <1352300481-825-3-git-send-email-maxime.ripard@free-electrons.com>
Download mbox | patch
Permalink /patch/197678/
State Accepted
Headers show

Comments

Maxime Ripard - Nov. 7, 2012, 3:01 p.m.
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
---
 package/Config.in                                  |    1 +
 package/python3/Config.in                          |   81 ++++++++++
 ...n3-3.3-000-generate-sysconfigdata-buildir.patch |  158 ++++++++++++++++++++
 .../python3-3.3-001-support-for-build.patch        |   68 +++++++++
 .../python3-3.3-002-no-host-headers-libs.patch     |   72 +++++++++
 .../python3-3.3-003-staging-header-libs.patch      |   41 +++++
 ...n3-3.3-004-no-import-when-cross-compiling.patch |   27 ++++
 ...python3-3.3-005-do-not-generate-pyo-files.patch |   40 +++++
 .../python3-3.3-006-reread-environment.patch       |   63 ++++++++
 ...ython3-3.3-007-change-pyconfig-h-location.patch |   76 ++++++++++
 package/python3/python3-3.3-008-no-rpath.patch     |   51 +++++++
 .../python3-3.3-009-verbose-module-build.patch     |   26 ++++
 ...3-010-distutils-cross-compilation-support.patch |   71 +++++++++
 ...python3-3.3-011-cross-compile-getaddrinfo.patch |   21 +++
 package/python3/python3.mk                         |  152 +++++++++++++++++++
 15 files changed, 948 insertions(+)
 create mode 100644 package/python3/Config.in
 create mode 100644 package/python3/python3-3.3-000-generate-sysconfigdata-buildir.patch
 create mode 100644 package/python3/python3-3.3-001-support-for-build.patch
 create mode 100644 package/python3/python3-3.3-002-no-host-headers-libs.patch
 create mode 100644 package/python3/python3-3.3-003-staging-header-libs.patch
 create mode 100644 package/python3/python3-3.3-004-no-import-when-cross-compiling.patch
 create mode 100644 package/python3/python3-3.3-005-do-not-generate-pyo-files.patch
 create mode 100644 package/python3/python3-3.3-006-reread-environment.patch
 create mode 100644 package/python3/python3-3.3-007-change-pyconfig-h-location.patch
 create mode 100644 package/python3/python3-3.3-008-no-rpath.patch
 create mode 100644 package/python3/python3-3.3-009-verbose-module-build.patch
 create mode 100644 package/python3/python3-3.3-010-distutils-cross-compilation-support.patch
 create mode 100644 package/python3/python3-3.3-011-cross-compile-getaddrinfo.patch
 create mode 100644 package/python3/python3.mk
Peter Korsgaard - Nov. 7, 2012, 11:09 p.m.
>>>>> "Maxime" == Maxime Ripard <maxime.ripard@free-electrons.com> writes:

 Maxime> Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>

 Maxime> +comment "python requires a toolchain with WCHAR support"

s/python/python3/

 Maxime> +#
 Maxime> +# Development files removal
 Maxime> +#
 Maxime> +define PYTHON3_REMOVE_DEVFILES
 Maxime> +	rm -f $(TARGET_DIR)/usr/bin/python$(PYTHON3_VERSION_MAJOR)-config
 Maxime> +	rm -f $(TARGET_DIR)/usr/bin/python-config

As far as I can see it doesn't install python-config.

Committed with these minor fixes, thanks!

Patch

diff --git a/package/Config.in b/package/Config.in
index 6125abc..a9c1496 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -289,6 +289,7 @@  endif
 source "package/microperl/Config.in"
 source "package/php/Config.in"
 source "package/python/Config.in"
+source "package/python3/Config.in"
 if BR2_PACKAGE_PYTHON
 menu "external python modules"
 source "package/python-dpkt/Config.in"
diff --git a/package/python3/Config.in b/package/python3/Config.in
new file mode 100644
index 0000000..03c6b59
--- /dev/null
+++ b/package/python3/Config.in
@@ -0,0 +1,81 @@ 
+config BR2_PACKAGE_PYTHON3
+	bool "python3"
+	depends on BR2_USE_WCHAR
+	select BR2_PACKAGE_LIBFFI
+	help
+	  The python language interpreter.
+
+	  http://www.python.org/
+
+comment "python requires a toolchain with WCHAR support"
+	depends on !BR2_USE_WCHAR
+
+if BR2_PACKAGE_PYTHON3
+
+choice
+	prompt "python3 module format to install"
+	default BR2_PACKAGE_PYTHON3_PYC_ONLY
+	help
+	  Select Python module format to install on target (py, pyc or both)
+
+config BR2_PACKAGE_PYTHON3_PY_ONLY
+	bool ".py sources only"
+
+config BR2_PACKAGE_PYTHON3_PYC_ONLY
+	bool ".pyc compiled sources only"
+
+config BR2_PACKAGE_PYTHON3_PY_PYC
+	bool ".py sources and .pyc compiled"
+
+endchoice
+
+menu "core python3 modules"
+
+comment "The following modules are unusual or require extra libraries"
+
+config BR2_PACKAGE_PYTHON3_BZIP2
+	select BR2_PACKAGE_BZIP2
+	bool "bz2 module"
+	help
+	  bzip2 module for Python3
+
+config BR2_PACKAGE_PYTHON3_CURSES
+	select BR2_PACKAGE_NCURSES
+	bool "curses module"
+	help
+	  curses module for Python3.
+
+config BR2_PACKAGE_PYTHON3_PYEXPAT
+	select BR2_PACKAGE_EXPAT
+	bool "pyexpat"
+	help
+	  pyexpat module for Python3.
+
+config BR2_PACKAGE_PYTHON3_READLINE
+	select BR2_PACKAGE_READLINE
+	bool "readline"
+	help
+	  readline module for Python3 (required for command-line
+	  editing in the Python shell).
+
+config BR2_PACKAGE_PYTHON3_SSL
+	select BR2_PACKAGE_OPENSSL
+	bool "ssl"
+	help
+	  _ssl module for Python3 (required for https in urllib etc).
+
+config BR2_PACKAGE_PYTHON3_SQLITE
+	bool "sqlite module"
+	select BR2_PACKAGE_SQLITE
+	help
+	  SQLite database support
+
+config BR2_PACKAGE_PYTHON3_ZLIB
+	bool "zlib module"
+	select BR2_PACKAGE_ZLIB
+	help
+	  zlib support in Python3
+
+endmenu
+
+endif
diff --git a/package/python3/python3-3.3-000-generate-sysconfigdata-buildir.patch b/package/python3/python3-3.3-000-generate-sysconfigdata-buildir.patch
new file mode 100644
index 0000000..a29aa0f
--- /dev/null
+++ b/package/python3/python3-3.3-000-generate-sysconfigdata-buildir.patch
@@ -0,0 +1,158 @@ 
+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])
diff --git a/package/python3/python3-3.3-001-support-for-build.patch b/package/python3/python3-3.3-001-support-for-build.patch
new file mode 100644
index 0000000..8c57cfb
--- /dev/null
+++ b/package/python3/python3-3.3-001-support-for-build.patch
@@ -0,0 +1,68 @@ 
+Add support in Python build system to specify host pgen
+
+Python needs a "pgen" program to build itself. Unfortunately, the
+Python build system assumes that it can use the pgen program it has
+just built to build itself. Obviously, this cannot work in
+cross-compilation mode since the pgen program have been built for the
+target.
+
+Therefore, this patch adds support in the Python build system for the
+new PGEN_FOR_BUILD variable, so that we can point Python ./configure
+script to the pgen program that have been previously built for the
+host.
+
+Patch ported to python2.7 by Maxime Ripard <ripard@archos.com>, and
+later significantly reworked by Thomas Petazzoni
+<thomas.petazzoni@free-electrons.com>, with some inspiration taken
+from the Python patches of the PTXdist project, and then ported to
+python3.3 by Maxime Ripard <maxime.ripard@free-electrons.com>
+
+Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
+---
+ Makefile.pre.in |    5 +++--
+ configure.ac    |    5 +++++
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+Index: Python-3.3.0/Makefile.pre.in
+===================================================================
+--- Python-3.3.0.orig/Makefile.pre.in
++++ Python-3.3.0/Makefile.pre.in
+@@ -239,6 +239,7 @@
+ ##########################################################################
+ # Parser
+ PGEN=		Parser/pgen$(EXE)
++PGEN_FOR_BUILD=@PGEN_FOR_BUILD@
+ 
+ PSRCS=		\
+ 		Parser/acceler.c \
+@@ -639,8 +640,8 @@
+ 
+ $(GRAMMAR_H): $(GRAMMAR_INPUT) $(PGENSRCS)
+ 		@$(MKDIR_P) Include
+-		$(MAKE) $(PGEN)
+-		$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
++		$(MAKE) $(PGEN_FOR_BUILD)
++		$(PGEN_FOR_BUILD) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
+ $(GRAMMAR_C): $(GRAMMAR_H) $(GRAMMAR_INPUT) $(PGENSRCS)
+ 		$(MAKE) $(GRAMMAR_H)
+ 		touch $(GRAMMAR_C)
+Index: Python-3.3.0/configure.ac
+===================================================================
+--- Python-3.3.0.orig/configure.ac
++++ Python-3.3.0/configure.ac
+@@ -51,10 +51,15 @@
+         AC_MSG_RESULT($interp)
+ 	PYTHON_FOR_BUILD="_PYTHON_PROJECT_BASE=$srcdir"' _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(srcdir)/Lib:$(srcdir)/Lib/plat-$(MACHDEP) '$interp
+     fi
++    AC_MSG_CHECKING(pgen for build)
++    PGEN_FOR_BUILD="${PGEN_FOR_BUILD}"
++    AC_MSG_RESULT($PGEN_FOR_BUILD)
+ else
+     PYTHON_FOR_BUILD='./$(BUILDPYTHON) -E'
++    PGEN_FOR_BUILD='./$(PGEN)'
+ fi
+ AC_SUBST(PYTHON_FOR_BUILD)
++AC_SUBST(PGEN_FOR_BUILD)
+ 
+ dnl Ensure that if prefix is specified, it does not end in a slash. If
+ dnl it does, we get path names containing '//' which is both ugly and
diff --git a/package/python3/python3-3.3-002-no-host-headers-libs.patch b/package/python3/python3-3.3-002-no-host-headers-libs.patch
new file mode 100644
index 0000000..9783f28
--- /dev/null
+++ b/package/python3/python3-3.3-002-no-host-headers-libs.patch
@@ -0,0 +1,72 @@ 
+Do not look at host headers/libraries in cross-compile mode
+
+When we are cross-compiling, setup.py should never look in /usr or
+/usr/local to find headers or libraries. A later patch adds a
+mechanism to tell setup.py to look in a specific directory for headers
+and libraries.
+
+Patch first written by Thomas Petazzoni
+<thomas.petazzoni@free-electrons.com> for python2.7, and then ported
+to python3.3 by Maxime Ripard <maxime.ripard@free-electrons.com>
+
+Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
+---
+ setup.py |   23 +++++------------------
+ 1 file changed, 5 insertions(+), 18 deletions(-)
+
+Index: Python-3.3.0/setup.py
+===================================================================
+--- Python-3.3.0.orig/setup.py
++++ Python-3.3.0/setup.py
+@@ -447,10 +447,8 @@
+         if not cross_compiling:
+             add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
+             add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
+-        # only change this for cross builds for 3.3, issues on Mageia
+-        if cross_compiling:
+             self.add_gcc_paths()
+-        self.add_multiarch_paths()
++            self.add_multiarch_paths()
+ 
+         # Add paths specified in the environment variables LDFLAGS and
+         # CPPFLAGS for header and library files.
+@@ -458,10 +456,7 @@
+         # directly since an inconsistently reproducible issue comes up where
+         # the environment variable is not set even though the value were passed
+         # into configure and stored in the Makefile (issue found on OS X 10.3).
+-        for env_var, arg_name, dir_list in (
+-                ('LDFLAGS', '-R', self.compiler.runtime_library_dirs),
+-                ('LDFLAGS', '-L', self.compiler.library_dirs),
+-                ('CPPFLAGS', '-I', self.compiler.include_dirs)):
++        for env_var, arg_name, dir_list in ():
+             env_val = sysconfig.get_config_var(env_var)
+             if env_val:
+                 # To prevent optparse from raising an exception about any
+@@ -486,17 +481,6 @@
+                     for directory in reversed(options.dirs):
+                         add_dir_to_list(dir_list, directory)
+ 
+-        if os.path.normpath(sys.base_prefix) != '/usr' \
+-                and not sysconfig.get_config_var('PYTHONFRAMEWORK'):
+-            # OSX note: Don't add LIBDIR and INCLUDEDIR to building a framework
+-            # (PYTHONFRAMEWORK is set) to avoid # linking problems when
+-            # building a framework with different architectures than
+-            # the one that is currently installed (issue #7473)
+-            add_dir_to_list(self.compiler.library_dirs,
+-                            sysconfig.get_config_var("LIBDIR"))
+-            add_dir_to_list(self.compiler.include_dirs,
+-                            sysconfig.get_config_var("INCLUDEDIR"))
+-
+         # lib_dirs and inc_dirs are used to search for files;
+         # if a file is found in one of those directories, it can
+         # be assumed that no additional -I,-L directives are needed.
+@@ -506,6 +490,9 @@
+                 '/lib', '/usr/lib',
+                 ]
+             inc_dirs = self.compiler.include_dirs + ['/usr/include']
++        else:
++            lib_dirs = self.compiler.library_dirs
++            inc_dirs = self.compiler.include_dirs
+         exts = []
+         missing = []
+ 
diff --git a/package/python3/python3-3.3-003-staging-header-libs.patch b/package/python3/python3-3.3-003-staging-header-libs.patch
new file mode 100644
index 0000000..b0efe29
--- /dev/null
+++ b/package/python3/python3-3.3-003-staging-header-libs.patch
@@ -0,0 +1,41 @@ 
+Tell setup.py the location of headers/libraries
+
+Allow the libraries detection routine to look for headers and libs in
+other directories than /usr/include or /usr/lib through the
+environment variables PYTHON_MODULES_INCLUDE and PYTHON_MODULES_LIB.
+
+We can then use it to look for libraries in the buildroot staging
+directory.
+
+Ported to python3.3 by Maxime Ripard <maxime.ripard@free-electrons.com> based
+on the work by Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
+---
+ setup.py |   13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+Index: Python-3.3.0/setup.py
+===================================================================
+--- Python-3.3.0.orig/setup.py
++++ Python-3.3.0/setup.py
+@@ -441,6 +441,19 @@
+             os.unlink(tmpfile)
+ 
+     def detect_modules(self):
++        try:
++            modules_include_dirs = os.environ["PYTHON_MODULES_INCLUDE"].split()
++        except KeyError:
++            modules_include_dirs = ['/usr/include']
++        try:
++            modules_lib_dirs = os.environ["PYTHON_MODULES_LIB"].split()
++        except KeyError:
++            modules_lib_dirs = ['/usr/lib']
++        for dir in modules_include_dirs:
++            add_dir_to_list(self.compiler.include_dirs, dir)
++        for dir in modules_lib_dirs:
++            add_dir_to_list(self.compiler.library_dirs, dir)
++
+         # Ensure that /usr/local is always used, but the local build
+         # directories (i.e. '.' and 'Include') must be first.  See issue
+         # 10520.
diff --git a/package/python3/python3-3.3-004-no-import-when-cross-compiling.patch b/package/python3/python3-3.3-004-no-import-when-cross-compiling.patch
new file mode 100644
index 0000000..cd5a437
--- /dev/null
+++ b/package/python3/python3-3.3-004-no-import-when-cross-compiling.patch
@@ -0,0 +1,27 @@ 
+Disable import check when cross-compiling
+
+Once Python has compiled an extension (i.e some C code, potentially
+linked to a library), it tries to import it. This cannot work in
+cross-compilation mode, so we just disable this check.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
+---
+ setup.py |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+Index: Python-3.3.0/setup.py
+===================================================================
+--- Python-3.3.0.orig/setup.py
++++ Python-3.3.0/setup.py
+@@ -318,6 +318,10 @@
+             self.announce('WARNING: skipping import check for Cygwin-based "%s"'
+                 % ext.name)
+             return
++        if os.environ.get('CROSS_COMPILING') == 'yes':
++            self.announce('WARNING: skipping import check for cross compiled "%s"'
++                          % ext.name)
++            return
+         ext_filename = os.path.join(
+             self.build_lib,
+             self.get_ext_filename(self.get_ext_fullname(ext.name)))
diff --git a/package/python3/python3-3.3-005-do-not-generate-pyo-files.patch b/package/python3/python3-3.3-005-do-not-generate-pyo-files.patch
new file mode 100644
index 0000000..983d546
--- /dev/null
+++ b/package/python3/python3-3.3-005-do-not-generate-pyo-files.patch
@@ -0,0 +1,40 @@ 
+Do not generate .pyo files
+
+By default, the Python installation byte-compiles all modules in two
+forms: the normal bytecode (.pyc) and an optimized bytecode (.pyo).
+
+According to
+http://www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.html,
+the optimization do not do anything useful, and generating both the
+"non-optimized" and "optimized" bytecode variants takes time.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ Makefile.pre.in |    9 ---------
+ 1 file changed, 9 deletions(-)
+
+Index: Python-3.3.0/Makefile.pre.in
+===================================================================
+--- Python-3.3.0.orig/Makefile.pre.in
++++ Python-3.3.0/Makefile.pre.in
+@@ -1082,20 +1082,11 @@
+ 		-d $(LIBDEST) -f \
+ 		-x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+ 		$(DESTDIR)$(LIBDEST)
+-	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+-		$(PYTHON_FOR_BUILD) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
+-		-d $(LIBDEST) -f \
+-		-x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+-		$(DESTDIR)$(LIBDEST)
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
+ 		$(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
+ 		-d $(LIBDEST)/site-packages -f \
+ 		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+-		$(PYTHON_FOR_BUILD) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
+-		-d $(LIBDEST)/site-packages -f \
+-		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+-	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+ 		$(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+ 		$(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/PatternGrammar.txt
diff --git a/package/python3/python3-3.3-006-reread-environment.patch b/package/python3/python3-3.3-006-reread-environment.patch
new file mode 100644
index 0000000..752b15a
--- /dev/null
+++ b/package/python3/python3-3.3-006-reread-environment.patch
@@ -0,0 +1,63 @@ 
+Make sure setup.py reads the correct CONFIG_ARGS
+
+The setup.py script that builds and installs all the Python modules
+shipped with the interpreter looks at the CONFIG_ARGS variable stored
+in the "sysconfig" module to look at the ./configure options and
+adjust its behaviour accordingly.
+
+Unfortunately, when cross-compiling, the value of CONFIG_ARGS returned
+by the sysconfig are the one passed to the ./configure script of the
+*host* Python and not the one we're currently building for the target.
+
+In order to avoid that, we re-initialize the values in the sysconfig
+module by re-reading the environment at the beginning of the setup.py
+script, and we make sure that the CONFIG_ARGS variable is actually
+part of the environment of setup.py.
+
+See the beginning of
+http://article.gmane.org/gmane.comp.python.devel/99772 for the
+inspiration.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ Makefile.pre.in |    4 +++-
+ setup.py        |    3 +++
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+Index: Python-3.3.0/setup.py
+===================================================================
+--- Python-3.3.0.orig/setup.py
++++ Python-3.3.0/setup.py
+@@ -30,6 +30,9 @@
+ # Were we compiled --with-pydebug or with #define Py_DEBUG?
+ COMPILED_WITH_PYDEBUG = ('--with-pydebug' in sysconfig.get_config_var("CONFIG_ARGS"))
+ 
++sysconfig.get_config_vars()
++sysconfig._CONFIG_VARS.update(os.environ)
++
+ # This global variable is used to hold the list of modules to be disabled.
+ disabled_module_list = []
+ 
+Index: Python-3.3.0/Makefile.pre.in
+===================================================================
+--- Python-3.3.0.orig/Makefile.pre.in
++++ Python-3.3.0/Makefile.pre.in
+@@ -478,6 +478,7 @@
+ sharedmods: $(BUILDPYTHON) pybuilddir.txt
+ 	case $$MAKEFLAGS in *s*) quiet=-q; esac; \
+ 	$(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \
++		CONFIG_ARGS="$(CONFIG_ARGS)" \
+ 		$(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build
+ 
+ # Build static library
+@@ -1183,7 +1184,8 @@
+ # Install the dynamically loadable modules
+ # This goes into $(exec_prefix)
+ sharedinstall: sharedmods
+-	$(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/setup.py install \
++	$(RUNSHARED) CONFIG_ARGS="$(CONFIG_ARGS)" \
++		$(PYTHON_FOR_BUILD) $(srcdir)/setup.py install \
+ 	   	--prefix=$(prefix) \
+ 		--install-scripts=$(BINDIR) \
+ 		--install-platlib=$(DESTSHARED) \
diff --git a/package/python3/python3-3.3-007-change-pyconfig-h-location.patch b/package/python3/python3-3.3-007-change-pyconfig-h-location.patch
new file mode 100644
index 0000000..8d45dae
--- /dev/null
+++ b/package/python3/python3-3.3-007-change-pyconfig-h-location.patch
@@ -0,0 +1,76 @@ 
+Change the location of pyconfig.h
+
+The Python interpreter has a really strange behaviour: at *runtime*,
+it reads a Makefile and a header file named pyconfig.h to get some
+information about the configuration.
+
+The Makefile is located in usr/lib/python3.3/config-3.3m, which is fine
+since this location is kept on the target.
+
+However, by default, the pyconfig.h is installed in
+usr/include/python3.3m, but we completely remove the usr/include
+directory for the target. Since making an exception just for
+pyconfig.h is annoying, this patch also installs pyconfig.h to
+usr/lib/python3.3/config-3.3m, and modifies the sysconfig module so that it
+looks in this location instead of usr/include.
+
+The pyconfig.h is still kept in usr/include/python3.3m, because it is
+needed in the $(STAGING_DIR) when building third-party Python
+extensions that contain C code.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ Lib/distutils/sysconfig.py |    3 ++-
+ Lib/sysconfig.py           |    2 +-
+ Makefile.pre.in            |    3 ++-
+ 3 files changed, 5 insertions(+), 3 deletions(-)
+
+Index: Python-3.3.0/Lib/distutils/sysconfig.py
+===================================================================
+--- Python-3.3.0.orig/Lib/distutils/sysconfig.py
++++ Python-3.3.0/Lib/distutils/sysconfig.py
+@@ -239,7 +239,8 @@
+         else:
+             inc_dir = _sys_home or project_base
+     else:
+-        inc_dir = get_python_inc(plat_specific=1)
++        lib_dir = get_python_lib(plat_specific=1, standard_lib=1)
++        inc_dir = os.path.join(lib_dir, "config")
+     if get_python_version() < '2.2':
+         config_h = 'config.h'
+     else:
+Index: Python-3.3.0/Lib/sysconfig.py
+===================================================================
+--- Python-3.3.0.orig/Lib/sysconfig.py
++++ Python-3.3.0/Lib/sysconfig.py
+@@ -467,7 +467,7 @@
+         else:
+             inc_dir = _sys_home or _PROJECT_BASE
+     else:
+-        inc_dir = get_path('platinclude')
++        inc_dir = os.path.join(get_path('stdlib'), "config")
+     return os.path.join(inc_dir, 'pyconfig.h')
+ 
+ 
+Index: Python-3.3.0/Makefile.pre.in
+===================================================================
+--- Python-3.3.0.orig/Makefile.pre.in
++++ Python-3.3.0/Makefile.pre.in
+@@ -1123,7 +1123,6 @@
+ 		echo $(INSTALL_DATA) $$i $(INCLUDEPY); \
+ 		$(INSTALL_DATA) $$i $(DESTDIR)$(INCLUDEPY); \
+ 	done
+-	$(INSTALL_DATA) pyconfig.h $(DESTDIR)$(CONFINCLUDEPY)/pyconfig.h
+ 
+ # Install the library and miscellaneous stuff needed for extending/embedding
+ # This goes into $(exec_prefix)
+@@ -1157,6 +1156,8 @@
+ 	$(INSTALL_DATA) Modules/python.o $(DESTDIR)$(LIBPL)/python.o
+ 	$(INSTALL_DATA) $(srcdir)/Modules/config.c.in $(DESTDIR)$(LIBPL)/config.c.in
+ 	$(INSTALL_DATA) Makefile $(DESTDIR)$(LIBPL)/Makefile
++	$(INSTALL_DATA) pyconfig.h $(DESTDIR)$(LIBPL)/pyconfig.h
++	$(INSTALL_DATA) pyconfig.h $(DESTDIR)$(CONFINCLUDEPY)/pyconfig.h
+ 	$(INSTALL_DATA) Modules/Setup $(DESTDIR)$(LIBPL)/Setup
+ 	$(INSTALL_DATA) Modules/Setup.local $(DESTDIR)$(LIBPL)/Setup.local
+ 	$(INSTALL_DATA) Modules/Setup.config $(DESTDIR)$(LIBPL)/Setup.config
diff --git a/package/python3/python3-3.3-008-no-rpath.patch b/package/python3/python3-3.3-008-no-rpath.patch
new file mode 100644
index 0000000..cdeec22
--- /dev/null
+++ b/package/python3/python3-3.3-008-no-rpath.patch
@@ -0,0 +1,51 @@ 
+Remove runtime library paths
+
+For some extensions (sqlite and dbm), Python setup.py script
+hardcode a runtime path (rpath) into the extension. However, this
+runtime path is incorrect (because it points to the location of the
+library directory on the development machine) and useless (because on
+the target, all useful libraries are in a standard directory searched
+by the dynamic loader). For those reasons, we just get rid of the
+runtime paths in cross-compilation mode.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ setup.py |   12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+Index: Python-3.3.0/setup.py
+===================================================================
+--- Python-3.3.0.orig/setup.py
++++ Python-3.3.0/setup.py
+@@ -1134,11 +1134,15 @@
+             # can end up with a bad search path order.
+             if sqlite_incdir not in self.compiler.include_dirs:
+                 include_dirs.append(sqlite_incdir)
++            if cross_compiling:
++                sqlite_runtime_libdir = None
++            else:
++                sqlite_runtime_libdir = sqlite_libdir
+             exts.append(Extension('_sqlite3', sqlite_srcs,
+                                   define_macros=sqlite_defines,
+                                   include_dirs=include_dirs,
+                                   library_dirs=sqlite_libdir,
+-                                  runtime_library_dirs=sqlite_libdir,
++                                  runtime_library_dirs=sqlite_runtime_libdir,
+                                   extra_link_args=sqlite_extra_link_args,
+                                   libraries=["sqlite3",]))
+         else:
+@@ -1205,9 +1209,13 @@
+                 elif cand == "bdb":
+                     if db_incs is not None:
+                         if dbm_setup_debug: print("building dbm using bdb")
++                        if cross_compiling:
++                            dblib_runtime_libdir = None
++                        else:
++                            dblib_runtime_libdir = dblib_dir
+                         dbmext = Extension('_dbm', ['_dbmmodule.c'],
+                                            library_dirs=dblib_dir,
+-                                           runtime_library_dirs=dblib_dir,
++                                           runtime_library_dirs=dblib_runtime_libdir,
+                                            include_dirs=db_incs,
+                                            define_macros=[
+                                                ('HAVE_BERKDB_H', None),
diff --git a/package/python3/python3-3.3-009-verbose-module-build.patch b/package/python3/python3-3.3-009-verbose-module-build.patch
new file mode 100644
index 0000000..60b6d79
--- /dev/null
+++ b/package/python3/python3-3.3-009-verbose-module-build.patch
@@ -0,0 +1,26 @@ 
+Enables verbose output when building modules
+
+Patch borrowed from OpenBricks.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ Makefile.pre.in |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+Index: Python-3.3.0/Makefile.pre.in
+===================================================================
+--- Python-3.3.0.orig/Makefile.pre.in
++++ Python-3.3.0/Makefile.pre.in
+@@ -476,10 +476,9 @@
+ 
+ # Build the shared modules
+ sharedmods: $(BUILDPYTHON) pybuilddir.txt
+-	case $$MAKEFLAGS in *s*) quiet=-q; esac; \
+ 	$(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \
+ 		CONFIG_ARGS="$(CONFIG_ARGS)" \
+-		$(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build
++		$(PYTHON_FOR_BUILD) $(srcdir)/setup.py build
+ 
+ # Build static library
+ # avoid long command lines, same as LIBRARY_OBJS
diff --git a/package/python3/python3-3.3-010-distutils-cross-compilation-support.patch b/package/python3/python3-3.3-010-distutils-cross-compilation-support.patch
new file mode 100644
index 0000000..0a51400
--- /dev/null
+++ b/package/python3/python3-3.3-010-distutils-cross-compilation-support.patch
@@ -0,0 +1,71 @@ 
+Add some cross-compilation fixes to distutils
+
+Inspired by work done by Marc Kleine-Budde <mkl@pengutronix.de> in
+PTXdist.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ Lib/distutils/sysconfig.py |   17 +++++++++++++----
+ configure.ac               |    8 +++++++-
+ 2 files changed, 20 insertions(+), 5 deletions(-)
+
+Index: Python-3.3.0/Lib/distutils/sysconfig.py
+===================================================================
+--- Python-3.3.0.orig/Lib/distutils/sysconfig.py
++++ Python-3.3.0/Lib/distutils/sysconfig.py
+@@ -16,15 +16,24 @@
+ from .errors import DistutilsPlatformError
+ 
+ # These are needed in a couple of spots, so just compute them once.
+-PREFIX = os.path.normpath(sys.prefix)
+-EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
++EXECUTABLE_DIRNAME = os.path.dirname(os.path.realpath(sys.executable))
++if os.environ.get('CROSS_COMPILING') == 'yes':
++    _sysroot=os.environ.get('_python_sysroot')
++    PREFIX = os.path.normpath(_sysroot + os.environ.get('_python_prefix'))
++    EXEC_PREFIX = os.path.normpath(_sysroot + os.environ.get('_python_exec_prefix'))
++    if '_python_srcdir' in os.environ:
++        EXECUTABLE_DIRNAME = os.path.normpath(os.environ['_python_srcdir'])
++else:
++    PREFIX = os.path.normpath(sys.prefix)
++    EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
++
+ BASE_PREFIX = os.path.normpath(sys.base_prefix)
+ BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix)
+ 
+ # Path to the base directory of the project. On Windows the binary may
+ # live in project/PCBuild9.  If we're dealing with an x64 Windows build,
+ # it'll live in project/PCbuild/amd64.
+-project_base = os.path.dirname(os.path.abspath(sys.executable))
++project_base = EXECUTABLE_DIRNAME
+ if os.name == "nt" and "pcbuild" in project_base[-8:].lower():
+     project_base = os.path.abspath(os.path.join(project_base, os.path.pardir))
+ # PC/VS7.1
+@@ -98,7 +107,7 @@
+             # the build directory may not be the source directory, we
+             # must use "srcdir" from the makefile to find the "Include"
+             # directory.
+-            base = _sys_home or os.path.dirname(os.path.abspath(sys.executable))
++            base = _sys_home or EXECUTABLE_DIRNAME
+             if plat_specific:
+                 return base
+             if _sys_home:
+Index: Python-3.3.0/configure.ac
+===================================================================
+--- Python-3.3.0.orig/configure.ac
++++ Python-3.3.0/configure.ac
+@@ -963,7 +963,13 @@
+ fi
+ 
+ if test "$cross_compiling" = yes; then
+-	RUNSHARED=
++	RUNSHARED=" \
++		CROSS_COMPILING=yes \
++		_python_cross_host=${ac_cv_host} \
++		_python_sysroot=\"\$(sysroot)\" \
++		_python_srcdir=\"\$(srcdir)\" \
++		_python_prefix=\"\$(prefix)\" \
++		_python_exec_prefix=\"\$(exec_prefix)\""
+ fi
+ 
+ AC_MSG_RESULT($LDLIBRARY)
diff --git a/package/python3/python3-3.3-011-cross-compile-getaddrinfo.patch b/package/python3/python3-3.3-011-cross-compile-getaddrinfo.patch
new file mode 100644
index 0000000..33286ce
--- /dev/null
+++ b/package/python3/python3-3.3-011-cross-compile-getaddrinfo.patch
@@ -0,0 +1,21 @@ 
+Disable buggy_getaddrinfo configure test when cross-compiling with IPv6 support
+
+Signed-off-by: Vanya Sergeev <vsergeev at gmail.com>
+
+---
+ configure.ac |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: Python-3.3.0/configure.ac
+===================================================================
+--- Python-3.3.0.orig/configure.ac
++++ Python-3.3.0/configure.ac
+@@ -3204,7 +3204,7 @@
+ 
+ AC_MSG_RESULT($ac_cv_buggy_getaddrinfo)
+ 
+-if test $have_getaddrinfo = no || test "$ac_cv_buggy_getaddrinfo" = yes
++if test $have_getaddrinfo = no || test "$cross_compiling" != "yes" -a "$ac_cv_buggy_getaddrinfo" = yes
+ then
+ 	if test $ipv6 = yes
+ 	then
diff --git a/package/python3/python3.mk b/package/python3/python3.mk
new file mode 100644
index 0000000..7d53315
--- /dev/null
+++ b/package/python3/python3.mk
@@ -0,0 +1,152 @@ 
+#############################################################
+#
+# python3
+#
+#############################################################
+PYTHON3_VERSION_MAJOR = 3.3
+PYTHON3_VERSION       = $(PYTHON3_VERSION_MAJOR).0
+PYTHON3_SOURCE        = Python-$(PYTHON3_VERSION).tar.bz2
+PYTHON3_SITE          = http://python.org/ftp/python/$(PYTHON3_VERSION)
+
+# Python needs itself and a "pgen" program to build itself, both being
+# provided in the Python sources. So in order to cross-compile Python,
+# we need to build a host Python first. This host Python is also
+# installed in $(HOST_DIR), as it is needed when cross-compiling
+# third-party Python modules.
+
+HOST_PYTHON3_CONF_OPT += 	\
+	--without-cxx-main 	\
+	--disable-sqlite3	\
+	--disable-tk		\
+	--with-expat=system	\
+	--disable-curses	\
+	--disable-codecs-cjk	\
+	--disable-nis		\
+	--disable-unicodedata	\
+	--disable-dbm		\
+	--disable-gdbm		\
+	--disable-bsddb		\
+	--disable-test-modules	\
+	--disable-bz2		\
+	--disable-ssl
+
+HOST_PYTHON3_MAKE_ENV = \
+	PYTHON_MODULES_INCLUDE=$(HOST_DIR)/usr/include \
+	PYTHON_MODULES_LIB="$(HOST_DIR)/lib $(HOST_DIR)/usr/lib"
+
+HOST_PYTHON3_AUTORECONF = YES
+
+define HOST_PYTHON3_CONFIGURE_CMDS
+	(cd $(@D) && rm -rf config.cache; \
+	        $(HOST_CONFIGURE_OPTS) \
+		CFLAGS="$(HOST_CFLAGS)" \
+		LDFLAGS="$(HOST_LDFLAGS)" \
+                $(HOST_PYTHON3_CONF_ENV) \
+		./configure \
+		--prefix="$(HOST_DIR)/usr" \
+		--sysconfdir="$(HOST_DIR)/etc" \
+		$(HOST_PYTHON3_CONF_OPT) \
+	)
+endef
+
+PYTHON3_DEPENDENCIES  = host-python3 libffi
+
+HOST_PYTHON3_DEPENDENCIES = host-expat host-zlib
+
+PYTHON3_INSTALL_STAGING = YES
+
+ifeq ($(BR2_PACKAGE_PYTHON3_READLINE),y)
+PYTHON3_DEPENDENCIES += readline
+endif
+
+ifeq ($(BR2_PACKAGE_PYTHON3_CURSES),y)
+PYTHON3_DEPENDENCIES += ncurses
+endif
+
+ifeq ($(BR2_PACKAGE_PYTHON3_PYEXPAT),y)
+PYTHON3_DEPENDENCIES += expat
+PYTHON3_CONF_OPT += --with-expat=system
+else
+PYTHON3_CONF_OPT += --with-expat=none
+endif
+
+ifeq ($(BR2_PACKAGE_PYTHON3_SQLITE),y)
+PYTHON3_DEPENDENCIES += sqlite
+endif
+
+ifeq ($(BR2_PACKAGE_PYTHON3_SSL),y)
+PYTHON_DEPENDENCIES += openssl
+endif
+
+ifeq ($(BR2_PACKAGE_PYTHON3_BZIP2),y)
+PYTHON_DEPENDENCIES += bzip2
+endif
+
+ifeq ($(BR2_PACKAGE_PYTHON3_ZLIB),y)
+PYTHON3_DEPENDENCIES += zlib
+endif
+
+PYTHON3_CONF_ENV += \
+	_PROJECT_BASE=$(PYTHON3_DIR) \
+	_PYTHON_HOST_PLATFORM=$(BR2_HOSTARCH) \
+	PYTHON_FOR_BUILD=$(HOST_PYTHON3_DIR)/python \
+	PGEN_FOR_BUILD=$(HOST_PYTHON3_DIR)/Parser/pgen \
+	ac_cv_have_long_long_format=yes \
+	ac_cv_file__dev_ptmx=yes \
+	ac_cv_file__dev_ptc=yes \
+
+PYTHON3_CONF_OPT += \
+	--without-cxx-main 	\
+	--with-system-ffi	\
+	--disable-pydoc		\
+	--disable-test-modules	\
+	--disable-lib2to3	\
+	--disable-gdbm		\
+	--disable-tk		\
+	--disable-nis		\
+	--disable-dbm
+
+PYTHON3_MAKE_ENV = \
+	_PROJECT_BASE=$(PYTHON3_DIR) \
+	_PYTHON_HOST_PLATFORM=$(BR2_HOSTARCH) \
+	PYTHON_MODULES_INCLUDE=$(STAGING_DIR)/usr/include \
+	PYTHON_MODULES_LIB="$(STAGING_DIR)/lib $(STAGING_DIR)/usr/lib"
+
+# python distutils adds -L$LIBDIR when linking binary extensions, causing
+# trouble for cross compilation
+define PYTHON3_FIXUP_LIBDIR
+	$(SED) 's|^LIBDIR=.*|LIBDIR= $(STAGING_DIR)/usr/lib|' \
+	   $(STAGING_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/config-3.3m/Makefile
+endef
+
+PYTHON3_POST_INSTALL_STAGING_HOOKS += PYTHON3_FIXUP_LIBDIR
+
+#
+# Development files removal
+#
+define PYTHON3_REMOVE_DEVFILES
+	rm -f $(TARGET_DIR)/usr/bin/python$(PYTHON3_VERSION_MAJOR)-config
+	rm -f $(TARGET_DIR)/usr/bin/python-config
+endef
+
+ifneq ($(BR2_HAVE_DEVFILES),y)
+PYTHON3_POST_INSTALL_TARGET_HOOKS += PYTHON3_REMOVE_DEVFILES
+endif
+
+#
+# Remove useless files. In the config/ directory, only the Makefile
+# and the pyconfig.h files are needed at runtime.
+#
+define PYTHON3_REMOVE_USELESS_FILES
+	for i in `find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR)/config-3.3m/ \
+		-type f -not -name pyconfig.h -a -not -name Makefile` ; do \
+		rm -f $$i ; \
+	done
+endef
+
+PYTHON3_POST_INSTALL_TARGET_HOOKS += PYTHON3_REMOVE_USELESS_FILES
+
+PYTHON3_AUTORECONF = YES
+
+$(eval $(autotools-package))
+$(eval $(host-autotools-package))