All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump
@ 2011-01-24 11:01 Thomas Petazzoni
  2011-01-24 11:01 ` [Buildroot] [PATCH 01/10] python: Move to version 2.7 Thomas Petazzoni
                   ` (10 more replies)
  0 siblings, 11 replies; 19+ messages in thread
From: Thomas Petazzoni @ 2011-01-24 11:01 UTC (permalink / raw)
  To: buildroot

Hello,

Here is a set of patches that improve Python support in Buildroot:
Python is bumped to 2.7.1, the package is converted to the autotargets
infrastructure, some third-party Python modules are introduced as
examples, many minor issues were fixed.

The patch set is composed of the following changes :

 * Four initial patches from Maxime Ripard that bump Python to 2.7 and
   update the patches accordingly. Even though those four patches from
   Maxime Ripaard are heavily reworked and modified in the later
   commit that converts the python package to the autotargets
   infrastructure and rewrites all the patches, I have choosen to keep
   Maxime's patches in order to preserve authorship.

 * A patch to add a package for the libffi library (needed by the
   Python interpreter to build its ctype extension).

 * A patch that adjusts the autotools infrastructure to allow host
   packages to use <pkg>_MAKE_ENV and <pkg>_MAKE. The <pkg>_MAKE_ENV
   thing will be used by the converted python package.

 * A patch that bumps Python to 2.7.1, converts it to autotargets,
   rewrites all the patches to clarify their intent, clean up their
   implementation and add new features (options to enable/disable the
   compilation of certain extensions).

 * A patch that does the removing of .py or .pyc files globally (in
   target-finalize) and no longer at the level of the python
   package. This is necessary since the python package is not the only
   one that can install .py or .pyc files.

 * Two patches that add the python-serial and python-mad
   packages. Those have been used to test that our Python
   infrastructure works properly to build a pure Python module
   (python-serial) and a Python module that relies on C code, linked
   to a C library (python-mad). For the moment, those packages use the
   gentargets infrastructure, but once we have a better understanding
   of the Python distutils cross-compilation details, we may want to
   write a pythondistutilstargets infrastructure.

Those changes have been runtime tested with various simple Python
examples in a Qemu ARM target.

Regards,

Thomas

The following changes since commit 34acba1b3ef4ea874a1793f0f36a6b49abbb37ff:
  Peter Korsgaard (1):
        gdb: fixup symlink handling now tolchain gets installed into HOST_DIR

are available in the git repository at:

  git://git.busybox.net/~tpetazzoni/git/buildroot for-2011.02/python-bump

Maxime Ripard (4):
      python: Move to version 2.7
      python: Port the python2.4 patches to 2.7
      python: Add the needed patches to compile python2.7 in buildroot.
      python: Fix make install (Workaround python's bug #1669349)

Thomas Petazzoni (6):
      libffi: new package
      autotools: allow host package to use <pkg>_MAKE_ENV and <pkg>_MAKE
      python: convert to autotargets, bump to 2.7.1, many improvements
      Remove .py or .pyc depending on Python configuration
      python-serial: new package
      python-mad: new package

 Makefile                                           |    8 +
 package/Config.in                                  |    2 +
 package/Makefile.autotools.in                      |    2 +-
 package/libffi/Config.in                           |    9 +
 package/libffi/libffi.mk                           |   33 +++
 package/multimedia/Config.in                       |    1 +
 package/multimedia/python-mad/Config.in            |    7 +
 package/multimedia/python-mad/python-mad.mk        |   41 +++
 package/python-serial/Config.in                    |    5 +
 package/python-serial/python-serial.mk             |   21 ++
 package/python/Config.in                           |   65 ++---
 package/python/python-2.4-001-cross-compile.patch  |  106 --------
 package/python/python-2.4-002-cross-compile.patch  |   36 ---
 .../python-2.4-010-disable_modules_and_ssl.patch   |   37 ---
 .../python-2.4-020-gentoo_py_dontcompile.patch     |   18 --
 .../python/python-2.7-001-support-for-build.patch  |  153 +++++++++++
 .../python-2.7-002-cross-compile-variable.patch    |   55 ++++
 ...on-2.7-003-no-import-when-cross-compiling.patch |   26 ++
 .../python-2.7-004-no-host-headers-libs.patch      |   97 +++++++
 .../python-2.7-005-staging-headers-libs.patch      |   38 +++
 .../python/python-2.7-006-disable-extensions.patch |  102 +++++++
 .../python-2.7-007-do-not-generate-pyo-files.patch |   40 +++
 .../python/python-2.7-008-reread-environment.patch |   65 +++++
 package/python/python-2.7-009-python-symlink.patch |   25 ++
 ...python-2.7-010-change-pyconfig-h-location.patch |   76 ++++++
 package/python/python-2.7-011-no-rpath.patch       |   75 ++++++
 .../python-2.7-012-correct-32bit-64bit-check.patch |   55 ++++
 .../python-2.7-100-optional-test-modules.patch     |   84 ++++++
 package/python/python-2.7-101-optional-pydoc.patch |   81 ++++++
 package/python/python-2.7-102-optional-2to3.patch  |   99 +++++++
 .../python/python-2.7-103-optional-sqlite.patch    |   28 ++
 package/python/python-2.7-104-optional-tk.patch    |   68 +++++
 .../python/python-2.7-105-optional-curses.patch    |   53 ++++
 package/python/python-2.7-106-optional-expat.patch |   84 ++++++
 .../python-2.7-107-optional-codecs-cjk.patch       |   25 ++
 package/python/python-2.7-108-optional-nis.patch   |   28 ++
 .../python-2.7-109-optional-unicodedata.patch      |   25 ++
 package/python/python-2.7-110-optional-db.patch    |   81 ++++++
 package/python/python-2.7-111-optional-ssl.patch   |   25 ++
 package/python/python-2.7-112-optional-bzip2.patch |   24 ++
 package/python/python-2.7-113-optional-zlib.patch  |   24 ++
 package/python/python.mk                           |  278 ++++++++------------
 42 files changed, 1799 insertions(+), 406 deletions(-)
 create mode 100644 package/libffi/Config.in
 create mode 100644 package/libffi/libffi.mk
 create mode 100644 package/multimedia/python-mad/Config.in
 create mode 100644 package/multimedia/python-mad/python-mad.mk
 create mode 100644 package/python-serial/Config.in
 create mode 100644 package/python-serial/python-serial.mk
 delete mode 100644 package/python/python-2.4-001-cross-compile.patch
 delete mode 100644 package/python/python-2.4-002-cross-compile.patch
 delete mode 100644 package/python/python-2.4-010-disable_modules_and_ssl.patch
 delete mode 100644 package/python/python-2.4-020-gentoo_py_dontcompile.patch
 create mode 100644 package/python/python-2.7-001-support-for-build.patch
 create mode 100644 package/python/python-2.7-002-cross-compile-variable.patch
 create mode 100644 package/python/python-2.7-003-no-import-when-cross-compiling.patch
 create mode 100644 package/python/python-2.7-004-no-host-headers-libs.patch
 create mode 100644 package/python/python-2.7-005-staging-headers-libs.patch
 create mode 100644 package/python/python-2.7-006-disable-extensions.patch
 create mode 100644 package/python/python-2.7-007-do-not-generate-pyo-files.patch
 create mode 100644 package/python/python-2.7-008-reread-environment.patch
 create mode 100644 package/python/python-2.7-009-python-symlink.patch
 create mode 100644 package/python/python-2.7-010-change-pyconfig-h-location.patch
 create mode 100644 package/python/python-2.7-011-no-rpath.patch
 create mode 100644 package/python/python-2.7-012-correct-32bit-64bit-check.patch
 create mode 100644 package/python/python-2.7-100-optional-test-modules.patch
 create mode 100644 package/python/python-2.7-101-optional-pydoc.patch
 create mode 100644 package/python/python-2.7-102-optional-2to3.patch
 create mode 100644 package/python/python-2.7-103-optional-sqlite.patch
 create mode 100644 package/python/python-2.7-104-optional-tk.patch
 create mode 100644 package/python/python-2.7-105-optional-curses.patch
 create mode 100644 package/python/python-2.7-106-optional-expat.patch
 create mode 100644 package/python/python-2.7-107-optional-codecs-cjk.patch
 create mode 100644 package/python/python-2.7-108-optional-nis.patch
 create mode 100644 package/python/python-2.7-109-optional-unicodedata.patch
 create mode 100644 package/python/python-2.7-110-optional-db.patch
 create mode 100644 package/python/python-2.7-111-optional-ssl.patch
 create mode 100644 package/python/python-2.7-112-optional-bzip2.patch
 create mode 100644 package/python/python-2.7-113-optional-zlib.patch

Thanks,
-- 
Thomas Petazzoni

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 01/10] python: Move to version 2.7
  2011-01-24 11:01 [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
@ 2011-01-24 11:01 ` Thomas Petazzoni
  2011-01-24 11:01 ` [Buildroot] [PATCH 02/10] python: Port the python2.4 patches to 2.7 Thomas Petazzoni
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Thomas Petazzoni @ 2011-01-24 11:01 UTC (permalink / raw)
  To: buildroot

From: Maxime Ripard <ripard@archos.com>

Signed-off-by: Maxime Ripard <ripard@archos.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/python/python.mk |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/package/python/python.mk b/package/python/python.mk
index 8721d40..5c85c59 100644
--- a/package/python/python.mk
+++ b/package/python/python.mk
@@ -3,8 +3,8 @@
 # python
 #
 #############################################################
-PYTHON_VERSION=2.4.5
-PYTHON_VERSION_MAJOR=2.4
+PYTHON_VERSION=2.7
+PYTHON_VERSION_MAJOR=2.7
 PYTHON_SOURCE:=Python-$(PYTHON_VERSION).tar.bz2
 PYTHON_SITE:=http://python.org/ftp/python/$(PYTHON_VERSION)
 PYTHON_DIR:=$(BUILD_DIR)/Python-$(PYTHON_VERSION)
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 02/10] python: Port the python2.4 patches to 2.7
  2011-01-24 11:01 [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
  2011-01-24 11:01 ` [Buildroot] [PATCH 01/10] python: Move to version 2.7 Thomas Petazzoni
@ 2011-01-24 11:01 ` Thomas Petazzoni
  2011-01-24 11:01 ` [Buildroot] [PATCH 03/10] python: Add the needed patches to compile python2.7 in buildroot Thomas Petazzoni
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Thomas Petazzoni @ 2011-01-24 11:01 UTC (permalink / raw)
  To: buildroot

From: Maxime Ripard <maxime.ripard@anandra.org>

Signed-off-by: Maxime Ripard <ripard@archos.com>
---
 package/python/python-2.4-001-cross-compile.patch  |  106 ------------------
 package/python/python-2.4-002-cross-compile.patch  |   36 ------
 .../python-2.4-010-disable_modules_and_ssl.patch   |   37 -------
 .../python-2.4-020-gentoo_py_dontcompile.patch     |   18 ---
 package/python/python-2.7-001-cross-compile.patch  |  114 ++++++++++++++++++++
 package/python/python-2.7-002-cross-compile.patch  |   47 ++++++++
 .../python-2.7-010-disable_modules_and_ssl.patch   |   49 +++++++++
 .../python-2.7-020-gentoo_py_dontcompile.patch     |   27 +++++
 8 files changed, 237 insertions(+), 197 deletions(-)
 delete mode 100644 package/python/python-2.4-001-cross-compile.patch
 delete mode 100644 package/python/python-2.4-002-cross-compile.patch
 delete mode 100644 package/python/python-2.4-010-disable_modules_and_ssl.patch
 delete mode 100644 package/python/python-2.4-020-gentoo_py_dontcompile.patch
 create mode 100644 package/python/python-2.7-001-cross-compile.patch
 create mode 100644 package/python/python-2.7-002-cross-compile.patch
 create mode 100644 package/python/python-2.7-010-disable_modules_and_ssl.patch
 create mode 100644 package/python/python-2.7-020-gentoo_py_dontcompile.patch

diff --git a/package/python/python-2.4-001-cross-compile.patch b/package/python/python-2.4-001-cross-compile.patch
deleted file mode 100644
index 96e52a6..0000000
--- a/package/python/python-2.4-001-cross-compile.patch
+++ /dev/null
@@ -1,106 +0,0 @@
-diff -rduNp Python-2.4.2.orig/Makefile.pre.in Python-2.4.2/Makefile.pre.in
---- Python-2.4.2.orig/Makefile.pre.in	2005-03-29 01:23:01.000000000 +0200
-+++ Python-2.4.2/Makefile.pre.in	2007-01-22 19:37:08.000000000 +0100
-@@ -162,6 +162,7 @@ UNICODE_OBJS=   @UNICODE_OBJS@
- 
- PYTHON=		python$(EXE)
- BUILDPYTHON=	python$(BUILDEXE)
-+HOSTPYTHON=	$(BUILDPYTHON)
- 
- # === Definitions added by makesetup ===
- 
-@@ -188,7 +189,7 @@ GRAMMAR_INPUT=	$(srcdir)/Grammar/Grammar
- ##########################################################################
- # Parser
- PGEN=		Parser/pgen$(EXE)
--
-+HOSTPGEN=	$(PGEN)$(EXE)
- POBJS=		\
- 		Parser/acceler.o \
- 		Parser/grammar1.o \
-@@ -320,8 +321,8 @@ platform: $(BUILDPYTHON)
- # Build the shared modules
- sharedmods: $(BUILDPYTHON)
- 	case $$MAKEFLAGS in \
--	*-s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \
--	*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \
-+	*-s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(HOSTPYTHON) -E $(srcdir)/setup.py -q build;; \
-+	*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(HOSTPYTHON) -E $(srcdir)/setup.py build;; \
- 	esac
- 
- # buildno should really depend on something like LIBRARY_SRC
-@@ -442,7 +443,7 @@ Modules/ccpython.o: $(srcdir)/Modules/cc
- 
- 
- $(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
--		-$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
-+		-$(HOSTPGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
- 
- $(PGEN):	$(PGENOBJS)
- 		$(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
-@@ -719,19 +720,19 @@ libinstall:	$(BUILDPYTHON) $(srcdir)/Lib
- 	done
- 	$(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
- 	PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
--		./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
-+		$(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
- 		-d $(LIBDEST) -f \
- 		-x 'badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
- 	PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
--		./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
-+		$(HOSTPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
- 		-d $(LIBDEST) -f \
- 		-x 'badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
- 	-PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
--		./$(BUILDPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
-+		$(HOSTPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
- 		-d $(LIBDEST)/site-packages -f \
- 		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
- 	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
--		./$(BUILDPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
-+		$(HOSTPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
- 		-d $(LIBDEST)/site-packages -f \
- 		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
- 
-@@ -826,7 +827,7 @@ libainstall:	all
- # Install the dynamically loadable modules
- # This goes into $(exec_prefix)
- sharedinstall:
--	$(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \
-+	$(RUNSHARED) $(HOSTPYTHON) -E $(srcdir)/setup.py install \
- 	   	--prefix=$(prefix) \
- 		--install-scripts=$(BINDIR) \
- 		--install-platlib=$(DESTSHARED) \
-diff -rduNp Python-2.4.2.orig/setup.py Python-2.4.2/setup.py
---- Python-2.4.2.orig/setup.py	2005-03-09 23:27:24.000000000 +0100
-+++ Python-2.4.2/setup.py	2007-01-22 19:37:08.000000000 +0100
-@@ -204,6 +204,7 @@ class PyBuildExt(build_ext):
-         try:
-             imp.load_dynamic(ext.name, ext_filename)
-         except ImportError, why:
-+            return
-             self.announce('*** WARNING: renaming "%s" since importing it'
-                           ' failed: %s' % (ext.name, why), level=3)
-             assert not self.inplace
-@@ -239,8 +240,6 @@ class PyBuildExt(build_ext):
- 
-     def detect_modules(self):
-         # Ensure that /usr/local is always used
--        add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
--        add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
- 
-         # Add paths to popular package managers on OS X/darwin
-         if sys.platform == "darwin":
-@@ -251,12 +250,6 @@ class PyBuildExt(build_ext):
-             add_dir_to_list(self.compiler.library_dirs, '/opt/local/lib')
-             add_dir_to_list(self.compiler.include_dirs, '/opt/local/include')
- 
--        if os.path.normpath(sys.prefix) != '/usr':
--            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"))
--
-         try:
-             have_unicode = unicode
-         except NameError:
diff --git a/package/python/python-2.4-002-cross-compile.patch b/package/python/python-2.4-002-cross-compile.patch
deleted file mode 100644
index 207335a..0000000
--- a/package/python/python-2.4-002-cross-compile.patch
+++ /dev/null
@@ -1,36 +0,0 @@
---- Python-2.4.2-001/setup.py	2007-01-23 16:18:37.000000000 +0100
-+++ Python-2.4.2/setup.py	2007-01-23 16:26:43.000000000 +0100
-@@ -239,7 +239,18 @@
-         return sys.platform
- 
-     def detect_modules(self):
--        # Ensure that /usr/local is always used
-+        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)
- 
-         # Add paths to popular package managers on OS X/darwin
-         if sys.platform == "darwin":
-@@ -258,11 +269,8 @@
-         # 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.
--        lib_dirs = self.compiler.library_dirs + [
--            '/lib64', '/usr/lib64',
--            '/lib', '/usr/lib',
--            ]
--        inc_dirs = self.compiler.include_dirs + ['/usr/include']
-+        lib_dirs = self.compiler.library_dirs
-+        inc_dirs = self.compiler.include_dirs
-         exts = []
- 
-         platform = self.get_platform()
diff --git a/package/python/python-2.4-010-disable_modules_and_ssl.patch b/package/python/python-2.4-010-disable_modules_and_ssl.patch
deleted file mode 100644
index a690eae..0000000
--- a/package/python/python-2.4-010-disable_modules_and_ssl.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-diff -rduNp Python-2.4.2-002/setup.py Python-2.4.2/setup.py
---- Python-2.4.2-002/setup.py	2007-01-22 19:41:47.000000000 +0100
-+++ Python-2.4.2/setup.py	2007-01-22 19:47:25.000000000 +0100
-@@ -15,7 +15,14 @@ from distutils.command.install import in
- from distutils.command.install_lib import install_lib
- 
- # This global variable is used to hold the list of modules to be disabled.
--disabled_module_list = []
-+try:
-+	disabled_module_list = os.environ["PYTHON_DISABLE_MODULES"].split()
-+except KeyError:
-+	disabled_module_list = []
-+try:
-+	disable_ssl = os.environ["PYTHON_DISABLE_SSL"]
-+except KeyError:
-+	disable_ssl = 0
- 
- def add_dir_to_list(dirlist, dir):
-     """Add the directory 'dir' to the list 'dirlist' (at the front) if
-@@ -247,6 +254,7 @@ class PyBuildExt(build_ext):
-         return sys.platform
- 
-     def detect_modules(self):
-+        global disable_ssl
-         try:
-             modules_include_dirs = os.environ["PYTHON_MODULES_INCLUDE"].split()
-         except KeyError:
-@@ -468,7 +476,8 @@ class PyBuildExt(build_ext):
-                                      ] )
- 
-         if (ssl_incs is not None and
--            ssl_libs is not None):
-+            ssl_libs is not None and
-+			not disable_ssl):
-             exts.append( Extension('_ssl', ['_ssl.c'],
-                                    include_dirs = ssl_incs,
-                                    library_dirs = ssl_libs,
diff --git a/package/python/python-2.4-020-gentoo_py_dontcompile.patch b/package/python/python-2.4-020-gentoo_py_dontcompile.patch
deleted file mode 100644
index 6e634be..0000000
--- a/package/python/python-2.4-020-gentoo_py_dontcompile.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-diff -rduNp Python-2.4.2-010/Python/import.c Python-2.4.2/Python/import.c
---- Python-2.4.2-010/Python/import.c	2005-09-14 20:15:03.000000000 +0200
-+++ Python-2.4.2/Python/import.c	2007-01-22 19:49:18.000000000 +0100
-@@ -822,8 +822,12 @@ static void
- write_compiled_module(PyCodeObject *co, char *cpathname, long mtime)
- {
- 	FILE *fp;
--
--	fp = open_exclusive(cpathname);
-+   char *py_dontcompile = getenv("PYTHON_DONTCOMPILE");
-+   
-+   if (!py_dontcompile) 
-+     fp = open_exclusive(cpathname);
-+   else
-+     fp = NULL;
- 	if (fp == NULL) {
- 		if (Py_VerboseFlag)
- 			PySys_WriteStderr(
diff --git a/package/python/python-2.7-001-cross-compile.patch b/package/python/python-2.7-001-cross-compile.patch
new file mode 100644
index 0000000..1ee97a8
--- /dev/null
+++ b/package/python/python-2.7-001-cross-compile.patch
@@ -0,0 +1,114 @@
+Add cross-compilation support in the python Makefile and setup.py since
+python has no such support.
+
+The main point here is to first build a python interpreter to run on the
+host, and then use it to compile the target python.
+
+We also remove some error-generating code that is irrelevant in our
+situation, such as checking if we can import a cross-compiled module.
+
+Patch ported to python2.7 by Maxime Ripard <ripard@archos.com>
+
+diff -rduNp Python-2.7.orig/Makefile.pre.in Python-2.7/Makefile.pre.in
+--- Python-2.7.orig/Makefile.pre.in	2010-04-12 02:10:46.000000000 +0200
++++ Python-2.7/Makefile.pre.in	2010-09-21 16:46:07.000000000 +0200
+@@ -404,8 +404,8 @@ platform: $(BUILDPYTHON)
+ # Build the shared modules
+ sharedmods: $(BUILDPYTHON)
+ 	@case $$MAKEFLAGS in \
+-	*s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \
+-	*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \
++	*s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' $(HOSTPYTHON) -E $(srcdir)/setup.py -q build;; \
++	*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' $(HOSTPYTHON) -E $(srcdir)/setup.py build;; \
+ 	esac
+ 
+ # Build static library
+@@ -538,7 +538,7 @@ Modules/python.o: $(srcdir)/Modules/pyth
+ 
+ $(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
+ 		-@$(INSTALL) -d Include
+-		-$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
++		-$(HOSTPGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
+ 
+ $(PGEN):	$(PGENOBJS)
+ 		$(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
+@@ -920,25 +920,25 @@ libinstall:	build_all $(srcdir)/Lib/$(PL
+ 	done
+ 	$(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
+ 	PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
+-		./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
++		$(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
+ 		-d $(LIBDEST) -f \
+ 		-x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+ 		$(DESTDIR)$(LIBDEST)
+ 	PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+-		./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
++		$(HOSTPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
+ 		-d $(LIBDEST) -f \
+ 		-x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+ 		$(DESTDIR)$(LIBDEST)
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
+-		./$(BUILDPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
++		$(HOSTPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
+ 		-d $(LIBDEST)/site-packages -f \
+ 		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+-		./$(BUILDPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
++		$(HOSTPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
+ 		-d $(LIBDEST)/site-packages -f \
+ 		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+-		./$(BUILDPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"
++		$(HOSTPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"
+ 
+ # Create the PLATDIR source directory, if one wasn't distributed..
+ $(srcdir)/Lib/$(PLATDIR):
+@@ -1043,7 +1043,7 @@ libainstall:	all python-config
+ # Install the dynamically loadable modules
+ # This goes into $(exec_prefix)
+ sharedinstall:
+-	$(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \
++	$(RUNSHARED) $(HOSTPYTHON) -E $(srcdir)/setup.py install \
+ 	   	--prefix=$(prefix) \
+ 		--install-scripts=$(BINDIR) \
+ 		--install-platlib=$(DESTSHARED) \
+diff -rduNp Python-2.7.orig/setup.py Python-2.7/setup.py
+--- Python-2.7.orig/setup.py	2010-06-27 14:36:16.000000000 +0200
++++ Python-2.7/setup.py	2010-09-21 16:59:59.000000000 +0200
+@@ -310,9 +310,9 @@ class PyBuildExt(build_ext):
+         try:
+             imp.load_dynamic(ext.name, ext_filename)
+         except ImportError, why:
+-            self.failed.append(ext.name)
+-            self.announce('*** WARNING: renaming "%s" since importing it'
+-                          ' failed: %s' % (ext.name, why), level=3)
++            self.announce('*** WARNING: Importing "%s" failed, probably '
++                          'because of cross-compilation' % ext.name, level=3)
++            return
+             assert not self.inplace
+             basename, tail = os.path.splitext(ext_filename)
+             newname = basename + "_failed" + tail
+@@ -346,10 +346,6 @@ class PyBuildExt(build_ext):
+         return sys.platform
+ 
+     def detect_modules(self):
+-        # Ensure that /usr/local is always used
+-        add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
+-        add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
+-
+         # Add paths specified in the environment variables LDFLAGS and
+         # CPPFLAGS for header and library files.
+         # We must get the values from the Makefile and not the environment
+@@ -384,12 +380,6 @@ class PyBuildExt(build_ext):
+                     for directory in reversed(options.dirs):
+                         add_dir_to_list(dir_list, directory)
+ 
+-        if os.path.normpath(sys.prefix) != '/usr':
+-            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"))
+-
+         try:
+             have_unicode = unicode
+         except NameError:
diff --git a/package/python/python-2.7-002-cross-compile.patch b/package/python/python-2.7-002-cross-compile.patch
new file mode 100644
index 0000000..598e5f5
--- /dev/null
+++ b/package/python/python-2.7-002-cross-compile.patch
@@ -0,0 +1,47 @@
+Second patch to bring cross-compilation support to python build-system.
+
+Allow the libraries detection routine to look for headers and libs in
+other directories than /usr/include or /usr/lib through the env variables
+PYTHON_MODULES_INCLUDE and PYTHON_MODULES_LIB.
+
+We can then use it to look for libraries in the buildroot staging directory.
+
+
+Patch ported to python2.7 by Maxime Ripard <ripard@archos.com>
+
+diff -rduNp Python-2.7.orig/setup.py Python-2.7/setup.py
+--- Python-2.7.orig/setup.py	2010-09-21 17:15:31.000000000 +0200
++++ Python-2.7/setup.py	2010-09-21 17:20:46.000000000 +0200
+@@ -346,6 +346,18 @@ class PyBuildExt(build_ext):
+         return sys.platform
+ 
+     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_include_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)
+         # Add paths specified in the environment variables LDFLAGS and
+         # CPPFLAGS for header and library files.
+         # We must get the values from the Makefile and not the environment
+@@ -388,11 +400,8 @@ class PyBuildExt(build_ext):
+         # 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.
+-        lib_dirs = self.compiler.library_dirs + [
+-            '/lib64', '/usr/lib64',
+-            '/lib', '/usr/lib',
+-            ]
+-        inc_dirs = self.compiler.include_dirs + ['/usr/include']
++        lib_dirs = self.compiler.library_dirs
++        inc_dirs = self.compiler.include_dirs
+         exts = []
+         missing = []
+ 
diff --git a/package/python/python-2.7-010-disable_modules_and_ssl.patch b/package/python/python-2.7-010-disable_modules_and_ssl.patch
new file mode 100644
index 0000000..492e372
--- /dev/null
+++ b/package/python/python-2.7-010-disable_modules_and_ssl.patch
@@ -0,0 +1,49 @@
+Support some customisation on python compilation.
+
+With this patch, we can now remove some modules introducing external
+dependencies from the compilation, thus removing these irrelevant in most
+cases dependencies (ie. openssl, ncurses, etc).
+
+This modules can be removed by listing them in the PYTHON_DISABLE_MODULES
+environment variable.
+
+Patch ported to python2.7 by Maxime Ripard <ripard@archos.com>
+
+diff -rduNp Python-2.7.orig/setup.py Python-2.7/setup.py
+--- Python-2.7.orig/setup.py	2010-09-21 17:31:52.000000000 +0200
++++ Python-2.7/setup.py	2010-09-21 17:35:20.000000000 +0200
+@@ -21,7 +21,15 @@ from distutils.spawn import find_executa
+ COMPILED_WITH_PYDEBUG = hasattr(sys, 'gettotalrefcount')
+ 
+ # This global variable is used to hold the list of modules to be disabled.
+-disabled_module_list = []
++try:
++    disabled_module_list = os.environ["PYTHON_DISABLE_MODULES"].split()
++except KeyError:
++    disabled_module_list = list()
++
++try:
++    disable_ssl = os.environ["PYTHON_DISABLE_SSL"]
++except KeyError:
++    disable_ssl = 0
+ 
+ def add_dir_to_list(dirlist, dir):
+     """Add the directory 'dir' to the list 'dirlist' (at the front) if
+@@ -346,6 +354,7 @@ class PyBuildExt(build_ext):
+         return sys.platform
+ 
+     def detect_modules(self):
++        global disable_ssl
+         try:
+             modules_include_dirs = os.environ["PYTHON_MODULES_INCLUDE"].split()
+         except KeyError:
+@@ -685,7 +694,8 @@ class PyBuildExt(build_ext):
+                                      ] )
+ 
+         if (ssl_incs is not None and
+-            ssl_libs is not None):
++            ssl_libs is not None and
++            not disable_ssl):
+             exts.append( Extension('_ssl', ['_ssl.c'],
+                                    include_dirs = ssl_incs,
+                                    library_dirs = ssl_libs,
diff --git a/package/python/python-2.7-020-gentoo_py_dontcompile.patch b/package/python/python-2.7-020-gentoo_py_dontcompile.patch
new file mode 100644
index 0000000..276f0e6
--- /dev/null
+++ b/package/python/python-2.7-020-gentoo_py_dontcompile.patch
@@ -0,0 +1,27 @@
+This patch purpose is to allow not to save the generated python bytecode in
+a file for later use through the PYTHON_DONTCOMPILE environment variable.
+
+I do not see the use of it, because you can choose if you want but it seems
+somewhat related to gentoo.
+
+Maybe useful when the generated rootfs is mounted on read-only on the target.
+
+Patch ported to python2.7 by Maxime Ripard <ripard@archos.com>
+
+diff -rduNp Python-2.7.orig/Python/import.c Python-2.7/Python/import.c
+--- Python-2.7.orig/Python/import.c	2010-09-30 12:05:53.000000000 +0200
++++ Python-2.7/Python/import.c	2010-09-30 12:20:38.000000000 +0200
+@@ -886,7 +886,12 @@ write_compiled_module(PyCodeObject *co,
+     mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
+ #endif
+ 
+-    fp = open_exclusive(cpathname, mode);
++    char *py_dontcompile = getenv("PYTHON_DONTCOMPILE");
++
++    if (!py_dontcompile)
++      fp = open_exclusive(cpathname, mode);
++    else
++      fp = NULL;
+     if (fp == NULL) {
+         if (Py_VerboseFlag)
+             PySys_WriteStderr(
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 03/10] python: Add the needed patches to compile python2.7 in buildroot.
  2011-01-24 11:01 [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
  2011-01-24 11:01 ` [Buildroot] [PATCH 01/10] python: Move to version 2.7 Thomas Petazzoni
  2011-01-24 11:01 ` [Buildroot] [PATCH 02/10] python: Port the python2.4 patches to 2.7 Thomas Petazzoni
@ 2011-01-24 11:01 ` Thomas Petazzoni
  2011-01-24 11:01 ` [Buildroot] [PATCH 04/10] python: Fix make install (Workaround python's bug #1669349) Thomas Petazzoni
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Thomas Petazzoni @ 2011-01-24 11:01 UTC (permalink / raw)
  To: buildroot

From: Maxime Ripard <maxime.ripard@anandra.org>

Signed-off-by: Maxime Ripard <ripard@archos.com>
---
 .../python-2.7-030-fix-long-long-format.patch      |   19 ++++++++++
 .../python-2.7-040-bytecode-generation-fix.patch   |   38 ++++++++++++++++++++
 2 files changed, 57 insertions(+), 0 deletions(-)
 create mode 100644 package/python/python-2.7-030-fix-long-long-format.patch
 create mode 100644 package/python/python-2.7-040-bytecode-generation-fix.patch

diff --git a/package/python/python-2.7-030-fix-long-long-format.patch b/package/python/python-2.7-030-fix-long-long-format.patch
new file mode 100644
index 0000000..5b9dddd
--- /dev/null
+++ b/package/python/python-2.7-030-fix-long-long-format.patch
@@ -0,0 +1,19 @@
+Python's configure assume than when cross-compiling the target has no
+support for long long int. This assumption breaks compilation later in the
+process. Since gcc handles long long support, we can change the value to
+assume that there is such support.
+
+Patch by Maxime Ripard <ripard@archos.com>
+
+diff -rduNp Python-2.7.orig/configure Python-2.7/configure
+--- Python-2.7.orig/configure	2010-09-30 12:05:54.000000000 +0200
++++ Python-2.7/configure	2010-09-30 12:12:30.000000000 +0200
+@@ -13517,7 +13517,7 @@ $as_echo_n "checking for %lld and %llu p
+   $as_echo_n "(cached) " >&6
+ else
+   if test "$cross_compiling" = yes; then :
+-  ac_cv_have_long_long_format=no
++  ac_cv_have_long_long_format=yes
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
diff --git a/package/python/python-2.7-040-bytecode-generation-fix.patch b/package/python/python-2.7-040-bytecode-generation-fix.patch
new file mode 100644
index 0000000..0984c48
--- /dev/null
+++ b/package/python/python-2.7-040-bytecode-generation-fix.patch
@@ -0,0 +1,38 @@
+The compileall script is used to compile to python bytecode all the modules.
+However, it relies on the struct package that is not built for the host
+python, thus crashing at execution when compiling the target python.
+When compiling, the removed code block is never executed, so we can safely
+remove it, removing in the same time the dependency on struct.
+
+Patch by Maxime Ripard <ripard@archos.com>
+
+Index: Python-2.7/Lib/compileall.py
+===================================================================
+--- Python-2.7.orig/Lib/compileall.py	(r??vision 84276)
++++ Python-2.7/Lib/compileall.py	(copie de travail)
+@@ -14,7 +14,6 @@
+ import os
+ import sys
+ import py_compile
+-import struct
+ import imp
+ 
+ __all__ = ["compile_dir","compile_file","compile_path"]
+@@ -83,17 +82,6 @@
+     if os.path.isfile(fullname):
+         head, tail = name[:-3], name[-3:]
+         if tail == '.py':
+-            if not force:
+-                try:
+-                    mtime = int(os.stat(fullname).st_mtime)
+-                    expect = struct.pack('<4sl', imp.get_magic(), mtime)
+-                    cfile = fullname + (__debug__ and 'c' or 'o')
+-                    with open(cfile, 'rb') as chandle:
+-                        actual = chandle.read(8)
+-                    if expect == actual:
+-                        return success
+-                except IOError:
+-                    pass
+             if not quiet:
+                 print 'Compiling', fullname, '...'
+             try:
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 04/10] python: Fix make install (Workaround python's bug #1669349)
  2011-01-24 11:01 [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
                   ` (2 preceding siblings ...)
  2011-01-24 11:01 ` [Buildroot] [PATCH 03/10] python: Add the needed patches to compile python2.7 in buildroot Thomas Petazzoni
@ 2011-01-24 11:01 ` Thomas Petazzoni
  2011-01-24 11:01 ` [Buildroot] [PATCH 05/10] libffi: new package Thomas Petazzoni
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Thomas Petazzoni @ 2011-01-24 11:01 UTC (permalink / raw)
  To: buildroot

From: Maxime Ripard <maxime.ripard@anandra.org>

Signed-off-by: Maxime Ripard <ripard@archos.com>
---
 package/python/python.mk |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/package/python/python.mk b/package/python/python.mk
index 5c85c59..3afc132 100644
--- a/package/python/python.mk
+++ b/package/python/python.mk
@@ -128,7 +128,15 @@ ifneq ($(BR2_PACKAGE_PYTHON_SSL),y)
 endif
 	rm -rf $(PYTHON_DIR)/Lib/test
 	LD_LIBRARY_PATH=$(STAGING_DIR)/lib
-	$(MAKE) CC="$(TARGET_CC)" -C $(PYTHON_DIR) install \
+	# FIXME: The make -i just below is to work around python's bug
+	# #1669349 (http://bugs.python.org/issue1669349) which is introducing
+	# a failure at make install on a python-free system. Since none of
+	# the other the provided workaround work, the make -i is the only
+	# solution. The failing lib is install later in the process, so
+	# even if the compilation is failing without the patch, with it, the
+	# target python is fully functionnal.
+	# The "-i" will have to be removed when the bug will be solved.
+	$(MAKE) CC="$(TARGET_CC)" -C $(PYTHON_DIR) -i install \
 		DESTDIR=$(TARGET_DIR) CROSS_COMPILE=yes \
 		PYTHON_MODULES_INCLUDE=$(STAGING_DIR)/usr/include \
 		PYTHON_MODULES_LIB="$(STAGING_DIR)/lib $(STAGING_DIR)/usr/lib" \
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 05/10] libffi: new package
  2011-01-24 11:01 [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
                   ` (3 preceding siblings ...)
  2011-01-24 11:01 ` [Buildroot] [PATCH 04/10] python: Fix make install (Workaround python's bug #1669349) Thomas Petazzoni
@ 2011-01-24 11:01 ` Thomas Petazzoni
  2011-01-24 11:01 ` [Buildroot] [PATCH 06/10] autotools: allow host package to use <pkg>_MAKE_ENV and <pkg>_MAKE Thomas Petazzoni
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Thomas Petazzoni @ 2011-01-24 11:01 UTC (permalink / raw)
  To: buildroot

libffi is needed by the Python interpreter.

The libffi library provides a portable, high level programming
interface to various calling conventions. This allows a programmer to
call any function specified by a call interface description at
run-time.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/Config.in        |    1 +
 package/libffi/Config.in |    9 +++++++++
 package/libffi/libffi.mk |   33 +++++++++++++++++++++++++++++++++
 3 files changed, 43 insertions(+), 0 deletions(-)
 create mode 100644 package/libffi/Config.in
 create mode 100644 package/libffi/libffi.mk

diff --git a/package/Config.in b/package/Config.in
index da5b62b..438e1b4 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -326,6 +326,7 @@ source "package/libcap/Config.in"
 source "package/libdaemon/Config.in"
 source "package/libelf/Config.in"
 source "package/libevent/Config.in"
+source "package/libffi/Config.in"
 source "package/libglib2/Config.in"
 source "package/liboil/Config.in"
 source "package/startup-notification/Config.in"
diff --git a/package/libffi/Config.in b/package/libffi/Config.in
new file mode 100644
index 0000000..56eedf8
--- /dev/null
+++ b/package/libffi/Config.in
@@ -0,0 +1,9 @@
+config BR2_PACKAGE_LIBFFI
+	bool "libffi"
+	help
+	  The libffi library provides a portable, high level
+	  programming interface to various calling conventions. This
+	  allows a programmer to call any function specified by a call
+	  interface description at run-time.
+
+	  http://sourceware.org/libffi/
\ No newline at end of file
diff --git a/package/libffi/libffi.mk b/package/libffi/libffi.mk
new file mode 100644
index 0000000..0c5184d
--- /dev/null
+++ b/package/libffi/libffi.mk
@@ -0,0 +1,33 @@
+#############################################################
+#
+# libffi
+#
+#############################################################
+
+LIBFFI_VERSION = 3.0.9
+LIBFFI_SITE    = ftp://sources.redhat.com/pub/libffi/
+
+LIBFFI_INSTALL_STAGING = YES
+
+# Move the headers to the usual location, and adjust the .pc file
+# accordingly
+define LIBFFI_MOVE_STAGING_HEADERS
+	mv $(STAGING_DIR)/usr/lib/libffi-*/include/*.h $(STAGING_DIR)/usr/include/
+	sed -i '/^includedir.*/d' $(STAGING_DIR)/usr/lib/pkgconfig/libffi.pc
+	rm -rf $(TARGET_DIR)/usr/lib/libffi-*
+endef
+
+LIBFFI_POST_INSTALL_STAGING_HOOKS += LIBFFI_MOVE_STAGING_HEADERS
+
+# Similar for target headers
+define LIBFFI_MOVE_TARGET_HEADERS
+	install -d $(TARGET_DIR)/usr/include/
+	mv $(TARGET_DIR)/usr/lib/libffi-*/include/*.h $(TARGET_DIR)/usr/include/
+	sed -i '/^includedir.*/d' $(TARGET_DIR)/usr/lib/pkgconfig/libffi.pc
+	rm -rf $(TARGET_DIR)/usr/lib/libffi-*
+endef
+
+LIBFFI_POST_INSTALL_TARGET_HOOKS += LIBFFI_MOVE_TARGET_HEADERS
+
+$(eval $(call AUTOTARGETS,package,libffi))
+
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 06/10] autotools: allow host package to use <pkg>_MAKE_ENV and <pkg>_MAKE
  2011-01-24 11:01 [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
                   ` (4 preceding siblings ...)
  2011-01-24 11:01 ` [Buildroot] [PATCH 05/10] libffi: new package Thomas Petazzoni
@ 2011-01-24 11:01 ` Thomas Petazzoni
  2011-01-24 21:04   ` Peter Korsgaard
  2011-01-24 11:01 ` [Buildroot] [PATCH 07/10] python: convert to autotargets, bump to 2.7.1, many improvements Thomas Petazzoni
                   ` (4 subsequent siblings)
  10 siblings, 1 reply; 19+ messages in thread
From: Thomas Petazzoni @ 2011-01-24 11:01 UTC (permalink / raw)
  To: buildroot

This will be needed by the Python interpreter package.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/Makefile.autotools.in |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/package/Makefile.autotools.in b/package/Makefile.autotools.in
index de0a355..d445348 100644
--- a/package/Makefile.autotools.in
+++ b/package/Makefile.autotools.in
@@ -200,7 +200,7 @@ endif
 #
 ifndef $(2)_INSTALL_CMDS
 define $(2)_INSTALL_CMDS
-	$(HOST_MAKE_ENV) $(MAKE) -C $$($$(PKG)_SRCDIR) install
+	$(HOST_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) -C $$($$(PKG)_SRCDIR) install
 endef
 endif
 
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 07/10] python: convert to autotargets, bump to 2.7.1, many improvements
  2011-01-24 11:01 [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
                   ` (5 preceding siblings ...)
  2011-01-24 11:01 ` [Buildroot] [PATCH 06/10] autotools: allow host package to use <pkg>_MAKE_ENV and <pkg>_MAKE Thomas Petazzoni
@ 2011-01-24 11:01 ` Thomas Petazzoni
  2011-01-24 11:01 ` [Buildroot] [PATCH 08/10] Remove .py or .pyc depending on Python configuration Thomas Petazzoni
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 19+ messages in thread
From: Thomas Petazzoni @ 2011-01-24 11:01 UTC (permalink / raw)
  To: buildroot

This commit does a number of changes and improvements to the Python
interpreter package :

 * It converts the .mk file to the AUTOTARGETS infrastructure. Even
   though Python uses only autoconf and not automake, the AUTOTARGETS
   is a fairly good fit for the Python interpreter, so we make use of
   it.

 * It bumps the version to 2.7.1. As this is a minor release compared
   to 2.7, there are no particular changes needed because of this
   bump. All changes done to the package are cleanups and improvements
   unrelated to the version bump.

 * It uses the system libffi. Until now, Python was building its own
   libffi (a library used by interprets to build code that makes
   function call at runtime). Using the Python internal libffi was not
   working as Python was not passing the appropriate arguments down to
   libffi ./configure script. And it sounded better to use a
   system-wide libffi, that could potentially be used by other
   packages as well. This libffi is needed for the ctypes Python
   module.

 * Remove all "depends on BR2_PACKAGE_PYTHON" by moving all
   Python-related options under a "if BR2_PACKAGE_PYTHON ... endif"
   condition.

 * Make the installation of pre-compiled Python modules (.pyc) the
   default, since they are smaller and do not need to be compiled on
   the target. It is still possible to install uncompiled modules, or
   both the uncompiled and pre-compiled versions.

 * The options to select the set of Python modules to compile has been
   moved to a submenu.

 * The codecscjk (Japanese, Korean and Chinese codecs) module is no
   longer enabled by default.

 * The commented options for gdbm and nis in Python have been
   removed. Those were not supported, so let's get rid of unused code.

 * The option for the tkinker module in Python has been removed, since
   we don't have a package for Tk in Buildroot.

 * Options for the bzip2, sqlite and zlib modules have been added,
   since those modules have external dependencies.

 * The set of patches has been completely reworked and extended, with
   more fine-grained patches and newer functionalities. The patches
   are split in two categories:

    - Patches that make various modifications to the Python build
      system to support cross-compilation or make some minor
      modifications. Those patches are numbered from 0 to 100.

    - Patches that add configuration options to the Python build
      system in order to enable/disable the compilation of Python
      extensions or modules (test modules, pydoc, lib2to3, sqlite, tk,
      curses, expat, codecs-cjk, nis, unicodedata, database modules,
      ssl, bzip2, zlib). These patches are numbered from 100 to 200.

   All features of the previous four patches are preserved, but they
   are organized differently and the patches have been renamed. This
   makes it difficult to see the differences from the existing
   patches.

 * The host Python interpreter is now installed in $(HOST_DIR), since
   it is used to build third party Python modules.

 * The BR2_PACKAGE_PYTHON_DEV option is removed since
   BR2_HAVE_DEVFILES already does the necessary work.

 * The "make -i install" workaround introduced by Maxime Ripard is no
   longer needed. It was caused by the compilation of the tests that
   required the unicodedata module (which wasn't built in the host
   Python interpreter). Since we no longer compile the Python tests,
   the problem doesn't exist anymore and we can avoid this "-i"
   option.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/python/Config.in                           |   65 ++---
 package/python/python-2.7-001-cross-compile.patch  |  114 --------
 .../python/python-2.7-001-support-for-build.patch  |  153 +++++++++++
 .../python-2.7-002-cross-compile-variable.patch    |   55 ++++
 package/python/python-2.7-002-cross-compile.patch  |   47 ----
 ...on-2.7-003-no-import-when-cross-compiling.patch |   26 ++
 .../python-2.7-004-no-host-headers-libs.patch      |   97 +++++++
 .../python-2.7-005-staging-headers-libs.patch      |   38 +++
 .../python/python-2.7-006-disable-extensions.patch |  102 +++++++
 .../python-2.7-007-do-not-generate-pyo-files.patch |   40 +++
 .../python/python-2.7-008-reread-environment.patch |   65 +++++
 package/python/python-2.7-009-python-symlink.patch |   25 ++
 ...python-2.7-010-change-pyconfig-h-location.patch |   76 ++++++
 .../python-2.7-010-disable_modules_and_ssl.patch   |   49 ----
 package/python/python-2.7-011-no-rpath.patch       |   75 +++++
 .../python-2.7-012-correct-32bit-64bit-check.patch |   55 ++++
 .../python-2.7-020-gentoo_py_dontcompile.patch     |   27 --
 .../python-2.7-030-fix-long-long-format.patch      |   19 --
 .../python-2.7-040-bytecode-generation-fix.patch   |   38 ---
 .../python-2.7-100-optional-test-modules.patch     |   84 ++++++
 package/python/python-2.7-101-optional-pydoc.patch |   81 ++++++
 package/python/python-2.7-102-optional-2to3.patch  |   99 +++++++
 .../python/python-2.7-103-optional-sqlite.patch    |   28 ++
 package/python/python-2.7-104-optional-tk.patch    |   68 +++++
 .../python/python-2.7-105-optional-curses.patch    |   53 ++++
 package/python/python-2.7-106-optional-expat.patch |   84 ++++++
 .../python-2.7-107-optional-codecs-cjk.patch       |   25 ++
 package/python/python-2.7-108-optional-nis.patch   |   28 ++
 .../python-2.7-109-optional-unicodedata.patch      |   25 ++
 package/python/python-2.7-110-optional-db.patch    |   81 ++++++
 package/python/python-2.7-111-optional-ssl.patch   |   25 ++
 package/python/python-2.7-112-optional-bzip2.patch |   24 ++
 package/python/python-2.7-113-optional-zlib.patch  |   24 ++
 package/python/python.mk                           |  286 ++++++++------------
 34 files changed, 1671 insertions(+), 510 deletions(-)
 delete mode 100644 package/python/python-2.7-001-cross-compile.patch
 create mode 100644 package/python/python-2.7-001-support-for-build.patch
 create mode 100644 package/python/python-2.7-002-cross-compile-variable.patch
 delete mode 100644 package/python/python-2.7-002-cross-compile.patch
 create mode 100644 package/python/python-2.7-003-no-import-when-cross-compiling.patch
 create mode 100644 package/python/python-2.7-004-no-host-headers-libs.patch
 create mode 100644 package/python/python-2.7-005-staging-headers-libs.patch
 create mode 100644 package/python/python-2.7-006-disable-extensions.patch
 create mode 100644 package/python/python-2.7-007-do-not-generate-pyo-files.patch
 create mode 100644 package/python/python-2.7-008-reread-environment.patch
 create mode 100644 package/python/python-2.7-009-python-symlink.patch
 create mode 100644 package/python/python-2.7-010-change-pyconfig-h-location.patch
 delete mode 100644 package/python/python-2.7-010-disable_modules_and_ssl.patch
 create mode 100644 package/python/python-2.7-011-no-rpath.patch
 create mode 100644 package/python/python-2.7-012-correct-32bit-64bit-check.patch
 delete mode 100644 package/python/python-2.7-020-gentoo_py_dontcompile.patch
 delete mode 100644 package/python/python-2.7-030-fix-long-long-format.patch
 delete mode 100644 package/python/python-2.7-040-bytecode-generation-fix.patch
 create mode 100644 package/python/python-2.7-100-optional-test-modules.patch
 create mode 100644 package/python/python-2.7-101-optional-pydoc.patch
 create mode 100644 package/python/python-2.7-102-optional-2to3.patch
 create mode 100644 package/python/python-2.7-103-optional-sqlite.patch
 create mode 100644 package/python/python-2.7-104-optional-tk.patch
 create mode 100644 package/python/python-2.7-105-optional-curses.patch
 create mode 100644 package/python/python-2.7-106-optional-expat.patch
 create mode 100644 package/python/python-2.7-107-optional-codecs-cjk.patch
 create mode 100644 package/python/python-2.7-108-optional-nis.patch
 create mode 100644 package/python/python-2.7-109-optional-unicodedata.patch
 create mode 100644 package/python/python-2.7-110-optional-db.patch
 create mode 100644 package/python/python-2.7-111-optional-ssl.patch
 create mode 100644 package/python/python-2.7-112-optional-bzip2.patch
 create mode 100644 package/python/python-2.7-113-optional-zlib.patch

diff --git a/package/python/Config.in b/package/python/Config.in
index e77d7aa..11aa267 100644
--- a/package/python/Config.in
+++ b/package/python/Config.in
@@ -1,6 +1,7 @@
 config BR2_PACKAGE_PYTHON
 	bool "python"
 	depends on BR2_USE_WCHAR
+	select BR2_PACKAGE_LIBFFI
 	help
 	  The python language interpreter.
 
@@ -9,17 +10,11 @@ config BR2_PACKAGE_PYTHON
 comment "python requires a toolchain with WCHAR support"
 	depends on !BR2_USE_WCHAR
 
-config BR2_PACKAGE_PYTHON_DEV
-	depends on BR2_PACKAGE_PYTHON
-	bool "development files on target"
-	help
-	  If enabled, development files (headers and static libpython) will be
-	  installed on the target.
+if BR2_PACKAGE_PYTHON
 
 choice
-	prompt "Module format to install"
-	depends on BR2_PACKAGE_PYTHON
-	default BR2_PACKAGE_PYTHON_PY_ONLY
+	prompt "python module format to install"
+	default BR2_PACKAGE_PYTHON_PYC_ONLY
 	help
 	  Select Python module format to install on target (py, pyc or both)
 
@@ -34,51 +29,40 @@ config BR2_PACKAGE_PYTHON_PY_PYC
 
 endchoice
 
+menu "core python modules"
+
 comment "The following modules are unusual or require extra libraries"
-	depends on BR2_PACKAGE_PYTHON
+
+config BR2_PACKAGE_PYTHON_BZIP2
+	select BR2_PACKAGE_BZIP2
+	bool "bzip2 module"
+	help
+	  bzip2 module for Python
 
 config BR2_PACKAGE_PYTHON_BSDDB
-	depends on BR2_PACKAGE_PYTHON
 	select BR2_PACKAGE_BERKELEYDB
 	bool "bsddb module"
 	help
 	  bsddb module for Python.
 
 config BR2_PACKAGE_PYTHON_CODECSCJK
-	depends on BR2_PACKAGE_PYTHON
 	bool "codecscjk module"
-	default y
 	help
 	  Chinese/Japanese/Korean codecs module for Python (large).
 
 config BR2_PACKAGE_PYTHON_CURSES
-	depends on BR2_PACKAGE_PYTHON
 	select BR2_PACKAGE_NCURSES
 	bool "curses module"
 	help
 	  curses module for Python.
 
-# config BR2_PACKAGE_PYTHON_GDBM
-# 	depends on BR2_PACKAGE_PYTHON
-# 	bool "gdbm module"
-# 	help
-# 	  gdbm module for Python.
-
-# config BR2_PACKAGE_PYTHON_NIS
-# 	depends on BR2_PACKAGE_PYTHON
-# 	bool "nis module"
-# 	help
-# 	  nis module for Python.
-
 config BR2_PACKAGE_PYTHON_PYEXPAT
-	depends on BR2_PACKAGE_PYTHON
 	select BR2_PACKAGE_EXPAT
 	bool "pyexpat"
 	help
 	  pyexpat module for Python.
 
 config BR2_PACKAGE_PYTHON_READLINE
-	depends on BR2_PACKAGE_PYTHON
 	select BR2_PACKAGE_READLINE
 	bool "readline"
 	help
@@ -86,22 +70,29 @@ config BR2_PACKAGE_PYTHON_READLINE
 	  editing in the Python shell).
 
 config BR2_PACKAGE_PYTHON_SSL
-	depends on BR2_PACKAGE_PYTHON
 	select BR2_PACKAGE_OPENSSL
 	bool "ssl"
 	help
 	  _ssl module for Python (required for https in urllib etc).
 
-config BR2_PACKAGE_PYTHON_TKINTER
-	depends on BR2_PACKAGE_PYTHON
-	select BR2_PACKAGE_TCL
-	bool "tkinter module"
-	help
-	  tkinter module for Python.
-
 config BR2_PACKAGE_PYTHON_UNICODEDATA
-	depends on BR2_PACKAGE_PYTHON
 	bool "unicodedata module"
 	default y
 	help
 	  Unicode character database (used by stringprep module) (large).
+
+config BR2_PACKAGE_PYTHON_SQLITE
+	bool "sqlite module"
+	select BR2_PACKAGE_SQLITE
+	help
+	  SQLite database support
+
+config BR2_PACKAGE_PYTHON_ZLIB
+	bool "zlib module"
+	select BR2_PACKAGE_ZLIB
+	help
+	  zlib support in Python
+
+endmenu
+
+endif
diff --git a/package/python/python-2.7-001-cross-compile.patch b/package/python/python-2.7-001-cross-compile.patch
deleted file mode 100644
index 1ee97a8..0000000
--- a/package/python/python-2.7-001-cross-compile.patch
+++ /dev/null
@@ -1,114 +0,0 @@
-Add cross-compilation support in the python Makefile and setup.py since
-python has no such support.
-
-The main point here is to first build a python interpreter to run on the
-host, and then use it to compile the target python.
-
-We also remove some error-generating code that is irrelevant in our
-situation, such as checking if we can import a cross-compiled module.
-
-Patch ported to python2.7 by Maxime Ripard <ripard@archos.com>
-
-diff -rduNp Python-2.7.orig/Makefile.pre.in Python-2.7/Makefile.pre.in
---- Python-2.7.orig/Makefile.pre.in	2010-04-12 02:10:46.000000000 +0200
-+++ Python-2.7/Makefile.pre.in	2010-09-21 16:46:07.000000000 +0200
-@@ -404,8 +404,8 @@ platform: $(BUILDPYTHON)
- # Build the shared modules
- sharedmods: $(BUILDPYTHON)
- 	@case $$MAKEFLAGS in \
--	*s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \
--	*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \
-+	*s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' $(HOSTPYTHON) -E $(srcdir)/setup.py -q build;; \
-+	*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' $(HOSTPYTHON) -E $(srcdir)/setup.py build;; \
- 	esac
- 
- # Build static library
-@@ -538,7 +538,7 @@ Modules/python.o: $(srcdir)/Modules/pyth
- 
- $(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
- 		-@$(INSTALL) -d Include
--		-$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
-+		-$(HOSTPGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
- 
- $(PGEN):	$(PGENOBJS)
- 		$(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
-@@ -920,25 +920,25 @@ libinstall:	build_all $(srcdir)/Lib/$(PL
- 	done
- 	$(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
- 	PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
--		./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
-+		$(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
- 		-d $(LIBDEST) -f \
- 		-x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
- 		$(DESTDIR)$(LIBDEST)
- 	PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
--		./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
-+		$(HOSTPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
- 		-d $(LIBDEST) -f \
- 		-x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
- 		$(DESTDIR)$(LIBDEST)
- 	-PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
--		./$(BUILDPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
-+		$(HOSTPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
- 		-d $(LIBDEST)/site-packages -f \
- 		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
- 	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
--		./$(BUILDPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
-+		$(HOSTPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
- 		-d $(LIBDEST)/site-packages -f \
- 		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
- 	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
--		./$(BUILDPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"
-+		$(HOSTPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"
- 
- # Create the PLATDIR source directory, if one wasn't distributed..
- $(srcdir)/Lib/$(PLATDIR):
-@@ -1043,7 +1043,7 @@ libainstall:	all python-config
- # Install the dynamically loadable modules
- # This goes into $(exec_prefix)
- sharedinstall:
--	$(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \
-+	$(RUNSHARED) $(HOSTPYTHON) -E $(srcdir)/setup.py install \
- 	   	--prefix=$(prefix) \
- 		--install-scripts=$(BINDIR) \
- 		--install-platlib=$(DESTSHARED) \
-diff -rduNp Python-2.7.orig/setup.py Python-2.7/setup.py
---- Python-2.7.orig/setup.py	2010-06-27 14:36:16.000000000 +0200
-+++ Python-2.7/setup.py	2010-09-21 16:59:59.000000000 +0200
-@@ -310,9 +310,9 @@ class PyBuildExt(build_ext):
-         try:
-             imp.load_dynamic(ext.name, ext_filename)
-         except ImportError, why:
--            self.failed.append(ext.name)
--            self.announce('*** WARNING: renaming "%s" since importing it'
--                          ' failed: %s' % (ext.name, why), level=3)
-+            self.announce('*** WARNING: Importing "%s" failed, probably '
-+                          'because of cross-compilation' % ext.name, level=3)
-+            return
-             assert not self.inplace
-             basename, tail = os.path.splitext(ext_filename)
-             newname = basename + "_failed" + tail
-@@ -346,10 +346,6 @@ class PyBuildExt(build_ext):
-         return sys.platform
- 
-     def detect_modules(self):
--        # Ensure that /usr/local is always used
--        add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
--        add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
--
-         # Add paths specified in the environment variables LDFLAGS and
-         # CPPFLAGS for header and library files.
-         # We must get the values from the Makefile and not the environment
-@@ -384,12 +380,6 @@ class PyBuildExt(build_ext):
-                     for directory in reversed(options.dirs):
-                         add_dir_to_list(dir_list, directory)
- 
--        if os.path.normpath(sys.prefix) != '/usr':
--            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"))
--
-         try:
-             have_unicode = unicode
-         except NameError:
diff --git a/package/python/python-2.7-001-support-for-build.patch b/package/python/python-2.7-001-support-for-build.patch
new file mode 100644
index 0000000..2795e65
--- /dev/null
+++ b/package/python/python-2.7-001-support-for-build.patch
@@ -0,0 +1,153 @@
+Add support in Python build system to specify host tools
+
+Python needs a Python interpreter and a "pgen" program to build
+itself. Unfortunately, the Python build system assumes that it can use
+the interpreter and pgen program it has just built to build
+itself. Obviously, this cannot work in cross-compilation mode since
+the interpreter and the pgen program have been built for the target.
+
+Therefore, this patch adds support in the Python build system for the
+new PYTHON_FOR_BUILD and PGEN_FOR_BUILD variables, so that we can
+point Python ./configure script to the Python interpreter and 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.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ Makefile.pre.in |   32 +++++++++++++++++---------------
+ configure.in    |   17 +++++++++++++++++
+ 2 files changed, 34 insertions(+), 15 deletions(-)
+
+Index: Python-2.7.1/Makefile.pre.in
+===================================================================
+--- Python-2.7.1.orig/Makefile.pre.in
++++ Python-2.7.1/Makefile.pre.in
+@@ -178,7 +178,8 @@
+ UNICODE_OBJS=   @UNICODE_OBJS@
+ 
+ PYTHON=		python$(EXE)
+-BUILDPYTHON=	python$(BUILDEXE)
++BUILDPYTHON=	./python$(BUILDEXE)
++PYTHON_FOR_BUILD=@PYTHON_FOR_BUILD@
+ 
+ # The task to run while instrument when building the profile-opt target
+ PROFILE_TASK=	$(srcdir)/Tools/pybench/pybench.py -n 2 --with-gc --with-syscheck
+@@ -210,7 +211,8 @@
+ 
+ ##########################################################################
+ # Parser
+-PGEN=		Parser/pgen$(EXE)
++BUILDPGEN=	Parser/pgen$(EXE)
++PGEN_FOR_BUILD=@PGEN_FOR_BUILD@
+ 
+ POBJS=		\
+ 		Parser/acceler.o \
+@@ -404,8 +406,8 @@
+ # Build the shared modules
+ sharedmods: $(BUILDPYTHON)
+ 	@case $$MAKEFLAGS in \
+-	*s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \
+-	*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \
++	*s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py -q build;; \
++	*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py build;; \
+ 	esac
+ 
+ # Build static library
+@@ -536,12 +538,12 @@
+ 	$(MAINCC) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/python.c
+ 
+ 
+-$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
++$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN_FOR_BUILD) $(GRAMMAR_INPUT)
+ 		-@$(INSTALL) -d Include
+-		-$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
++		-$(PGEN_FOR_BUILD) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
+ 
+-$(PGEN):	$(PGENOBJS)
+-		$(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
++$(BUILDPGEN):	$(PGENOBJS)
++		$(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(BUILDPGEN)
+ 
+ Parser/grammar.o:	$(srcdir)/Parser/grammar.c \
+ 				$(srcdir)/Include/token.h \
+@@ -921,25 +923,25 @@
+ 	done
+ 	$(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
+ 	PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
+-		./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
++		$(PYTHON_FOR_BUILD) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
+ 		-d $(LIBDEST) -f \
+ 		-x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+ 		$(DESTDIR)$(LIBDEST)
+ 	PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+-		./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
++		$(PYTHON_FOR_BUILD) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
+ 		-d $(LIBDEST) -f \
+ 		-x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+ 		$(DESTDIR)$(LIBDEST)
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
+-		./$(BUILDPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
++		$(PYTHON_FOR_BUILD) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
+ 		-d $(LIBDEST)/site-packages -f \
+ 		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+-		./$(BUILDPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
++		$(PYTHON_FOR_BUILD) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
+ 		-d $(LIBDEST)/site-packages -f \
+ 		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+-		./$(BUILDPYTHON) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"
++		$(PYTHON_FOR_BUILD) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"
+ 
+ # Create the PLATDIR source directory, if one wasn't distributed..
+ $(srcdir)/Lib/$(PLATDIR):
+@@ -1044,7 +1046,7 @@
+ # Install the dynamically loadable modules
+ # This goes into $(exec_prefix)
+ sharedinstall: sharedmods
+-	$(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \
++	$(RUNSHARED) $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py install \
+ 	   	--prefix=$(prefix) \
+ 		--install-scripts=$(BINDIR) \
+ 		--install-platlib=$(DESTSHARED) \
+@@ -1183,7 +1185,7 @@
+ 	find . -name '*.gc??' -exec rm -f {} ';'
+ 
+ clobber: clean profile-removal
+-	-rm -f $(BUILDPYTHON) $(PGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \
++	-rm -f $(BUILDPYTHON) $(BUILDPGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \
+ 		tags TAGS \
+ 		config.cache config.log pyconfig.h Modules/config.c
+ 	-rm -rf build platform
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -4291,6 +4291,23 @@
+ done
+ AC_MSG_RESULT(done)
+ 
++if test "$cross_compiling" = "yes"; then
++   AC_MSG_CHECKING(python for build)
++   PYTHON_FOR_BUILD="${PYTHON_FOR_BUILD}"
++   AC_MSG_RESULT($PYTHON_FOR_BUILD)
++   AC_MSG_CHECKING(pgen for build)
++   PGEN_FOR_BUILD="${PGEN_FOR_BUILD}"
++   AC_MSG_RESULT($PGEN_FOR_BUILD)
++else
++   PYTHON_FOR_BUILD='$(BUILDPYTHON)'
++   PGEN_FOR_BUILD='$(BUILDPGEN)'
++fi
++
++AC_SUBST(PYTHON_FOR_BUILD)
++AC_SUBST(PGEN_FOR_BUILD)
++AC_ARG_VAR(PYTHON_FOR_BUILD,[build system Python])
++AC_ARG_VAR(PGEN_FOR_BUILD,[build system Python pgen])
++
+ # generate output files
+ AC_CONFIG_FILES(Makefile.pre Modules/Setup.config Misc/python.pc)
+ AC_CONFIG_FILES([Modules/ld_so_aix], [chmod +x Modules/ld_so_aix])
diff --git a/package/python/python-2.7-002-cross-compile-variable.patch b/package/python/python-2.7-002-cross-compile-variable.patch
new file mode 100644
index 0000000..04b71b0
--- /dev/null
+++ b/package/python/python-2.7-002-cross-compile-variable.patch
@@ -0,0 +1,55 @@
+Pass a CROSS_COMPILING variable to setup.py
+
+The setup.py script in the Python source code plays a significant role
+in the Python build process. It is responsible for building all the
+modules and extensions, and due to this, does various checks that need
+to be adjusted when we are cross-compiling.
+
+For that reason, this patch makes sure that a CROSS_COMPILING variable
+is passed in the environment of the setup.py script. Later patches in
+the stack make use of this variable.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ Makefile.pre.in |    6 +++---
+ configure.in    |    3 +++
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+Index: Python-2.7.1/Makefile.pre.in
+===================================================================
+--- Python-2.7.1.orig/Makefile.pre.in
++++ Python-2.7.1/Makefile.pre.in
+@@ -406,8 +406,8 @@
+ # Build the shared modules
+ sharedmods: $(BUILDPYTHON)
+ 	@case $$MAKEFLAGS in \
+-	*s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py -q build;; \
+-	*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py build;; \
++	*s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' CROSS_COMPILING=@CROSS_COMPILING@ $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py -q build;; \
++	*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' CROSS_COMPILING=@CROSS_COMPILING@ $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py build;; \
+ 	esac
+ 
+ # Build static library
+@@ -1046,7 +1046,7 @@
+ # Install the dynamically loadable modules
+ # This goes into $(exec_prefix)
+ sharedinstall: sharedmods
+-	$(RUNSHARED) $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py install \
++	$(RUNSHARED) CROSS_COMPILING=@CROSS_COMPILING@ $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py install \
+ 	   	--prefix=$(prefix) \
+ 		--install-scripts=$(BINDIR) \
+ 		--install-platlib=$(DESTSHARED) \
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -4308,6 +4308,9 @@
+ AC_ARG_VAR(PYTHON_FOR_BUILD,[build system Python])
+ AC_ARG_VAR(PGEN_FOR_BUILD,[build system Python pgen])
+ 
++CROSS_COMPILING=$cross_compiling
++AC_SUBST(CROSS_COMPILING)
++
+ # generate output files
+ AC_CONFIG_FILES(Makefile.pre Modules/Setup.config Misc/python.pc)
+ AC_CONFIG_FILES([Modules/ld_so_aix], [chmod +x Modules/ld_so_aix])
diff --git a/package/python/python-2.7-002-cross-compile.patch b/package/python/python-2.7-002-cross-compile.patch
deleted file mode 100644
index 598e5f5..0000000
--- a/package/python/python-2.7-002-cross-compile.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-Second patch to bring cross-compilation support to python build-system.
-
-Allow the libraries detection routine to look for headers and libs in
-other directories than /usr/include or /usr/lib through the env variables
-PYTHON_MODULES_INCLUDE and PYTHON_MODULES_LIB.
-
-We can then use it to look for libraries in the buildroot staging directory.
-
-
-Patch ported to python2.7 by Maxime Ripard <ripard@archos.com>
-
-diff -rduNp Python-2.7.orig/setup.py Python-2.7/setup.py
---- Python-2.7.orig/setup.py	2010-09-21 17:15:31.000000000 +0200
-+++ Python-2.7/setup.py	2010-09-21 17:20:46.000000000 +0200
-@@ -346,6 +346,18 @@ class PyBuildExt(build_ext):
-         return sys.platform
- 
-     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_include_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)
-         # Add paths specified in the environment variables LDFLAGS and
-         # CPPFLAGS for header and library files.
-         # We must get the values from the Makefile and not the environment
-@@ -388,11 +400,8 @@ class PyBuildExt(build_ext):
-         # 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.
--        lib_dirs = self.compiler.library_dirs + [
--            '/lib64', '/usr/lib64',
--            '/lib', '/usr/lib',
--            ]
--        inc_dirs = self.compiler.include_dirs + ['/usr/include']
-+        lib_dirs = self.compiler.library_dirs
-+        inc_dirs = self.compiler.include_dirs
-         exts = []
-         missing = []
- 
diff --git a/package/python/python-2.7-003-no-import-when-cross-compiling.patch b/package/python/python-2.7-003-no-import-when-cross-compiling.patch
new file mode 100644
index 0000000..162ba50
--- /dev/null
+++ b/package/python/python-2.7-003-no-import-when-cross-compiling.patch
@@ -0,0 +1,26 @@
+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>
+---
+ setup.py |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+Index: Python-2.7.1/setup.py
+===================================================================
+--- Python-2.7.1.orig/setup.py
++++ Python-2.7.1/setup.py
+@@ -304,6 +304,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/python/python-2.7-004-no-host-headers-libs.patch b/package/python/python-2.7-004-no-host-headers-libs.patch
new file mode 100644
index 0000000..033776d
--- /dev/null
+++ b/package/python/python-2.7-004-no-host-headers-libs.patch
@@ -0,0 +1,97 @@
+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.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ setup.py |   39 +++++++++++++++++++++------------------
+ 1 file changed, 21 insertions(+), 18 deletions(-)
+
+Index: Python-2.7.1/setup.py
+===================================================================
+--- Python-2.7.1.orig/setup.py
++++ Python-2.7.1/setup.py
+@@ -351,8 +351,9 @@
+ 
+     def detect_modules(self):
+         # Ensure that /usr/local is always used
+-        add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
+-        add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
++        if os.environ.get('CROSS_COMPILING') != 'yes':
++            add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
++            add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
+ 
+         # Add paths specified in the environment variables LDFLAGS and
+         # CPPFLAGS for header and library files.
+@@ -388,17 +389,6 @@
+                     for directory in reversed(options.dirs):
+                         add_dir_to_list(dir_list, directory)
+ 
+-        if os.path.normpath(sys.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"))
+-
+         try:
+             have_unicode = unicode
+         except NameError:
+@@ -407,11 +397,16 @@
+         # 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.
+-        lib_dirs = self.compiler.library_dirs + [
+-            '/lib64', '/usr/lib64',
+-            '/lib', '/usr/lib',
+-            ]
+-        inc_dirs = self.compiler.include_dirs + ['/usr/include']
++        lib_dirs = self.compiler.library_dirs
++        inc_dirs = self.compiler.include_dirs
++
++        if os.environ.get('CROSS_COMPILING') != 'yes':
++            lib_dirs += [
++                '/lib64', '/usr/lib64',
++                '/lib', '/usr/lib',
++                ]
++            inc_dirs += ['/usr/include']
++
+         exts = []
+         missing = []
+ 
+@@ -844,6 +839,9 @@
+             db_inc_paths.append('/pkg/db-3.%d/include' % x)
+             db_inc_paths.append('/opt/db-3.%d/include' % x)
+ 
++        if os.environ.get('CROSS_COMPILING') == 'yes':
++            db_inc_paths = []
++
+         # Add some common subdirectories for Sleepycat DB to the list,
+         # based on the standard include directories. This way DB3/4 gets
+         # picked up when it is installed in a non-standard prefix and
+@@ -996,6 +994,9 @@
+         MIN_SQLITE_VERSION = ".".join([str(x)
+                                     for x in MIN_SQLITE_VERSION_NUMBER])
+ 
++        if os.environ.get('CROSS_COMPILING') == 'yes':
++            sqlite_inc_paths = []
++
+         # Scan the default include directories before the SQLite specific
+         # ones. This allows one to override the copy of sqlite on OSX,
+         # where /usr/include contains an old version of sqlite.
+@@ -1095,6 +1096,8 @@
+         # the more recent berkeleydb's db.h file first in the include path
+         # when attempting to compile and it will fail.
+         f = "/usr/include/db.h"
++        if os.environ.get('CROSS_COMPILING') == 'yes':
++            f = ''
+ 
+         if sys.platform == 'darwin':
+             if is_macosx_sdk_path(f):
diff --git a/package/python/python-2.7-005-staging-headers-libs.patch b/package/python/python-2.7-005-staging-headers-libs.patch
new file mode 100644
index 0000000..ab3d88e
--- /dev/null
+++ b/package/python/python-2.7-005-staging-headers-libs.patch
@@ -0,0 +1,38 @@
+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.
+
+Patch ported to python2.7 by Maxime Ripard <ripard@archos.com>
+---
+ setup.py |   13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+Index: Python-2.7.1/setup.py
+===================================================================
+--- Python-2.7.1.orig/setup.py
++++ Python-2.7.1/setup.py
+@@ -350,6 +350,19 @@
+         return sys.platform
+ 
+     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_include_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
+         if os.environ.get('CROSS_COMPILING') != 'yes':
+             add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
diff --git a/package/python/python-2.7-006-disable-extensions.patch b/package/python/python-2.7-006-disable-extensions.patch
new file mode 100644
index 0000000..642ebc5
--- /dev/null
+++ b/package/python/python-2.7-006-disable-extensions.patch
@@ -0,0 +1,102 @@
+Add infrastructure to disable the build of certain extensions
+
+Some of the extensions part of the Python core have dependencies on
+external libraries (sqlite, tk, etc.) or are relatively big and not
+necessarly always useful (CJK codecs for example). By extensions, we
+mean part of Python modules that are written in C and therefore
+compiled to binary code.
+
+Therefore, we introduce a small infrastructure that allows to disable
+some of those extensions. This can be done inside the configure.in by
+adding values to the DISABLED_EXTENSIONS variable (which is a
+word-separated list of extensions).
+
+The implementation works as follow :
+
+ * configure.in defines a DISABLED_EXTENSIONS variable, which is
+   substituted (so that when Makefile.pre is generated from
+   Makefile.pre.in, the value of the variable is substituted). For
+   now, this DISABLED_EXTENSIONS variable is empty, later patches will
+   use it.
+
+ * Makefile.pre.in passes the DISABLED_EXTENSIONS value down to the
+   variables passed in the environment when calling the setup.py
+   script that actually builds and installs those extensions.
+
+ * setup.py is modified so that the existing "disabled_module_list" is
+   filled with those pre-disabled extensions listed in
+   DISABLED_EXTENSIONS.
+
+Patch ported to python2.7 by Maxime Ripard <ripard@archos.com>, and
+then extended by Thomas Petazzoni
+<thomas.petazzoni@free-electrons.com>.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ Makefile.pre.in |    8 +++++---
+ configure.in    |    2 ++
+ setup.py        |    5 ++++-
+ 3 files changed, 11 insertions(+), 4 deletions(-)
+
+Index: Python-2.7.1/Makefile.pre.in
+===================================================================
+--- Python-2.7.1.orig/Makefile.pre.in
++++ Python-2.7.1/Makefile.pre.in
+@@ -141,6 +141,8 @@
+ # configure script arguments
+ CONFIG_ARGS=	@CONFIG_ARGS@
+ 
++# disabled extensions
++DISABLED_EXTENSIONS=	@DISABLED_EXTENSIONS@
+ 
+ # Subdirectories with code
+ SRCDIRS= 	@SRCDIRS@
+@@ -406,8 +408,8 @@
+ # Build the shared modules
+ sharedmods: $(BUILDPYTHON)
+ 	@case $$MAKEFLAGS in \
+-	*s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' CROSS_COMPILING=@CROSS_COMPILING@ $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py -q build;; \
+-	*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' CROSS_COMPILING=@CROSS_COMPILING@ $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py build;; \
++	*s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' CROSS_COMPILING=@CROSS_COMPILING@ DISABLED_EXTENSIONS="$(DISABLED_EXTENSIONS)" $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py -q build;; \
++	*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' CROSS_COMPILING=@CROSS_COMPILING@ DISABLED_EXTENSIONS="$(DISABLED_EXTENSIONS)" $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py build;; \
+ 	esac
+ 
+ # Build static library
+@@ -1046,7 +1048,7 @@
+ # Install the dynamically loadable modules
+ # This goes into $(exec_prefix)
+ sharedinstall: sharedmods
+-	$(RUNSHARED) CROSS_COMPILING=@CROSS_COMPILING@ $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py install \
++	$(RUNSHARED) CROSS_COMPILING=@CROSS_COMPILING@ DISABLED_EXTENSIONS="$(DISABLED_EXTENSIONS)" $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py install \
+ 	   	--prefix=$(prefix) \
+ 		--install-scripts=$(BINDIR) \
+ 		--install-platlib=$(DESTSHARED) \
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -2084,6 +2084,8 @@
+ 
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+ 
++AC_SUBST(DISABLED_EXTENSIONS)
++
+ # Check for use of the system expat library
+ AC_MSG_CHECKING(for --with-system-expat)
+ AC_ARG_WITH(system_expat,
+Index: Python-2.7.1/setup.py
+===================================================================
+--- Python-2.7.1.orig/setup.py
++++ Python-2.7.1/setup.py
+@@ -21,7 +21,10 @@
+ COMPILED_WITH_PYDEBUG = hasattr(sys, 'gettotalrefcount')
+ 
+ # This global variable is used to hold the list of modules to be disabled.
+-disabled_module_list = []
++try:
++    disabled_module_list = sysconfig.get_config_var("DISABLED_EXTENSIONS").split(" ")
++except KeyError:
++    disabled_module_list = list()
+ 
+ def add_dir_to_list(dirlist, dir):
+     """Add the directory 'dir' to the list 'dirlist' (at the front) if
diff --git a/package/python/python-2.7-007-do-not-generate-pyo-files.patch b/package/python/python-2.7-007-do-not-generate-pyo-files.patch
new file mode 100644
index 0000000..2cb90cc
--- /dev/null
+++ b/package/python/python-2.7-007-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-2.7.1/Makefile.pre.in
+===================================================================
+--- Python-2.7.1.orig/Makefile.pre.in
++++ Python-2.7.1/Makefile.pre.in
+@@ -929,20 +929,11 @@
+ 		-d $(LIBDEST) -f \
+ 		-x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+ 		$(DESTDIR)$(LIBDEST)
+-	PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+-		$(PYTHON_FOR_BUILD) -Wi -tt -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 -t $(DESTDIR)$(LIBDEST)/compileall.py \
+ 		-d $(LIBDEST)/site-packages -f \
+ 		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+-		$(PYTHON_FOR_BUILD) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
+-		-d $(LIBDEST)/site-packages -f \
+-		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+-	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+ 		$(PYTHON_FOR_BUILD) -Wi -t -c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"
+ 
+ # Create the PLATDIR source directory, if one wasn't distributed..
diff --git a/package/python/python-2.7-008-reread-environment.patch b/package/python/python-2.7-008-reread-environment.patch
new file mode 100644
index 0000000..e36d0cf
--- /dev/null
+++ b/package/python/python-2.7-008-reread-environment.patch
@@ -0,0 +1,65 @@
+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 |    6 +++---
+ setup.py        |    3 +++
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+Index: Python-2.7.1/Makefile.pre.in
+===================================================================
+--- Python-2.7.1.orig/Makefile.pre.in
++++ Python-2.7.1/Makefile.pre.in
+@@ -408,8 +408,8 @@
+ # Build the shared modules
+ sharedmods: $(BUILDPYTHON)
+ 	@case $$MAKEFLAGS in \
+-	*s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' CROSS_COMPILING=@CROSS_COMPILING@ DISABLED_EXTENSIONS="$(DISABLED_EXTENSIONS)" $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py -q build;; \
+-	*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' CROSS_COMPILING=@CROSS_COMPILING@ DISABLED_EXTENSIONS="$(DISABLED_EXTENSIONS)" $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py build;; \
++	*s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' CROSS_COMPILING=@CROSS_COMPILING@ DISABLED_EXTENSIONS="$(DISABLED_EXTENSIONS)" CONFIG_ARGS="$(CONFIG_ARGS)" $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py -q build;; \
++	*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' CROSS_COMPILING=@CROSS_COMPILING@ DISABLED_EXTENSIONS="$(DISABLED_EXTENSIONS)" CONFIG_ARGS="$(CONFIG_ARGS)" $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py build;; \
+ 	esac
+ 
+ # Build static library
+@@ -1039,7 +1039,7 @@
+ # Install the dynamically loadable modules
+ # This goes into $(exec_prefix)
+ sharedinstall: sharedmods
+-	$(RUNSHARED) CROSS_COMPILING=@CROSS_COMPILING@ DISABLED_EXTENSIONS="$(DISABLED_EXTENSIONS)" $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py install \
++	$(RUNSHARED) CROSS_COMPILING=@CROSS_COMPILING@ DISABLED_EXTENSIONS="$(DISABLED_EXTENSIONS)" CONFIG_ARGS="$(CONFIG_ARGS)" $(PYTHON_FOR_BUILD) -E $(srcdir)/setup.py install \
+ 	   	--prefix=$(prefix) \
+ 		--install-scripts=$(BINDIR) \
+ 		--install-platlib=$(DESTSHARED) \
+Index: Python-2.7.1/setup.py
+===================================================================
+--- Python-2.7.1.orig/setup.py
++++ Python-2.7.1/setup.py
+@@ -20,6 +20,9 @@
+ # Were we compiled --with-pydebug or with #define Py_DEBUG?
+ COMPILED_WITH_PYDEBUG = hasattr(sys, 'gettotalrefcount')
+ 
++sysconfig.get_config_vars()
++sysconfig._CONFIG_VARS.update(os.environ)
++
+ # This global variable is used to hold the list of modules to be disabled.
+ try:
+     disabled_module_list = sysconfig.get_config_var("DISABLED_EXTENSIONS").split(" ")
diff --git a/package/python/python-2.7-009-python-symlink.patch b/package/python/python-2.7-009-python-symlink.patch
new file mode 100644
index 0000000..f284dba
--- /dev/null
+++ b/package/python/python-2.7-009-python-symlink.patch
@@ -0,0 +1,25 @@
+Use a symlink between python and pythonVERSION
+
+By default, a hard link is used between /usr/bin/python and
+/usr/bin/pythonVERSION. Using hard links for such things is fairly
+uncommon, so let's make a symbolic link instead.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ Makefile.pre.in |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: Python-2.7.1/Makefile.pre.in
+===================================================================
+--- Python-2.7.1.orig/Makefile.pre.in
++++ Python-2.7.1/Makefile.pre.in
+@@ -791,7 +791,7 @@
+ 	then rm -f $(DESTDIR)$(BINDIR)/$(PYTHON); \
+ 	else true; \
+ 	fi
+-	(cd $(DESTDIR)$(BINDIR); $(LN) python$(VERSION)$(EXE) $(PYTHON))
++	(cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)$(EXE) $(PYTHON))
+ 	-rm -f $(DESTDIR)$(BINDIR)/python-config
+ 	(cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-config python-config)
+ 	-test -d $(DESTDIR)$(LIBPC) || $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$(LIBPC)
diff --git a/package/python/python-2.7-010-change-pyconfig-h-location.patch b/package/python/python-2.7-010-change-pyconfig-h-location.patch
new file mode 100644
index 0000000..fddc6c8
--- /dev/null
+++ b/package/python/python-2.7-010-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/python2.7/config, which is fine
+since this location is kept on the target.
+
+However, by default, the pyconfig.h is installed in
+usr/include/python2.7, 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/python2.7/config, 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/python2.7, 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-2.7.1/Lib/distutils/sysconfig.py
+===================================================================
+--- Python-2.7.1.orig/Lib/distutils/sysconfig.py
++++ Python-2.7.1/Lib/distutils/sysconfig.py
+@@ -193,7 +193,8 @@
+         else:
+             inc_dir = 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-2.7.1/Lib/sysconfig.py
+===================================================================
+--- Python-2.7.1.orig/Lib/sysconfig.py
++++ Python-2.7.1/Lib/sysconfig.py
+@@ -371,7 +371,7 @@
+         else:
+             inc_dir = _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')
+ 
+ def get_scheme_names():
+Index: Python-2.7.1/Makefile.pre.in
+===================================================================
+--- Python-2.7.1.orig/Makefile.pre.in
++++ Python-2.7.1/Makefile.pre.in
+@@ -967,7 +967,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)
+@@ -1001,6 +1000,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/python/python-2.7-010-disable_modules_and_ssl.patch b/package/python/python-2.7-010-disable_modules_and_ssl.patch
deleted file mode 100644
index 492e372..0000000
--- a/package/python/python-2.7-010-disable_modules_and_ssl.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-Support some customisation on python compilation.
-
-With this patch, we can now remove some modules introducing external
-dependencies from the compilation, thus removing these irrelevant in most
-cases dependencies (ie. openssl, ncurses, etc).
-
-This modules can be removed by listing them in the PYTHON_DISABLE_MODULES
-environment variable.
-
-Patch ported to python2.7 by Maxime Ripard <ripard@archos.com>
-
-diff -rduNp Python-2.7.orig/setup.py Python-2.7/setup.py
---- Python-2.7.orig/setup.py	2010-09-21 17:31:52.000000000 +0200
-+++ Python-2.7/setup.py	2010-09-21 17:35:20.000000000 +0200
-@@ -21,7 +21,15 @@ from distutils.spawn import find_executa
- COMPILED_WITH_PYDEBUG = hasattr(sys, 'gettotalrefcount')
- 
- # This global variable is used to hold the list of modules to be disabled.
--disabled_module_list = []
-+try:
-+    disabled_module_list = os.environ["PYTHON_DISABLE_MODULES"].split()
-+except KeyError:
-+    disabled_module_list = list()
-+
-+try:
-+    disable_ssl = os.environ["PYTHON_DISABLE_SSL"]
-+except KeyError:
-+    disable_ssl = 0
- 
- def add_dir_to_list(dirlist, dir):
-     """Add the directory 'dir' to the list 'dirlist' (at the front) if
-@@ -346,6 +354,7 @@ class PyBuildExt(build_ext):
-         return sys.platform
- 
-     def detect_modules(self):
-+        global disable_ssl
-         try:
-             modules_include_dirs = os.environ["PYTHON_MODULES_INCLUDE"].split()
-         except KeyError:
-@@ -685,7 +694,8 @@ class PyBuildExt(build_ext):
-                                      ] )
- 
-         if (ssl_incs is not None and
--            ssl_libs is not None):
-+            ssl_libs is not None and
-+            not disable_ssl):
-             exts.append( Extension('_ssl', ['_ssl.c'],
-                                    include_dirs = ssl_incs,
-                                    library_dirs = ssl_libs,
diff --git a/package/python/python-2.7-011-no-rpath.patch b/package/python/python-2.7-011-no-rpath.patch
new file mode 100644
index 0000000..700c4be
--- /dev/null
+++ b/package/python/python-2.7-011-no-rpath.patch
@@ -0,0 +1,75 @@
+Remove runtime library paths
+
+For some extensions (bsddb, 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 |   21 ++++++++++++++++++---
+ 1 file changed, 18 insertions(+), 3 deletions(-)
+
+Index: Python-2.7.1/setup.py
+===================================================================
+--- Python-2.7.1.orig/setup.py
++++ Python-2.7.1/setup.py
+@@ -977,6 +977,12 @@
+                 print "bsddb lib dir:", dblib_dir, " inc dir:", db_incdir
+             db_incs = [db_incdir]
+             dblibs = [dblib]
++
++            if os.environ.get('CROSS_COMPILING') == 'yes':
++                bsddb_runtime_library_dir = None
++            else:
++                bsddb_runtime_library_dir = dblib_dir
++
+             # We add the runtime_library_dirs argument because the
+             # BerkeleyDB lib we're linking against often isn't in the
+             # system dynamic library search path.  This is usually
+@@ -986,7 +992,7 @@
+             exts.append(Extension('_bsddb', ['_bsddb.c'],
+                                   depends = ['bsddb.h'],
+                                   library_dirs=dblib_dir,
+-                                  runtime_library_dirs=dblib_dir,
++                                  runtime_library_dirs=bsddb_runtime_library_dir,
+                                   include_dirs=db_incs,
+                                   libraries=dblibs))
+         else:
+@@ -1092,12 +1098,17 @@
+             else:
+                 sqlite_extra_link_args = ()
+ 
++            if os.environ.get('CROSS_COMPILING') == 'yes':
++                sqlite_runtime_library_dirs = None
++            else:
++                sqlite_runtime_library_dirs = sqlite_libdir
++
+             exts.append(Extension('_sqlite3', sqlite_srcs,
+                                   define_macros=sqlite_defines,
+                                   include_dirs=["Modules/_sqlite",
+                                                 sqlite_incdir],
+                                   library_dirs=sqlite_libdir,
+-                                  runtime_library_dirs=sqlite_libdir,
++                                  runtime_library_dirs=sqlite_runtime_library_dirs,
+                                   extra_link_args=sqlite_extra_link_args,
+                                   libraries=["sqlite3",]))
+         else:
+@@ -1198,9 +1209,13 @@
+                 elif cand == "bdb":
+                     if db_incs is not None:
+                         print "building dbm using bdb"
++                        if os.environ.get('CROSS_COMPILING') == 'yes':
++                            db_runtime_library_dir = None
++                        else:
++                            db_runtime_library_dir = dblib_dir
+                         dbmext = Extension('dbm', ['dbmmodule.c'],
+                                            library_dirs=dblib_dir,
+-                                           runtime_library_dirs=dblib_dir,
++                                           runtime_library_dirs=db_runtime_library_dir,
+                                            include_dirs=db_incs,
+                                            define_macros=[
+                                                ('HAVE_BERKDB_H', None),
diff --git a/package/python/python-2.7-012-correct-32bit-64bit-check.patch b/package/python/python-2.7-012-correct-32bit-64bit-check.patch
new file mode 100644
index 0000000..88006f0
--- /dev/null
+++ b/package/python/python-2.7-012-correct-32bit-64bit-check.patch
@@ -0,0 +1,55 @@
+Use correct mechanism to determine 32/64 bits
+
+Python setup.py builds certain extensions (dl and imageop) only on 32
+bits architecture. However, to test whether the architecture is 32
+bits or not, it was looking at the sys.maxint value of the host Python
+interpreter... which might run on a 64 bits architecture even though
+the target is 32 bits, or which might run on a 32 bits architecture
+even though the target is 64 bits.
+
+Therefore, we introduce a is_arch_64_bits() function, which looks at
+the pyconfig.h file generated by ./configure for the value of
+SIZEOF_LONG to determine if the architecture is 32 or 64 bits.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ setup.py |   12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+Index: Python-2.7.1/setup.py
+===================================================================
+--- Python-2.7.1.orig/setup.py
++++ Python-2.7.1/setup.py
+@@ -29,6 +29,14 @@
+ except KeyError:
+     disabled_module_list = list()
+ 
++def is_arch_64_bits():
++    data = open('pyconfig.h').read()
++    m = re.search(r"#s*define\s+SIZEOF_LONG\s+4\s*", data)
++    if m is None:
++        return True
++    else:
++        return False
++
+ def add_dir_to_list(dirlist, dir):
+     """Add the directory 'dir' to the list 'dirlist' (at the front) if
+     1) 'dir' is not already in 'dirlist'
+@@ -608,7 +616,7 @@
+         exts.append( Extension('audioop', ['audioop.c']) )
+ 
+         # Disabled on 64-bit platforms
+-        if sys.maxint != 9223372036854775807L:
++        if not is_arch_64_bits():
+             # Operations on images
+             exts.append( Extension('imageop', ['imageop.c']) )
+         else:
+@@ -1424,7 +1432,7 @@
+                 missing.append('_codecs_%s' % loc)
+ 
+         # Dynamic loading module
+-        if sys.maxint == 0x7fffffff:
++        if not is_arch_64_bits():
+             # This requires sizeof(int) == sizeof(long) == sizeof(char*)
+             dl_inc = find_file('dlfcn.h', [], inc_dirs)
+             if (dl_inc is not None) and (platform not in ['atheos']):
diff --git a/package/python/python-2.7-020-gentoo_py_dontcompile.patch b/package/python/python-2.7-020-gentoo_py_dontcompile.patch
deleted file mode 100644
index 276f0e6..0000000
--- a/package/python/python-2.7-020-gentoo_py_dontcompile.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-This patch purpose is to allow not to save the generated python bytecode in
-a file for later use through the PYTHON_DONTCOMPILE environment variable.
-
-I do not see the use of it, because you can choose if you want but it seems
-somewhat related to gentoo.
-
-Maybe useful when the generated rootfs is mounted on read-only on the target.
-
-Patch ported to python2.7 by Maxime Ripard <ripard@archos.com>
-
-diff -rduNp Python-2.7.orig/Python/import.c Python-2.7/Python/import.c
---- Python-2.7.orig/Python/import.c	2010-09-30 12:05:53.000000000 +0200
-+++ Python-2.7/Python/import.c	2010-09-30 12:20:38.000000000 +0200
-@@ -886,7 +886,12 @@ write_compiled_module(PyCodeObject *co,
-     mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
- #endif
- 
--    fp = open_exclusive(cpathname, mode);
-+    char *py_dontcompile = getenv("PYTHON_DONTCOMPILE");
-+
-+    if (!py_dontcompile)
-+      fp = open_exclusive(cpathname, mode);
-+    else
-+      fp = NULL;
-     if (fp == NULL) {
-         if (Py_VerboseFlag)
-             PySys_WriteStderr(
diff --git a/package/python/python-2.7-030-fix-long-long-format.patch b/package/python/python-2.7-030-fix-long-long-format.patch
deleted file mode 100644
index 5b9dddd..0000000
--- a/package/python/python-2.7-030-fix-long-long-format.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Python's configure assume than when cross-compiling the target has no
-support for long long int. This assumption breaks compilation later in the
-process. Since gcc handles long long support, we can change the value to
-assume that there is such support.
-
-Patch by Maxime Ripard <ripard@archos.com>
-
-diff -rduNp Python-2.7.orig/configure Python-2.7/configure
---- Python-2.7.orig/configure	2010-09-30 12:05:54.000000000 +0200
-+++ Python-2.7/configure	2010-09-30 12:12:30.000000000 +0200
-@@ -13517,7 +13517,7 @@ $as_echo_n "checking for %lld and %llu p
-   $as_echo_n "(cached) " >&6
- else
-   if test "$cross_compiling" = yes; then :
--  ac_cv_have_long_long_format=no
-+  ac_cv_have_long_long_format=yes
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
diff --git a/package/python/python-2.7-040-bytecode-generation-fix.patch b/package/python/python-2.7-040-bytecode-generation-fix.patch
deleted file mode 100644
index 0984c48..0000000
--- a/package/python/python-2.7-040-bytecode-generation-fix.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-The compileall script is used to compile to python bytecode all the modules.
-However, it relies on the struct package that is not built for the host
-python, thus crashing at execution when compiling the target python.
-When compiling, the removed code block is never executed, so we can safely
-remove it, removing in the same time the dependency on struct.
-
-Patch by Maxime Ripard <ripard@archos.com>
-
-Index: Python-2.7/Lib/compileall.py
-===================================================================
---- Python-2.7.orig/Lib/compileall.py	(r??vision 84276)
-+++ Python-2.7/Lib/compileall.py	(copie de travail)
-@@ -14,7 +14,6 @@
- import os
- import sys
- import py_compile
--import struct
- import imp
- 
- __all__ = ["compile_dir","compile_file","compile_path"]
-@@ -83,17 +82,6 @@
-     if os.path.isfile(fullname):
-         head, tail = name[:-3], name[-3:]
-         if tail == '.py':
--            if not force:
--                try:
--                    mtime = int(os.stat(fullname).st_mtime)
--                    expect = struct.pack('<4sl', imp.get_magic(), mtime)
--                    cfile = fullname + (__debug__ and 'c' or 'o')
--                    with open(cfile, 'rb') as chandle:
--                        actual = chandle.read(8)
--                    if expect == actual:
--                        return success
--                except IOError:
--                    pass
-             if not quiet:
-                 print 'Compiling', fullname, '...'
-             try:
diff --git a/package/python/python-2.7-100-optional-test-modules.patch b/package/python/python-2.7-100-optional-test-modules.patch
new file mode 100644
index 0000000..b51ea57
--- /dev/null
+++ b/package/python/python-2.7-100-optional-test-modules.patch
@@ -0,0 +1,84 @@
+Add an option to disable installation of test modules
+
+The Python standard distribution comes with many test modules, that
+are not necessarly useful on embedded targets.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ Makefile.pre.in |   40 +++++++++++++++++++++++++++-------------
+ configure.in    |    6 ++++++
+ 2 files changed, 33 insertions(+), 13 deletions(-)
+
+Index: Python-2.7.1/Makefile.pre.in
+===================================================================
+--- Python-2.7.1.orig/Makefile.pre.in
++++ Python-2.7.1/Makefile.pre.in
+@@ -851,23 +851,37 @@
+ 	plat-mac/lib-scriptpackages/SystemEvents \
+ 	plat-mac/lib-scriptpackages/Terminal 
+ PLATMACPATH=:plat-mac:plat-mac/lib-scriptpackages
+-LIBSUBDIRS=	lib-tk lib-tk/test lib-tk/test/test_tkinter \
+-                lib-tk/test/test_ttk site-packages test test/data \
+-		test/decimaltestdata test/xmltestdata \
+-		test/tracedmodules \
++LIBSUBDIRS=	lib-tk \
++                site-packages \
+ 		encodings compiler hotshot \
+-		email email/mime email/test email/test/data \
+-		json json/tests \
+-		sqlite3 sqlite3/test \
+-		logging bsddb bsddb/test csv importlib wsgiref \
+-		lib2to3 lib2to3/fixes lib2to3/pgen2 lib2to3/tests \
+-		lib2to3/tests/data lib2to3/tests/data/fixers lib2to3/tests/data/fixers/myfixes \
+-		ctypes ctypes/test ctypes/macholib idlelib idlelib/Icons \
+-		distutils distutils/command distutils/tests $(XMLLIBSUBDIRS) \
++		email email/mime \
++		json \
++		sqlite3 \
++		logging bsddb csv importlib wsgiref \
++		lib2to3 lib2to3/fixes lib2to3/pgen2 \
++		ctypes ctypes/macholib idlelib idlelib/Icons \
++		distutils distutils/command $(XMLLIBSUBDIRS) \
+ 		multiprocessing multiprocessing/dummy \
+-		unittest unittest/test \
++		unittest \
+ 		lib-old \
+ 		curses pydoc_data $(MACHDEPS)
++
++ifeq (@TEST_MODULES@,yes)
++LIBSUBDIRS +=	lib-tk/test lib-tk/test/test_tkinter	\
++	      	lib-tk/test/test_ttk test test/data	\
++		test/decimaltestdata test/xmltestdata 	\
++		test/tracedmodules   			\
++		email/test email/test/data		\
++		sqlite3/test				\
++		bsddb/test				\
++		lib2to3/tests				\
++		lib2to3/tests/data			\
++		lib2to3/tests/data/fixers		\
++		lib2to3/tests/data/fixers/myfixes	\
++		ctypes/test distutils/tests		\
++		unittest/test
++endif
++
+ libinstall:	build_all $(srcdir)/Lib/$(PLATDIR)
+ 	@for i in $(SCRIPTDIR) $(LIBDEST); \
+ 	do \
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -2393,6 +2393,12 @@
+ fi
+ 
+ 
++AC_SUBST(TEST_MODULES)
++
++AC_ARG_ENABLE(test-modules,
++	AS_HELP_STRING([--disable-test-modules], [disable test modules]),
++	[ TEST_MODULES="${enableval}" ], [ TEST_MODULES=yes ])
++
+ # Check for enable-ipv6
+ AH_TEMPLATE(ENABLE_IPV6, [Define if --enable-ipv6 is specified])
+ AC_MSG_CHECKING([if --enable-ipv6 is specified])
diff --git a/package/python/python-2.7-101-optional-pydoc.patch b/package/python/python-2.7-101-optional-pydoc.patch
new file mode 100644
index 0000000..8d51dc9
--- /dev/null
+++ b/package/python/python-2.7-101-optional-pydoc.patch
@@ -0,0 +1,81 @@
+Add an option to disable pydoc
+
+It removes 0.5 MB of data from the target plus the pydoc script
+itself.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ Makefile.pre.in |    6 +++++-
+ configure.in    |    5 +++++
+ setup.py        |   10 +++++++---
+ 3 files changed, 17 insertions(+), 4 deletions(-)
+
+Index: Python-2.7.1/Makefile.pre.in
+===================================================================
+--- Python-2.7.1.orig/Makefile.pre.in
++++ Python-2.7.1/Makefile.pre.in
+@@ -864,7 +864,7 @@
+ 		multiprocessing multiprocessing/dummy \
+ 		unittest \
+ 		lib-old \
+-		curses pydoc_data $(MACHDEPS)
++		curses $(MACHDEPS)
+ 
+ ifeq (@TEST_MODULES@,yes)
+ LIBSUBDIRS +=	lib-tk/test lib-tk/test/test_tkinter	\
+@@ -882,6 +882,10 @@
+ 		unittest/test
+ endif
+ 
++ifeq (@PYDOC@,yes)
++LIBSUBDIRS += pydoc_data
++endif
++
+ libinstall:	build_all $(srcdir)/Lib/$(PLATDIR)
+ 	@for i in $(SCRIPTDIR) $(LIBDEST); \
+ 	do \
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -2392,6 +2392,11 @@
+         esac])
+ fi
+ 
++AC_SUBST(PYDOC)
++
++AC_ARG_ENABLE(pydoc,
++	AS_HELP_STRING([--disable-pydoc], [disable pydoc]),
++	[ PYDOC="${enableval}" ], [ PYDOC=yes ])
+ 
+ AC_SUBST(TEST_MODULES)
+ 
+Index: Python-2.7.1/setup.py
+===================================================================
+--- Python-2.7.1.orig/setup.py
++++ Python-2.7.1/setup.py
+@@ -2072,6 +2072,12 @@
+     # turn off warnings when deprecated modules are imported
+     import warnings
+     warnings.filterwarnings("ignore",category=DeprecationWarning)
++
++    scripts = ['Tools/scripts/idle', 'Tools/scripts/2to3',
++               'Lib/smtpd.py']
++    if not '--disable-pydoc' in sysconfig.get_config_var("CONFIG_ARGS"):
++        scripts += [ 'Tools/scripts/pydoc' ]
++
+     setup(# PyPI Metadata (PEP 301)
+           name = "Python",
+           version = sys.version.split()[0],
+@@ -2092,9 +2098,7 @@
+           ext_modules=[Extension('_struct', ['_struct.c'])],
+ 
+           # Scripts to install
+-          scripts = ['Tools/scripts/pydoc', 'Tools/scripts/idle',
+-                     'Tools/scripts/2to3',
+-                     'Lib/smtpd.py']
++          scripts = scripts,
+         )
+ 
+ # --install-platlib
diff --git a/package/python/python-2.7-102-optional-2to3.patch b/package/python/python-2.7-102-optional-2to3.patch
new file mode 100644
index 0000000..3550db1
--- /dev/null
+++ b/package/python/python-2.7-102-optional-2to3.patch
@@ -0,0 +1,99 @@
+Add an option to disable lib2to3
+
+lib2to3 is a library to convert Python 2.x code to Python 3.x. As
+such, it is probably not very useful on embedded system targets.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ Makefile.pre.in |   24 +++++++++++++++++-------
+ configure.in    |    6 ++++++
+ setup.py        |    5 +++--
+ 3 files changed, 26 insertions(+), 9 deletions(-)
+
+Index: Python-2.7.1/Makefile.pre.in
+===================================================================
+--- Python-2.7.1.orig/Makefile.pre.in
++++ Python-2.7.1/Makefile.pre.in
+@@ -856,9 +856,7 @@
+ 		encodings compiler hotshot \
+ 		email email/mime \
+ 		json \
+-		sqlite3 \
+ 		logging bsddb csv importlib wsgiref \
+-		lib2to3 lib2to3/fixes lib2to3/pgen2 \
+ 		ctypes ctypes/macholib idlelib idlelib/Icons \
+ 		distutils distutils/command $(XMLLIBSUBDIRS) \
+ 		multiprocessing multiprocessing/dummy \
+@@ -872,12 +870,7 @@
+ 		test/decimaltestdata test/xmltestdata 	\
+ 		test/tracedmodules   			\
+ 		email/test email/test/data		\
+-		sqlite3/test				\
+ 		bsddb/test				\
+-		lib2to3/tests				\
+-		lib2to3/tests/data			\
+-		lib2to3/tests/data/fixers		\
+-		lib2to3/tests/data/fixers/myfixes	\
+ 		ctypes/test distutils/tests		\
+ 		unittest/test
+ endif
+@@ -886,6 +879,23 @@
+ LIBSUBDIRS += pydoc_data
+ endif
+ 
++ifeq (@LIB2TO3@,yes)
++LIBSUBDIRS += lib2to3 lib2to3/fixes lib2to3/pgen2
++ifeq (@TEST_MODULES@,yes)
++LIBSUBDIRS += 	lib2to3/tests				\
++		lib2to3/tests/data			\
++		lib2to3/tests/data/fixers		\
++		lib2to3/tests/data/fixers/myfixes
++endif
++endif
++
++ifeq (@SQLITE3@,yes)
++LIBSUBDIRS += sqlite3
++ifeq (@TEST_MODULES@,yes)
++LIBSUBDIRS += sqlite3/test
++endif
++endif
++
+ libinstall:	build_all $(srcdir)/Lib/$(PLATDIR)
+ 	@for i in $(SCRIPTDIR) $(LIBDEST); \
+ 	do \
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -2404,6 +2404,12 @@
+ 	AS_HELP_STRING([--disable-test-modules], [disable test modules]),
+ 	[ TEST_MODULES="${enableval}" ], [ TEST_MODULES=yes ])
+ 
++AC_SUBST(LIB2TO3)
++
++AC_ARG_ENABLE(lib2to3,
++	AS_HELP_STRING([--disable-lib2to3], [disable lib2to3]),
++	[ LIB2TO3="${enableval}" ], [ LIB2TO3=yes ])
++
+ # Check for enable-ipv6
+ AH_TEMPLATE(ENABLE_IPV6, [Define if --enable-ipv6 is specified])
+ AC_MSG_CHECKING([if --enable-ipv6 is specified])
+Index: Python-2.7.1/setup.py
+===================================================================
+--- Python-2.7.1.orig/setup.py
++++ Python-2.7.1/setup.py
+@@ -2073,10 +2073,11 @@
+     import warnings
+     warnings.filterwarnings("ignore",category=DeprecationWarning)
+ 
+-    scripts = ['Tools/scripts/idle', 'Tools/scripts/2to3',
+-               'Lib/smtpd.py']
++    scripts = ['Tools/scripts/idle', 'Lib/smtpd.py']
+     if not '--disable-pydoc' in sysconfig.get_config_var("CONFIG_ARGS"):
+         scripts += [ 'Tools/scripts/pydoc' ]
++    if not '--disable-lib2to3' in sysconfig.get_config_var("CONFIG_ARGS"):
++        scripts += [ 'Tools/scripts/2to3' ]
+ 
+     setup(# PyPI Metadata (PEP 301)
+           name = "Python",
diff --git a/package/python/python-2.7-103-optional-sqlite.patch b/package/python/python-2.7-103-optional-sqlite.patch
new file mode 100644
index 0000000..08e8b5d
--- /dev/null
+++ b/package/python/python-2.7-103-optional-sqlite.patch
@@ -0,0 +1,28 @@
+Add option to disable the sqlite3 module
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ configure.in |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -2392,6 +2392,15 @@
+         esac])
+ fi
+ 
++AC_SUBST(SQLITE3)
++AC_ARG_ENABLE(sqlite3,
++	AS_HELP_STRING([--disable-sqlite3], [disable sqlite3]),
++	[ SQLITE3="${enableval}" ], [ SQLITE3=yes ])
++
++if test "$SQLITE3" = "no" ; then
++   DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _sqlite3"
++fi
++
+ AC_SUBST(PYDOC)
+ 
+ AC_ARG_ENABLE(pydoc,
diff --git a/package/python/python-2.7-104-optional-tk.patch b/package/python/python-2.7-104-optional-tk.patch
new file mode 100644
index 0000000..6bcdcb8
--- /dev/null
+++ b/package/python/python-2.7-104-optional-tk.patch
@@ -0,0 +1,68 @@
+Add an option to disable the tk module
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ Makefile.pre.in |   14 ++++++++++----
+ configure.in    |    9 +++++++++
+ 2 files changed, 19 insertions(+), 4 deletions(-)
+
+Index: Python-2.7.1/Makefile.pre.in
+===================================================================
+--- Python-2.7.1.orig/Makefile.pre.in
++++ Python-2.7.1/Makefile.pre.in
+@@ -851,8 +851,7 @@
+ 	plat-mac/lib-scriptpackages/SystemEvents \
+ 	plat-mac/lib-scriptpackages/Terminal 
+ PLATMACPATH=:plat-mac:plat-mac/lib-scriptpackages
+-LIBSUBDIRS=	lib-tk \
+-                site-packages \
++LIBSUBDIRS=	site-packages \
+ 		encodings compiler hotshot \
+ 		email email/mime \
+ 		json \
+@@ -865,8 +864,7 @@
+ 		curses $(MACHDEPS)
+ 
+ ifeq (@TEST_MODULES@,yes)
+-LIBSUBDIRS +=	lib-tk/test lib-tk/test/test_tkinter	\
+-	      	lib-tk/test/test_ttk test test/data	\
++LIBSUBDIRS +=	test test/data	\
+ 		test/decimaltestdata test/xmltestdata 	\
+ 		test/tracedmodules   			\
+ 		email/test email/test/data		\
+@@ -896,6 +894,14 @@
+ endif
+ endif
+ 
++ifeq (@TK@,yes)
++LIBSUBDIRS += lib-tk
++ifeq (@TEST_MODULES@,yes)
++LIBSUBDIRS += lib-tk/test lib-tk/test/test_tkinter	\
++	      lib-tk/test/test_ttk
++endif
++endif
++
+ libinstall:	build_all $(srcdir)/Lib/$(PLATDIR)
+ 	@for i in $(SCRIPTDIR) $(LIBDEST); \
+ 	do \
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -2401,6 +2401,15 @@
+    DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _sqlite3"
+ fi
+ 
++AC_SUBST(TK)
++AC_ARG_ENABLE(tk,
++	AS_HELP_STRING([--disable-tk], [disable tk]),
++	[ TK="${enableval}" ], [ TK=yes ])
++
++if test "$TK" = "no"; then
++   DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _tkinter"
++fi
++
+ AC_SUBST(PYDOC)
+ 
+ AC_ARG_ENABLE(pydoc,
diff --git a/package/python/python-2.7-105-optional-curses.patch b/package/python/python-2.7-105-optional-curses.patch
new file mode 100644
index 0000000..3a1ceab
--- /dev/null
+++ b/package/python/python-2.7-105-optional-curses.patch
@@ -0,0 +1,53 @@
+Add an option to disable the curses module
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ Makefile.pre.in |    6 +++++-
+ configure.in    |    9 +++++++++
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
+Index: Python-2.7.1/Makefile.pre.in
+===================================================================
+--- Python-2.7.1.orig/Makefile.pre.in
++++ Python-2.7.1/Makefile.pre.in
+@@ -861,7 +861,7 @@
+ 		multiprocessing multiprocessing/dummy \
+ 		unittest \
+ 		lib-old \
+-		curses $(MACHDEPS)
++		$(MACHDEPS)
+ 
+ ifeq (@TEST_MODULES@,yes)
+ LIBSUBDIRS +=	test test/data	\
+@@ -902,6 +902,10 @@
+ endif
+ endif
+ 
++ifeq (@CURSES@,yes)
++LIBSUBDIRS += curses
++endif
++
+ libinstall:	build_all $(srcdir)/Lib/$(PLATDIR)
+ 	@for i in $(SCRIPTDIR) $(LIBDEST); \
+ 	do \
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -2410,6 +2410,15 @@
+    DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _tkinter"
+ fi
+ 
++AC_SUBST(CURSES)
++AC_ARG_ENABLE(curses,
++	AS_HELP_STRING([--disable-curses], [disable curses]),
++	[ CURSES="${enableval}" ], [ CURSES=yes ])
++
++if test "$CURSES" = "no"; then
++   DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _curses _curses_panel"
++fi
++
+ AC_SUBST(PYDOC)
+ 
+ AC_ARG_ENABLE(pydoc,
diff --git a/package/python/python-2.7-106-optional-expat.patch b/package/python/python-2.7-106-optional-expat.patch
new file mode 100644
index 0000000..24272d9
--- /dev/null
+++ b/package/python/python-2.7-106-optional-expat.patch
@@ -0,0 +1,84 @@
+Add an option to disable expat
+
+This patch replaces the existing --with-system-expat option with a
+--with-expat={system,builtin,none} option, which allows to tell Python
+whether we want to use the system expat (already installed), the expat
+builtin the Python sources, or no expat at all (which disables the
+installation of XML modules).
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ Makefile.pre.in |    6 +++++-
+ configure.in    |   18 +++++++++++++-----
+ setup.py        |    2 +-
+ 3 files changed, 19 insertions(+), 7 deletions(-)
+
+Index: Python-2.7.1/Makefile.pre.in
+===================================================================
+--- Python-2.7.1.orig/Makefile.pre.in
++++ Python-2.7.1/Makefile.pre.in
+@@ -857,7 +857,7 @@
+ 		json \
+ 		logging bsddb csv importlib wsgiref \
+ 		ctypes ctypes/macholib idlelib idlelib/Icons \
+-		distutils distutils/command $(XMLLIBSUBDIRS) \
++		distutils distutils/command \
+ 		multiprocessing multiprocessing/dummy \
+ 		unittest \
+ 		lib-old \
+@@ -906,6 +906,10 @@
+ LIBSUBDIRS += curses
+ endif
+ 
++ifeq (@EXPAT@,yes)
++LIBSUBDIRS += $(XMLLIBSUBDIRS)
++endif
++
+ libinstall:	build_all $(srcdir)/Lib/$(PLATDIR)
+ 	@for i in $(SCRIPTDIR) $(LIBDEST); \
+ 	do \
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -2087,13 +2087,21 @@
+ AC_SUBST(DISABLED_EXTENSIONS)
+ 
+ # Check for use of the system expat library
+-AC_MSG_CHECKING(for --with-system-expat)
+-AC_ARG_WITH(system_expat,
+-            AS_HELP_STRING([--with-system-expat], [build pyexpat module using an installed expat library]),
++AC_MSG_CHECKING(for --with-expat)
++AC_ARG_WITH(expat,
++            AS_HELP_STRING([--with-expat], [select which expat version to use: system, builtin, none]),
+             [],
+-            [with_system_expat="no"])
++            [with_expat="builtin"])
+ 
+-AC_MSG_RESULT($with_system_expat)
++AC_MSG_RESULT($with_expat)
++
++if test "$with_expat" != "none"; then
++   EXPAT=yes
++else
++   DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} pyexpat"
++   EXPAT=no
++fi
++AC_SUBST(EXPAT)
+ 
+ # Check for use of the system libffi library
+ AC_MSG_CHECKING(for --with-system-ffi)
+Index: Python-2.7.1/setup.py
+===================================================================
+--- Python-2.7.1.orig/setup.py
++++ Python-2.7.1/setup.py
+@@ -1383,7 +1383,7 @@
+         #
+         # More information on Expat can be found at www.libexpat.org.
+         #
+-        if '--with-system-expat' in sysconfig.get_config_var("CONFIG_ARGS"):
++        if '--with-expat=system' in sysconfig.get_config_var("CONFIG_ARGS"):
+             expat_inc = []
+             define_macros = []
+             expat_lib = ['expat']
diff --git a/package/python/python-2.7-107-optional-codecs-cjk.patch b/package/python/python-2.7-107-optional-codecs-cjk.patch
new file mode 100644
index 0000000..1b0541b
--- /dev/null
+++ b/package/python/python-2.7-107-optional-codecs-cjk.patch
@@ -0,0 +1,25 @@
+Add an option to disable CJK codecs
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ configure.in |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -2409,6 +2409,12 @@
+    DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _sqlite3"
+ fi
+ 
++AC_ARG_ENABLE(codecs-cjk,
++	AS_HELP_STRING([--disable-codecs-cjk], [disable CJK codecs]),
++	[ if test "$enableval" = "no"; then
++    	     DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _codecs_kr _codecs_jp _codecs_cn _codecs_tw _codecs_hk"
++  	  fi])
++
+ AC_SUBST(TK)
+ AC_ARG_ENABLE(tk,
+ 	AS_HELP_STRING([--disable-tk], [disable tk]),
diff --git a/package/python/python-2.7-108-optional-nis.patch b/package/python/python-2.7-108-optional-nis.patch
new file mode 100644
index 0000000..35be7ff
--- /dev/null
+++ b/package/python/python-2.7-108-optional-nis.patch
@@ -0,0 +1,28 @@
+Add an option to disable NIS
+
+NIS is not necessarily available in uClibc, so we need an option to
+not compile support for it.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ configure.in |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -2415,6 +2415,12 @@
+     	     DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} _codecs_kr _codecs_jp _codecs_cn _codecs_tw _codecs_hk"
+   	  fi])
+ 
++AC_ARG_ENABLE(nis,
++	AS_HELP_STRING([--disable-nis], [disable NIS]),
++	[ if test "$enableval" = "no"; then
++    	     DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} nis"
++  	  fi])
++
+ AC_SUBST(TK)
+ AC_ARG_ENABLE(tk,
+ 	AS_HELP_STRING([--disable-tk], [disable tk]),
diff --git a/package/python/python-2.7-109-optional-unicodedata.patch b/package/python/python-2.7-109-optional-unicodedata.patch
new file mode 100644
index 0000000..9973c3c
--- /dev/null
+++ b/package/python/python-2.7-109-optional-unicodedata.patch
@@ -0,0 +1,25 @@
+Add an option to disable unicodedata
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ configure.in |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -2421,6 +2421,12 @@
+     	     DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} nis"
+   	  fi])
+ 
++AC_ARG_ENABLE(unicodedata,
++	AS_HELP_STRING([--disable-unicodedata], [disable unicodedata]),
++	[ if test "$enableval" = "no"; then
++    	     DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} unicodedata"
++  	  fi])
++
+ AC_SUBST(TK)
+ AC_ARG_ENABLE(tk,
+ 	AS_HELP_STRING([--disable-tk], [disable tk]),
diff --git a/package/python/python-2.7-110-optional-db.patch b/package/python/python-2.7-110-optional-db.patch
new file mode 100644
index 0000000..5589ed3
--- /dev/null
+++ b/package/python/python-2.7-110-optional-db.patch
@@ -0,0 +1,81 @@
+Add an option to disable bsddb
+
+bsddb has an external dependency on Berkeley DB. Since we want to be
+able to build Python without it, this patch adds an option to disable
+the build/installation of this Python module.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ Makefile.pre.in |   10 ++++++++--
+ configure.in    |   22 ++++++++++++++++++++++
+ 2 files changed, 30 insertions(+), 2 deletions(-)
+
+Index: Python-2.7.1/Makefile.pre.in
+===================================================================
+--- Python-2.7.1.orig/Makefile.pre.in
++++ Python-2.7.1/Makefile.pre.in
+@@ -855,7 +855,7 @@
+ 		encodings compiler hotshot \
+ 		email email/mime \
+ 		json \
+-		logging bsddb csv importlib wsgiref \
++		logging csv importlib wsgiref \
+ 		ctypes ctypes/macholib idlelib idlelib/Icons \
+ 		distutils distutils/command \
+ 		multiprocessing multiprocessing/dummy \
+@@ -868,7 +868,6 @@
+ 		test/decimaltestdata test/xmltestdata 	\
+ 		test/tracedmodules   			\
+ 		email/test email/test/data		\
+-		bsddb/test				\
+ 		ctypes/test distutils/tests		\
+ 		unittest/test
+ endif
+@@ -910,6 +909,13 @@
+ LIBSUBDIRS += $(XMLLIBSUBDIRS)
+ endif
+ 
++ifeq (@BSDDB@,yes)
++LIBSUBDIRS += bsddb
++ifeq (@TEST_MODULES@,yes)
++LIBSUBDIRS += bsddb/test
++endif
++endif
++
+ libinstall:	build_all $(srcdir)/Lib/$(PLATDIR)
+ 	@for i in $(SCRIPTDIR) $(LIBDEST); \
+ 	do \
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -2421,6 +2421,28 @@
+     	     DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} nis"
+   	  fi])
+ 
++AC_ARG_ENABLE(dbm,
++	AS_HELP_STRING([--disable-dbm], [disable DBM]),
++	[ if test "$enableval" = "no"; then
++    	     DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} dbm"
++  	  fi])
++
++AC_ARG_ENABLE(gdbm,
++	AS_HELP_STRING([--disable-gdbm], [disable GDBM]),
++	[ if test "$enableval" = "no"; then
++    	     DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} gdbm"
++  	  fi])
++
++AC_SUBST(BSDDB)
++AC_ARG_ENABLE(bsddb,
++	AS_HELP_STRING([--disable-bsddb], [disable BerkeyleyDB]),
++	[ if test "$enableval" = "no"; then
++    	     BSDDB=no
++    	     DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} bsddb"
++  	  else
++	     BSDDB=yes
++  	  fi], [ BSDDB=yes ])
++
+ AC_ARG_ENABLE(unicodedata,
+ 	AS_HELP_STRING([--disable-unicodedata], [disable unicodedata]),
+ 	[ if test "$enableval" = "no"; then
diff --git a/package/python/python-2.7-111-optional-ssl.patch b/package/python/python-2.7-111-optional-ssl.patch
new file mode 100644
index 0000000..ff38507
--- /dev/null
+++ b/package/python/python-2.7-111-optional-ssl.patch
@@ -0,0 +1,25 @@
+Add an option to disable the ssl module
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+
+---
+ configure.in |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -2421,6 +2421,12 @@
+     	     DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} nis"
+   	  fi])
+ 
++AC_ARG_ENABLE(ssl,
++	AS_HELP_STRING([--disable-ssl], [disable SSL]),
++	[ if test "$enableval" = "no"; then
++    	     DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} ssl"
++  	  fi])
++
+ AC_ARG_ENABLE(dbm,
+ 	AS_HELP_STRING([--disable-dbm], [disable DBM]),
+ 	[ if test "$enableval" = "no"; then
diff --git a/package/python/python-2.7-112-optional-bzip2.patch b/package/python/python-2.7-112-optional-bzip2.patch
new file mode 100644
index 0000000..f2e4e7c
--- /dev/null
+++ b/package/python/python-2.7-112-optional-bzip2.patch
@@ -0,0 +1,24 @@
+Add an option to disable the bz2 module
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ configure.in |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -2427,6 +2427,12 @@
+     	     DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} ssl"
+   	  fi])
+ 
++AC_ARG_ENABLE(bz2,
++       AS_HELP_STRING([--disable-bz2], [disable BZIP2]),
++       [ if test "$enableval" = "no"; then
++            DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} bz2"
++         fi])
++
+ AC_ARG_ENABLE(dbm,
+ 	AS_HELP_STRING([--disable-dbm], [disable DBM]),
+ 	[ if test "$enableval" = "no"; then
diff --git a/package/python/python-2.7-113-optional-zlib.patch b/package/python/python-2.7-113-optional-zlib.patch
new file mode 100644
index 0000000..b5d9665
--- /dev/null
+++ b/package/python/python-2.7-113-optional-zlib.patch
@@ -0,0 +1,24 @@
+Add an option to disable the zlib module
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ configure.in |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+Index: Python-2.7.1/configure.in
+===================================================================
+--- Python-2.7.1.orig/configure.in
++++ Python-2.7.1/configure.in
+@@ -2433,6 +2433,12 @@
+             DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} bz2"
+          fi])
+ 
++AC_ARG_ENABLE(zlib,
++       AS_HELP_STRING([--disable-zlib], [disable ZLIB]),
++       [ if test "$enableval" = "no"; then
++            DISABLED_EXTENSIONS="${DISABLED_EXTENSIONS} zlib"
++         fi])
++
+ AC_ARG_ENABLE(dbm,
+ 	AS_HELP_STRING([--disable-dbm], [disable DBM]),
+ 	[ if test "$enableval" = "no"; then
diff --git a/package/python/python.mk b/package/python/python.mk
index 3afc132..d6ac6b9 100644
--- a/package/python/python.mk
+++ b/package/python/python.mk
@@ -3,218 +3,146 @@
 # python
 #
 #############################################################
-PYTHON_VERSION=2.7
-PYTHON_VERSION_MAJOR=2.7
-PYTHON_SOURCE:=Python-$(PYTHON_VERSION).tar.bz2
-PYTHON_SITE:=http://python.org/ftp/python/$(PYTHON_VERSION)
-PYTHON_DIR:=$(BUILD_DIR)/Python-$(PYTHON_VERSION)
-PYTHON_CAT:=$(BZCAT)
-PYTHON_BINARY:=python
-PYTHON_TARGET_BINARY:=usr/bin/python$(PYTHON_VERSION_MAJOR)
-PYTHON_DEPS:=
-PYTHON_SITE_PACKAGE_DIR=$(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages
-
-BR2_PYTHON_DISABLED_MODULES=dbm zipfile
+PYTHON_VERSION_MAJOR = 2.7
+PYTHON_VERSION       = $(PYTHON_VERSION_MAJOR).1
+PYTHON_SOURCE        = Python-$(PYTHON_VERSION).tar.bz2
+PYTHON_SITE          = http://python.org/ftp/python/$(PYTHON_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_PYTHON_CONF_OPT += 	\
+	--without-cxx-main 	\
+	--disable-sqlite3	\
+	--disable-tk		\
+	--with-expat=none	\
+	--disable-curses	\
+	--disable-codecs-cjk	\
+	--disable-nis		\
+	--disable-unicodedata	\
+	--disable-dbm		\
+	--disable-gdbm		\
+	--disable-bsddb		\
+	--disable-test-modules	\
+	--disable-bz2		\
+	--disable-zlib		\
+	--disable-ssl
+
+HOST_PYTHON_MAKE_ENV = \
+	PYTHON_MODULES_INCLUDE=$(HOST_DIR)/usr/include \
+	PYTHON_MODULES_LIB="$(HOST_DIR)/lib $(HOST_DIR)/usr/lib"
+
+HOST_PYTHON_AUTORECONF = YES
+
+PYTHON_DEPENDENCIES  = host-python libffi
+
+PYTHON_INSTALL_STAGING = YES
 
 ifeq ($(BR2_PACKAGE_PYTHON_READLINE),y)
-PYTHON_DEPS += readline
-else
-BR2_PYTHON_DISABLED_MODULES += readline
+PYTHON_DEPENDENCIES += readline
 endif
 
 ifeq ($(BR2_PACKAGE_PYTHON_CURSES),y)
-PYTHON_DEPS += ncurses
+PYTHON_DEPENDENCIES += ncurses
 else
-BR2_PYTHON_DISABLED_MODULES += _curses _curses_panel
+PYTHON_CONF_OPT += --disable-curses
 endif
 
 ifeq ($(BR2_PACKAGE_PYTHON_PYEXPAT),y)
-PYTHON_DEPS += expat
-else
-BR2_PYTHON_DISABLED_MODULES += pyexpat
-endif
-
-ifeq ($(BR2_PACKAGE_PYTHON_GDBM),y)
-PYTHON_DEPS += gdbm
+PYTHON_DEPENDENCIES += expat
+PYTHON_CONF_OPT += --with-expat=system
 else
-BR2_PYTHON_DISABLED_MODULES += gdbm
+PYTHON_CONF_OPT += --with-expat=none
 endif
 
 ifeq ($(BR2_PACKAGE_PYTHON_BSDDB),y)
-PYTHON_DEPS += berkeleydb
+PYTHON_DEPENDENCIES += berkeleydb
 else
-BR2_PYTHON_DISABLED_MODULES += bsddb
+PYTHON_CONF_OPT += --disable-bsddb
 endif
 
-ifeq ($(BR2_PACKAGE_PYTHON_TKINTER),y)
-PYTHON_DEPS += tcl
+ifeq ($(BR2_PACKAGE_PYTHON_SQLITE),y)
+PYTHON_DEPENDENCIES += sqlite
 else
-BR2_PYTHON_DISABLED_MODULES += _tkinter
+PYTHON_CONF_OPT += --disable-sqlite3
 endif
 
 ifeq ($(BR2_PACKAGE_PYTHON_SSL),y)
-PYTHON_DEPS += openssl
-endif
-
-ifneq ($(BR2_PACKAGE_PYTHON_NIS),y)
-BR2_PYTHON_DISABLED_MODULES += nis
+PYTHON_DEPENDENCIES += openssl
+else
+PYTHON_CONF_OPT += --disable-ssl
 endif
 
 ifneq ($(BR2_PACKAGE_PYTHON_CODECSCJK),y)
-BR2_PYTHON_DISABLED_MODULES += _codecs_kr _codecs_jp _codecs_cn _codecs_tw _codecs_hk
+PYTHON_CONF_OPT += --disable-codecs-cjk
 endif
 
 ifneq ($(BR2_PACKAGE_PYTHON_UNICODEDATA),y)
-BR2_PYTHON_DISABLED_MODULES += unicodedata
+PYTHON_CONF_OPT += --disable-unicodedata
 endif
 
-$(DL_DIR)/$(PYTHON_SOURCE):
-	 $(call DOWNLOAD,$(PYTHON_SITE),$(PYTHON_SOURCE))
-
-python-source: $(DL_DIR)/$(PYTHON_SOURCE)
-
-$(PYTHON_DIR)/.unpacked: $(DL_DIR)/$(PYTHON_SOURCE)
-	$(PYTHON_CAT) $(DL_DIR)/$(PYTHON_SOURCE) | tar -C $(BUILD_DIR) $(TAR_OPTIONS) -
-	touch $@
-
-$(PYTHON_DIR)/.patched: $(PYTHON_DIR)/.unpacked
-	toolchain/patch-kernel.sh $(PYTHON_DIR) package/python/ python-$(PYTHON_VERSION_MAJOR)-\*.patch
-	touch $@
-
-$(PYTHON_DIR)/.hostpython: $(PYTHON_DIR)/.patched
-	(cd $(PYTHON_DIR); rm -rf config.cache; \
-		CC="$(HOSTCC)" OPT="-O2" \
-		./configure $(QUIET) \
-		--with-cxx=no \
-		$(DISABLE_NLS) && \
-		$(MAKE) python Parser/pgen && \
-		mv python hostpython && \
-		mv Parser/pgen Parser/hostpgen && \
-		$(MAKE) distclean \
-	) && \
-	touch $@
-
-$(PYTHON_DIR)/.configured: $(PYTHON_DIR)/.hostpython
-	(cd $(PYTHON_DIR); rm -rf config.cache; \
-		$(TARGET_CONFIGURE_OPTS) \
-		$(TARGET_CONFIGURE_ARGS) \
-		OPT="$(TARGET_CFLAGS)" \
-		./configure $(QUIET) \
-		--target=$(GNU_TARGET_NAME) \
-		--host=$(GNU_TARGET_NAME) \
-		--build=$(GNU_HOST_NAME) \
-		--prefix=/usr \
-		--sysconfdir=/etc \
-		--with-cxx=no \
-		--enable-shared \
-		$(DISABLE_IPV6) \
-		$(DISABLE_NLS) \
-	)
-	touch $@
-
-$(PYTHON_DIR)/$(PYTHON_BINARY): $(PYTHON_DIR)/.configured
-ifneq ($(BR2_PACKAGE_PYTHON_SSL),y)
-	export PYTHON_DISABLE_SSL=1
-endif
-	$(MAKE) CC="$(TARGET_CC)" -C $(PYTHON_DIR) DESTDIR=$(TARGET_DIR) \
-		PYTHON_MODULES_INCLUDE=$(STAGING_DIR)/usr/include \
-		PYTHON_MODULES_LIB="$(STAGING_DIR)/lib $(STAGING_DIR)/usr/lib" \
-		PYTHON_DISABLE_MODULES="$(BR2_PYTHON_DISABLED_MODULES)" \
-		HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen
-
-$(TARGET_DIR)/$(PYTHON_TARGET_BINARY): $(PYTHON_DIR)/$(PYTHON_BINARY)
-ifneq ($(BR2_PACKAGE_PYTHON_SSL),y)
-	export PYTHON_DISABLE_SSL=1
-endif
-	rm -rf $(PYTHON_DIR)/Lib/test
-	LD_LIBRARY_PATH=$(STAGING_DIR)/lib
-	# FIXME: The make -i just below is to work around python's bug
-	# #1669349 (http://bugs.python.org/issue1669349) which is introducing
-	# a failure at make install on a python-free system. Since none of
-	# the other the provided workaround work, the make -i is the only
-	# solution. The failing lib is install later in the process, so
-	# even if the compilation is failing without the patch, with it, the
-	# target python is fully functionnal.
-	# The "-i" will have to be removed when the bug will be solved.
-	$(MAKE) CC="$(TARGET_CC)" -C $(PYTHON_DIR) -i install \
-		DESTDIR=$(TARGET_DIR) CROSS_COMPILE=yes \
-		PYTHON_MODULES_INCLUDE=$(STAGING_DIR)/usr/include \
-		PYTHON_MODULES_LIB="$(STAGING_DIR)/lib $(STAGING_DIR)/usr/lib" \
-		PYTHON_DISABLE_MODULES="$(BR2_PYTHON_DISABLED_MODULES)" \
-		HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen && \
-	rm $(TARGET_DIR)/usr/bin/python && \
-	ln -s python$(PYTHON_VERSION_MAJOR) $(TARGET_DIR)/usr/bin/python && \
-	rm $(TARGET_DIR)/usr/bin/idle && \
-	rm $(TARGET_DIR)/usr/bin/pydoc && \
-	find $(TARGET_DIR)/usr/lib/ -name '*.pyo' -exec rm {} \; && \
-	rm -rf $(TARGET_DIR)/share/locale $(TARGET_DIR)/usr/info \
-		$(TARGET_DIR)/usr/man $(TARGET_DIR)/usr/share/doc \
-		$(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/test
-	cp -dpr $(TARGET_DIR)/usr/include/python$(PYTHON_VERSION_MAJOR) $(STAGING_DIR)/usr/include/
-	mkdir -p $(STAGING_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)
-	cp -dpr $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/config $(STAGING_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/
-
-ifeq ($(BR2_PACKAGE_PYTHON_PY_ONLY),y)
-	find $(TARGET_DIR)/usr/lib/ -name '*.pyc' -exec rm {} \;
-endif
-ifeq ($(BR2_PACKAGE_PYTHON_PYC_ONLY),y)
-	find $(TARGET_DIR)/usr/lib/ -name '*.py' -exec rm {} \;
-endif
-ifneq ($(BR2_PACKAGE_PYTHON_DEV),y)
-	rm -rf $(TARGET_DIR)/usr/include/python$(PYTHON_VERSION_MAJOR)
-	rm -rf $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/config
-endif
-ifneq ($(BR2_PACKAGE_PYTHON_BSDDB),y)
-	rm -rf $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/bsddb
-endif
-ifneq ($(BR2_PACKAGE_PYTHON_CURSES),y)
-	rm -rf $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/curses
-endif
-ifneq ($(BR2_PACKAGE_PYTHON_TKINTER),y)
-	rm -rf $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/lib-tk
+ifeq ($(BR2_PACKAGE_PYTHON_BZIP2),y)
+PYTHON_DEPENDENCIES += bzip2
+else
+PYTHON_CONF_OPT += --disable-bz2
 endif
-	touch -c $@
-
-python: $(PYTHON_DEPS) $(TARGET_DIR)/$(PYTHON_TARGET_BINARY)
-
-python-clean:
-	-$(MAKE) -C $(PYTHON_DIR) distclean
-	rm -f $(PYTHON_DIR)/.configured $(TARGET_DIR)/$(PYTHON_TARGET_BINARY)
-	-rm -rf $(TARGET_DIR)/usr/lib/python* $(TARGET_DIR)/usr/include/python*
-	-rm -f $(STAGING_DIR)/usr/lib/libpython$(PYTHON_VERSION_MAJOR).so
-
-python-dirclean:
-	rm -rf $(PYTHON_DIR)
-
-####  LIBPYTHON
 
+ifeq ($(BR2_PACKAGE_PYTHON_ZLIB),y)
+PYTHON_DEPENDENCIES += zlib
+else
+PYTHON_CONF_OPT += --disable-zlib
+endif
+
+PYTHON_CONF_ENV += \
+	PYTHON_FOR_BUILD=$(HOST_PYTHON_DIR)/python \
+	PGEN_FOR_BUILD=$(HOST_PYTHON_DIR)/Parser/pgen \
+	ac_cv_have_long_long_format=yes
+
+PYTHON_CONF_OPT += \
+	--without-cxx-main 	\
+	--without-doc-strings	\
+	--with-system-ffi	\
+	--disable-pydoc		\
+	--disable-test-modules	\
+	--disable-lib2to3	\
+	--disable-gdbm		\
+	--disable-tk		\
+	--disable-nis		\
+	--disable-dbm
+
+PYTHON_MAKE_ENV = \
+	PYTHON_MODULES_INCLUDE=$(STAGING_DIR)/usr/include \
+	PYTHON_MODULES_LIB="$(STAGING_DIR)/lib $(STAGING_DIR)/usr/lib"
 
-LIBPYTHON_BINARY:=libpython$(PYTHON_VERSION_MAJOR).so
+#
+# Development files removal
+#
+define PYTHON_REMOVE_DEVFILES
+	rm -f $(TARGET_DIR)/usr/bin/python$(PYTHON_VERSION_MAJOR)-config
+	rm -f $(TARGET_DIR)/usr/bin/python-config
+endef
 
-libpython:	python $(TARGET_DIR)/usr/lib/$(LIBPYTHON_BINARY)
+ifneq ($(BR2_HAVE_DEVFILES),y)
+PYTHON_POST_INSTALL_TARGET_HOOKS += PYTHON_REMOVE_DEVFILES
+endif
 
+#
+# Remove useless files. In the config/ directory, only the Makefile
+# and the pyconfig.h files are needed at runtime.
+#
+define PYTHON_REMOVE_USELESS_FILES
+	for i in `find $(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/config/ \
+		-type f -not -name pyconfig.h -a -not -name Makefile` ; do \
+		rm -f $$i ; \
+	done
+endef
 
-$(STAGING_DIR)/usr/lib/$(LIBPYTHON_BINARY): $(TARGET_DIR)/$(PYTHON_TARGET_BINARY)
-		cp -dpr $(PYTHON_DIR)/$(LIBPYTHON_BINARY).* $(STAGING_DIR)/usr/lib
-		(\
-		cd $(STAGING_DIR)/usr/lib ; \
-		rm -f $(LIBPYTHON_BINARY) ; \
-		ln -s `basename  \`ls libpython*.so.*\`` $(LIBPYTHON_BINARY) \
-		)
+PYTHON_POST_INSTALL_TARGET_HOOKS += PYTHON_REMOVE_USELESS_FILES
 
-$(TARGET_DIR)/usr/lib/$(LIBPYTHON_BINARY): $(STAGING_DIR)/usr/lib/$(LIBPYTHON_BINARY)
-		cp -dpr $(STAGING_DIR)/usr/lib/$(LIBPYTHON_BINARY).* $(TARGET_DIR)/usr/lib
-		(\
-		cd $(TARGET_DIR)/usr/lib ; \
-		rm -f $(LIBPYTHON_BINARY) ; \
-		ln -s `basename  \`ls libpython*.so.*\`` $(LIBPYTHON_BINARY) \
-		)
+PYTHON_AUTORECONF = YES
 
-#############################################################
-#
-# Toplevel Makefile options
-#
-#############################################################
-ifeq ($(BR2_PACKAGE_PYTHON),y)
-TARGETS+=python
-endif
+$(eval $(call AUTOTARGETS,package,python))
+$(eval $(call AUTOTARGETS,package,python,host))
\ No newline at end of file
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 08/10] Remove .py or .pyc depending on Python configuration
  2011-01-24 11:01 [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
                   ` (6 preceding siblings ...)
  2011-01-24 11:01 ` [Buildroot] [PATCH 07/10] python: convert to autotargets, bump to 2.7.1, many improvements Thomas Petazzoni
@ 2011-01-24 11:01 ` Thomas Petazzoni
  2011-01-24 21:20   ` Peter Korsgaard
  2011-01-24 11:01 ` [Buildroot] [PATCH 09/10] python-serial: new package Thomas Petazzoni
                   ` (2 subsequent siblings)
  10 siblings, 1 reply; 19+ messages in thread
From: Thomas Petazzoni @ 2011-01-24 11:01 UTC (permalink / raw)
  To: buildroot

We do this at a global level since several packages can install
Python modules.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 Makefile |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/Makefile b/Makefile
index 7e08cf3..1f37a1f 100644
--- a/Makefile
+++ b/Makefile
@@ -438,6 +438,14 @@ ifneq ($(BR2_HAVE_DOCUMENTATION),y)
 	rm -rf $(TARGET_DIR)/usr/share/gtk-doc
 	-rmdir $(TARGET_DIR)/usr/share 2>/dev/null
 endif
+ifeq ($(BR2_PACKAGE_PYTHON),y)
+ifeq ($(BR2_PACKAGE_PYTHON_PY_ONLY),y)
+	find $(TARGET_DIR)/usr/lib/ -name '*.pyc' -print0 | xargs -0 rm -f
+endif
+ifeq ($(BR2_PACKAGE_PYTHON_PYC_ONLY),y)
+	find $(TARGET_DIR)/usr/lib/ -name '*.py' -print0 | xargs -0 rm -f
+endif
+endif
 	find $(TARGET_DIR) -type f -perm +111 '!' -name 'libthread_db*.so*' | \
 		xargs $(STRIPCMD) 2>/dev/null || true
 	find $(TARGET_DIR)/lib/modules -type f -name '*.ko' | \
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 09/10] python-serial: new package
  2011-01-24 11:01 [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
                   ` (7 preceding siblings ...)
  2011-01-24 11:01 ` [Buildroot] [PATCH 08/10] Remove .py or .pyc depending on Python configuration Thomas Petazzoni
@ 2011-01-24 11:01 ` Thomas Petazzoni
  2011-01-24 21:22   ` Peter Korsgaard
  2011-01-24 11:01 ` [Buildroot] [PATCH 10/10] python-mad: " Thomas Petazzoni
  2011-01-25  8:03 ` [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
  10 siblings, 1 reply; 19+ messages in thread
From: Thomas Petazzoni @ 2011-01-24 11:01 UTC (permalink / raw)
  To: buildroot

python-serial is a Python library to access serial ports.

This package has originally been introduced to test that third-party
pure Python modules (that do not use C extensions) build properly
against the Buildroot Python infrastructure.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/Config.in                      |    1 +
 package/python-serial/Config.in        |    5 +++++
 package/python-serial/python-serial.mk |   21 +++++++++++++++++++++
 3 files changed, 27 insertions(+), 0 deletions(-)
 create mode 100644 package/python-serial/Config.in
 create mode 100644 package/python-serial/python-serial.mk

diff --git a/package/Config.in b/package/Config.in
index 438e1b4..d437dc4 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -293,6 +293,7 @@ source "package/libraw1394/Config.in"
 source "package/tslib/Config.in"
 source "package/libusb/Config.in"
 source "package/libusb-compat/Config.in"
+source "package/python-serial/Config.in"
 endmenu
 
 if BROKEN
diff --git a/package/python-serial/Config.in b/package/python-serial/Config.in
new file mode 100644
index 0000000..06866db
--- /dev/null
+++ b/package/python-serial/Config.in
@@ -0,0 +1,5 @@
+config BR2_PACKAGE_PYTHON_SERIAL
+	bool "python-serial"
+	depends on BR2_PACKAGE_PYTHON
+	help
+	  python-serial is a Python library to access serial ports.
diff --git a/package/python-serial/python-serial.mk b/package/python-serial/python-serial.mk
new file mode 100644
index 0000000..048930b
--- /dev/null
+++ b/package/python-serial/python-serial.mk
@@ -0,0 +1,21 @@
+#############################################################
+#
+# python-serial
+#
+#############################################################
+
+PYTHON_SERIAL_VERSION = 2.5
+PYTHON_SERIAL_SOURCE  = pyserial-$(PYTHON_SERIAL_VERSION).tar.gz
+PYTHON_SERIAL_SITE    = http://pypi.python.org/packages/source/p/pyserial/
+
+PYTHON_SERIAL_DEPENDENCIES = python
+
+define PYTHON_SERIAL_BUILD_CMDS
+	(cd $(@D); $(HOST_DIR)/usr/bin/python setup.py build)
+endef
+
+define PYTHON_SERIAL_INSTALL_TARGET_CMDS
+	(cd $(@D); $(HOST_DIR)/usr/bin/python setup.py install --prefix=$(TARGET_DIR)/usr)
+endef
+
+$(eval $(call GENTARGETS,package,python-serial))
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 10/10] python-mad: new package
  2011-01-24 11:01 [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
                   ` (8 preceding siblings ...)
  2011-01-24 11:01 ` [Buildroot] [PATCH 09/10] python-serial: new package Thomas Petazzoni
@ 2011-01-24 11:01 ` Thomas Petazzoni
  2011-01-24 21:23   ` Peter Korsgaard
  2011-01-25  8:03 ` [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
  10 siblings, 1 reply; 19+ messages in thread
From: Thomas Petazzoni @ 2011-01-24 11:01 UTC (permalink / raw)
  To: buildroot

python-mad is a Python binding for the MAD library, a high-quality
integer-only MPEG decoder.

This package has been introduced as a test to make sure that
third-party Python modules that rely on a C extension can properly be
built against the Python infrastructure of Buildroot.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 package/multimedia/Config.in                |    1 +
 package/multimedia/python-mad/Config.in     |    7 ++++
 package/multimedia/python-mad/python-mad.mk |   41 +++++++++++++++++++++++++++
 3 files changed, 49 insertions(+), 0 deletions(-)
 create mode 100644 package/multimedia/python-mad/Config.in
 create mode 100644 package/multimedia/python-mad/python-mad.mk

diff --git a/package/multimedia/Config.in b/package/multimedia/Config.in
index da50dbb..ae685cf 100644
--- a/package/multimedia/Config.in
+++ b/package/multimedia/Config.in
@@ -25,6 +25,7 @@ source "package/multimedia/libvorbis/Config.in"
 source "package/multimedia/madplay/Config.in"
 source "package/multimedia/mpg123/Config.in"
 source "package/multimedia/mplayer/Config.in"
+source "package/multimedia/python-mad/Config.in"
 source "package/multimedia/speex/Config.in"
 source "package/multimedia/swfdec/Config.in"
 source "package/multimedia/festival/Config.in"
diff --git a/package/multimedia/python-mad/Config.in b/package/multimedia/python-mad/Config.in
new file mode 100644
index 0000000..d25f2b8
--- /dev/null
+++ b/package/multimedia/python-mad/Config.in
@@ -0,0 +1,7 @@
+config BR2_PACKAGE_PYTHON_MAD
+	bool "python-mad"
+	depends on BR2_PACKAGE_PYTHON
+	select BR2_PACKAGE_LIBMAD
+	help
+	  python-mad is a Python binding for the MAD library, a
+	  high-quality integer-only MPEG decoder.
\ No newline at end of file
diff --git a/package/multimedia/python-mad/python-mad.mk b/package/multimedia/python-mad/python-mad.mk
new file mode 100644
index 0000000..52d13a6
--- /dev/null
+++ b/package/multimedia/python-mad/python-mad.mk
@@ -0,0 +1,41 @@
+#############################################################
+#
+# python-mad
+#
+#############################################################
+
+PYTHON_MAD_VERSION = 0.6
+PYTHON_MAD_SOURCE  = pymad-$(PYTHON_MAD_VERSION).tar.gz
+PYTHON_MAD_SITE    = http://spacepants.org/src/pymad/download/
+
+PYTHON_MAD_DEPENDENCIES = python libmad
+
+ifeq ($(BR2_ENDIAN),"LITTLE")
+PYTHON_MAD_ENDIAN=little
+else
+PYTHON_MAD_ENDIAN=big
+endif
+
+define PYTHON_MAD_CONFIGURE_CMDS
+	echo "endian = $(PYTHON_MAD_ENDIAN)" > $(@D)/Setup
+	echo "mad_libs = mad" >> $(@D)/Setup
+	echo "mad_lib_dir = $(STAGING_DIR)/usr/lib" >> $(@D)/Setup
+	echo "mad_include_dir = $(STAGING_DIR)/usr/include" >> $(@D)/Setup
+endef
+
+define PYTHON_MAD_BUILD_CMDS
+	(cd $(@D); \
+		CC="$(TARGET_CC)"		\
+		CFLAGS="$(TARGET_CFLAGS)" 	\
+		LDSHARED="$(TARGET_CC) -shared" \
+		LDFLAGS="$(TARGET_LDFLAGS)" 	\
+	$(HOST_DIR)/usr/bin/python setup.py build_ext \
+	--include-dirs=$(STAGING_DIR)/usr/include/python$(PYTHON_VERSION_MAJOR))
+	(cd $(@D); $(HOST_DIR)/usr/bin/python setup.py build)
+endef
+
+define PYTHON_MAD_INSTALL_TARGET_CMDS
+	(cd $(@D); $(HOST_DIR)/usr/bin/python setup.py install --prefix=$(TARGET_DIR)/usr)
+endef
+
+$(eval $(call GENTARGETS,package,python-mad))
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 06/10] autotools: allow host package to use <pkg>_MAKE_ENV and <pkg>_MAKE
  2011-01-24 11:01 ` [Buildroot] [PATCH 06/10] autotools: allow host package to use <pkg>_MAKE_ENV and <pkg>_MAKE Thomas Petazzoni
@ 2011-01-24 21:04   ` Peter Korsgaard
  2011-01-25  7:55     ` Thomas Petazzoni
  0 siblings, 1 reply; 19+ messages in thread
From: Peter Korsgaard @ 2011-01-24 21:04 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> This will be needed by the Python interpreter package.
 Thomas> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 Thomas> ---
 Thomas>  package/Makefile.autotools.in |    2 +-
 Thomas>  1 files changed, 1 insertions(+), 1 deletions(-)

 Thomas> diff --git a/package/Makefile.autotools.in b/package/Makefile.autotools.in
 Thomas> index de0a355..d445348 100644
 Thomas> --- a/package/Makefile.autotools.in
 Thomas> +++ b/package/Makefile.autotools.in
 Thomas> @@ -200,7 +200,7 @@ endif
 Thomas>  #
 Thomas>  ifndef $(2)_INSTALL_CMDS
 Thomas>  define $(2)_INSTALL_CMDS
 Thomas> -	$(HOST_MAKE_ENV) $(MAKE) -C $$($$(PKG)_SRCDIR) install
 Thomas> +	$(HOST_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) -C $$($$(PKG)_SRCDIR) install

Hmm, I don't really like this. Packages might be adding target specific
stuff to their $PKG_MAKE_ENV - E.G.:

lvm2/lvm2.mk:LVM2_MAKE_ENV = CC="$(TARGET_CC)"

Wouldn't it make more sense to add a HOST_$PKG_MAKE_ENV and use it just
like we do for $PKG_MAKE_ENV (E.G. at build and install time)?

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 08/10] Remove .py or .pyc depending on Python configuration
  2011-01-24 11:01 ` [Buildroot] [PATCH 08/10] Remove .py or .pyc depending on Python configuration Thomas Petazzoni
@ 2011-01-24 21:20   ` Peter Korsgaard
  0 siblings, 0 replies; 19+ messages in thread
From: Peter Korsgaard @ 2011-01-24 21:20 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> We do this at a global level since several packages can install
 Thomas> Python modules.

 Thomas> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 Thomas> ---
 Thomas>  Makefile |    8 ++++++++
 Thomas>  1 files changed, 8 insertions(+), 0 deletions(-)

 Thomas> diff --git a/Makefile b/Makefile
 Thomas> index 7e08cf3..1f37a1f 100644
 Thomas> --- a/Makefile
 Thomas> +++ b/Makefile
 Thomas> @@ -438,6 +438,14 @@ ifneq ($(BR2_HAVE_DOCUMENTATION),y)
 Thomas>  	rm -rf $(TARGET_DIR)/usr/share/gtk-doc
 Thomas>  	-rmdir $(TARGET_DIR)/usr/share 2>/dev/null
 Thomas>  endif
 Thomas> +ifeq ($(BR2_PACKAGE_PYTHON),y)
 Thomas> +ifeq ($(BR2_PACKAGE_PYTHON_PY_ONLY),y)
 Thomas> +	find $(TARGET_DIR)/usr/lib/ -name '*.pyc' -print0 | xargs -0 rm -f
 Thomas> +endif
 Thomas> +ifeq ($(BR2_PACKAGE_PYTHON_PYC_ONLY),y)
 Thomas> +	find $(TARGET_DIR)/usr/lib/ -name '*.py' -print0 | xargs -0 rm -f
 Thomas> +endif
 Thomas> +endif

The outermost conditional is not really needed.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 09/10] python-serial: new package
  2011-01-24 11:01 ` [Buildroot] [PATCH 09/10] python-serial: new package Thomas Petazzoni
@ 2011-01-24 21:22   ` Peter Korsgaard
  0 siblings, 0 replies; 19+ messages in thread
From: Peter Korsgaard @ 2011-01-24 21:22 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> python-serial is a Python library to access serial ports.
 Thomas> This package has originally been introduced to test that third-party
 Thomas> pure Python modules (that do not use C extensions) build properly
 Thomas> against the Buildroot Python infrastructure.

 Thomas> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 Thomas> ---
 Thomas>  package/Config.in                      |    1 +
 Thomas>  package/python-serial/Config.in        |    5 +++++
 Thomas>  package/python-serial/python-serial.mk |   21 +++++++++++++++++++++
 Thomas>  3 files changed, 27 insertions(+), 0 deletions(-)
 Thomas>  create mode 100644 package/python-serial/Config.in
 Thomas>  create mode 100644 package/python-serial/python-serial.mk

 Thomas> diff --git a/package/Config.in b/package/Config.in
 Thomas> index 438e1b4..d437dc4 100644
 Thomas> --- a/package/Config.in
 Thomas> +++ b/package/Config.in
 Thomas> @@ -293,6 +293,7 @@ source "package/libraw1394/Config.in"
 Thomas>  source "package/tslib/Config.in"
 Thomas>  source "package/libusb/Config.in"
 Thomas>  source "package/libusb-compat/Config.in"
 Thomas> +source "package/python-serial/Config.in"
 Thomas>  endmenu
 
 Thomas>  if BROKEN
 Thomas> diff --git a/package/python-serial/Config.in b/package/python-serial/Config.in
 Thomas> new file mode 100644
 Thomas> index 0000000..06866db
 Thomas> --- /dev/null
 Thomas> +++ b/package/python-serial/Config.in
 Thomas> @@ -0,0 +1,5 @@
 Thomas> +config BR2_PACKAGE_PYTHON_SERIAL
 Thomas> +	bool "python-serial"
 Thomas> +	depends on BR2_PACKAGE_PYTHON
 Thomas> +	help
 Thomas> +	  python-serial is a Python library to access serial ports.

Please add a link to http://pyserial.sf.net here.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 10/10] python-mad: new package
  2011-01-24 11:01 ` [Buildroot] [PATCH 10/10] python-mad: " Thomas Petazzoni
@ 2011-01-24 21:23   ` Peter Korsgaard
  0 siblings, 0 replies; 19+ messages in thread
From: Peter Korsgaard @ 2011-01-24 21:23 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> python-mad is a Python binding for the MAD library, a high-quality
 Thomas> integer-only MPEG decoder.

 Thomas> This package has been introduced as a test to make sure that
 Thomas> third-party Python modules that rely on a C extension can properly be
 Thomas> built against the Python infrastructure of Buildroot.

 Thomas> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 Thomas> ---
 Thomas>  package/multimedia/Config.in                |    1 +
 Thomas>  package/multimedia/python-mad/Config.in     |    7 ++++
 Thomas>  package/multimedia/python-mad/python-mad.mk |   41 +++++++++++++++++++++++++++
 Thomas>  3 files changed, 49 insertions(+), 0 deletions(-)
 Thomas>  create mode 100644 package/multimedia/python-mad/Config.in
 Thomas>  create mode 100644 package/multimedia/python-mad/python-mad.mk

 Thomas> diff --git a/package/multimedia/Config.in b/package/multimedia/Config.in
 Thomas> index da50dbb..ae685cf 100644
 Thomas> --- a/package/multimedia/Config.in
 Thomas> +++ b/package/multimedia/Config.in
 Thomas> @@ -25,6 +25,7 @@ source "package/multimedia/libvorbis/Config.in"
 Thomas>  source "package/multimedia/madplay/Config.in"
 Thomas>  source "package/multimedia/mpg123/Config.in"
 Thomas>  source "package/multimedia/mplayer/Config.in"
 Thomas> +source "package/multimedia/python-mad/Config.in"
 Thomas>  source "package/multimedia/speex/Config.in"
 Thomas>  source "package/multimedia/swfdec/Config.in"
 Thomas>  source "package/multimedia/festival/Config.in"
 Thomas> diff --git a/package/multimedia/python-mad/Config.in b/package/multimedia/python-mad/Config.in
 Thomas> new file mode 100644
 Thomas> index 0000000..d25f2b8
 Thomas> --- /dev/null
 Thomas> +++ b/package/multimedia/python-mad/Config.in
 Thomas> @@ -0,0 +1,7 @@
 Thomas> +config BR2_PACKAGE_PYTHON_MAD
 Thomas> +	bool "python-mad"
 Thomas> +	depends on BR2_PACKAGE_PYTHON
 Thomas> +	select BR2_PACKAGE_LIBMAD
 Thomas> +	help
 Thomas> +	  python-mad is a Python binding for the MAD library, a
 Thomas> +	  high-quality integer-only MPEG decoder.
 Thomas> \ No newline at end of file

Please add the newline (here and elsewhere) and add a link to
http://spacepants.org/src/pymad/

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 06/10] autotools: allow host package to use <pkg>_MAKE_ENV and <pkg>_MAKE
  2011-01-24 21:04   ` Peter Korsgaard
@ 2011-01-25  7:55     ` Thomas Petazzoni
  2011-01-25  9:02       ` Peter Korsgaard
  0 siblings, 1 reply; 19+ messages in thread
From: Thomas Petazzoni @ 2011-01-25  7:55 UTC (permalink / raw)
  To: buildroot

On Mon, 24 Jan 2011 22:04:35 +0100
Peter Korsgaard <jacmet@uclibc.org> wrote:

> Hmm, I don't really like this. Packages might be adding target specific
> stuff to their $PKG_MAKE_ENV - E.G.:
> 
> lvm2/lvm2.mk:LVM2_MAKE_ENV = CC="$(TARGET_CC)"
> 
> Wouldn't it make more sense to add a HOST_$PKG_MAKE_ENV and use it just
> like we do for $PKG_MAKE_ENV (E.G. at build and install time)?

$$(PKG) is already HOST_FOOBAR. So, when I do:

$(HOST_MAKE_ENV) $$($$(PKG)_MAKE_ENV) $$($$(PKG)_MAKE) -C $$($$(PKG)_SRCDIR) install

it gets expanded to

$(HOST_MAKE_ENV) $(HOST_<pkg>_MAKE_ENV) $(HOST_<pkg>_MAKE) -C $(HOST_<pkg>_SRCDIR) install

See how $(PKG) is defined:

$$($(2)_TARGET_INSTALL_HOST):           PKG=$(2)

And $(2) is :

#  argument 2 is the uppercase package name, including an HOST_ prefix
#             for host packages

Regards,

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump
  2011-01-24 11:01 [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
                   ` (9 preceding siblings ...)
  2011-01-24 11:01 ` [Buildroot] [PATCH 10/10] python-mad: " Thomas Petazzoni
@ 2011-01-25  8:03 ` Thomas Petazzoni
  2011-01-25 21:17   ` Peter Korsgaard
  10 siblings, 1 reply; 19+ messages in thread
From: Thomas Petazzoni @ 2011-01-25  8:03 UTC (permalink / raw)
  To: buildroot

Hello,

On Mon, 24 Jan 2011 12:01:28 +0100
Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote:

> Here is a set of patches that improve Python support in Buildroot:
> Python is bumped to 2.7.1, the package is converted to the autotargets
> infrastructure, some third-party Python modules are introduced as
> examples, many minor issues were fixed.

I have pushed a new version, with the following changes :

 * Rebased on latest master (involved fixing a trivial conflict in
   package/multimedia/Config.in)

 * Remove the outermost BR2_PACKAGE_PYTHON condition from the py/pyc
   removal patch (8/10)

 * Added link in the python-serial package description in Config.in
   (9/10)

 * Added link in the python-mad package description in Config.in
   (10/10).

 * Added some missing final new lines here and there (python-mad,
   libffi, etc.)

Regards,

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [Buildroot] [PATCH 06/10] autotools: allow host package to use <pkg>_MAKE_ENV and <pkg>_MAKE
  2011-01-25  7:55     ` Thomas Petazzoni
@ 2011-01-25  9:02       ` Peter Korsgaard
  0 siblings, 0 replies; 19+ messages in thread
From: Peter Korsgaard @ 2011-01-25  9:02 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> On Mon, 24 Jan 2011 22:04:35 +0100
 Thomas> Peter Korsgaard <jacmet@uclibc.org> wrote:

 >> Hmm, I don't really like this. Packages might be adding target specific
 >> stuff to their $PKG_MAKE_ENV - E.G.:
 >> 
 >> lvm2/lvm2.mk:LVM2_MAKE_ENV = CC="$(TARGET_CC)"
 >> 
 >> Wouldn't it make more sense to add a HOST_$PKG_MAKE_ENV and use it just
 >> like we do for $PKG_MAKE_ENV (E.G. at build and install time)?

 Thomas> $$(PKG) is already HOST_FOOBAR. So, when I do:

Ahh yes, true - Thanks.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump
  2011-01-25  8:03 ` [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
@ 2011-01-25 21:17   ` Peter Korsgaard
  0 siblings, 0 replies; 19+ messages in thread
From: Peter Korsgaard @ 2011-01-25 21:17 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> Hello,
 Thomas> On Mon, 24 Jan 2011 12:01:28 +0100
 Thomas> Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote:

 >> Here is a set of patches that improve Python support in Buildroot:
 >> Python is bumped to 2.7.1, the package is converted to the autotargets
 >> infrastructure, some third-party Python modules are introduced as
 >> examples, many minor issues were fixed.

 Thomas> I have pushed a new version, with the following changes :

Thanks, commmitted.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2011-01-25 21:17 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-24 11:01 [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
2011-01-24 11:01 ` [Buildroot] [PATCH 01/10] python: Move to version 2.7 Thomas Petazzoni
2011-01-24 11:01 ` [Buildroot] [PATCH 02/10] python: Port the python2.4 patches to 2.7 Thomas Petazzoni
2011-01-24 11:01 ` [Buildroot] [PATCH 03/10] python: Add the needed patches to compile python2.7 in buildroot Thomas Petazzoni
2011-01-24 11:01 ` [Buildroot] [PATCH 04/10] python: Fix make install (Workaround python's bug #1669349) Thomas Petazzoni
2011-01-24 11:01 ` [Buildroot] [PATCH 05/10] libffi: new package Thomas Petazzoni
2011-01-24 11:01 ` [Buildroot] [PATCH 06/10] autotools: allow host package to use <pkg>_MAKE_ENV and <pkg>_MAKE Thomas Petazzoni
2011-01-24 21:04   ` Peter Korsgaard
2011-01-25  7:55     ` Thomas Petazzoni
2011-01-25  9:02       ` Peter Korsgaard
2011-01-24 11:01 ` [Buildroot] [PATCH 07/10] python: convert to autotargets, bump to 2.7.1, many improvements Thomas Petazzoni
2011-01-24 11:01 ` [Buildroot] [PATCH 08/10] Remove .py or .pyc depending on Python configuration Thomas Petazzoni
2011-01-24 21:20   ` Peter Korsgaard
2011-01-24 11:01 ` [Buildroot] [PATCH 09/10] python-serial: new package Thomas Petazzoni
2011-01-24 21:22   ` Peter Korsgaard
2011-01-24 11:01 ` [Buildroot] [PATCH 10/10] python-mad: " Thomas Petazzoni
2011-01-24 21:23   ` Peter Korsgaard
2011-01-25  8:03 ` [Buildroot] [pull request] Pull request for branch for-2011.02/python-bump Thomas Petazzoni
2011-01-25 21:17   ` Peter Korsgaard

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.