update to python 2.6.7
authorghost <andreas.monzner@multimedia-labs.de>
Tue, 13 Sep 2011 14:48:24 +0000 (16:48 +0200)
committerghost <andreas.monzner@multimedia-labs.de>
Tue, 13 Sep 2011 14:48:24 +0000 (16:48 +0200)
22 files changed:
conf/checksums.ini
recipes/python/python-2.6.7/00-fix-parallel-make.patch [new file with mode: 0644]
recipes/python/python-2.6.7/01-use-proper-tools-for-cross-build.patch [new file with mode: 0644]
recipes/python/python-2.6.7/02-remove-test-for-cross.patch [new file with mode: 0644]
recipes/python/python-2.6.7/03-fix-tkinter-detection.patch [new file with mode: 0644]
recipes/python/python-2.6.7/04-default-is-optimized.patch [new file with mode: 0644]
recipes/python/python-2.6.7/05-enable-ctypes-cross-build.patch [new file with mode: 0644]
recipes/python/python-2.6.7/06-ctypes-libffi-fix-configure.patch [new file with mode: 0644]
recipes/python/python-2.6.7/10-distutils-fix-swig-parameter.patch [new file with mode: 0644]
recipes/python/python-2.6.7/11-distutils-never-modify-shebang-line.patch [new file with mode: 0644]
recipes/python/python-2.6.7/12-distutils-prefix-is-inside-staging-area.patch [new file with mode: 0644]
recipes/python/python-2.6.7/debug.patch [new file with mode: 0644]
recipes/python/python-2.6.7/fix_pthread_site.patch [new file with mode: 0644]
recipes/python/python-2.6.7/forced_largefile_support.patch [new file with mode: 0644]
recipes/python/python-2.6.7/ipv6-cross.patch [new file with mode: 0644]
recipes/python/python-2.6.7/nohostlibs.patch [new file with mode: 0644]
recipes/python/python-2.6.7/python-module-rpath-fix.patch [new file with mode: 0644]
recipes/python/python-2.6.7/sitecustomize.py [new file with mode: 0644]
recipes/python/python-2.6.7/some_configure_fixes.patch [new file with mode: 0644]
recipes/python/python-2.6.7/strict_aliasing_site.patch [new file with mode: 0644]
recipes/python/python-native_2.6.7.bb [new file with mode: 0644]
recipes/python/python_2.6.7.bb [new file with mode: 0644]

index 35f371c..7176880 100644 (file)
@@ -1070,6 +1070,10 @@ sha256=cf153f10ba6312a8303ceb01bed834a2786d28aa89c7d73dba64714f691628f6
 md5=245db9f1e0f09ab7e0faaa0cf7301011
 sha256=a1cdc4a8f6c1f947ea3b87d097af2db4371019bac941d92c3844124c5694328b
 
+[http://www.python.org/ftp/python/2.6.7/Python-2.6.7.tar.bz2]
+md5=d40ef58ed88438a870bbeb0ac5d4217b
+sha256=4502c1a064ce68416188005662c0269d31175b855502f64c6dfa8f51226a0e5c
+
 [http://jerakeen.org/files/PythonDaap-0.4.tar.gz]
 md5=f7672bfd563787a76fb7e9a43c062f18
 sha256=5318946df77937e0b601c95a198790f9ba52d4afb4eb153480289350182bb739
diff --git a/recipes/python/python-2.6.7/00-fix-parallel-make.patch b/recipes/python/python-2.6.7/00-fix-parallel-make.patch
new file mode 100644 (file)
index 0000000..c80ca19
--- /dev/null
@@ -0,0 +1,40 @@
+upstream: <http://bugs.python.org/issue10013>
+comment: As in the comment in the issue tracker this is fixed for py3k a little differently <http://svn.python.org/view?view=rev&revision=84068>. This patch is taken from Fedora.
+
+diff -up Python-2.7/Makefile.pre.in.fix-parallel-make Python-2.7/Makefile.pre.in
+--- Python-2.7/Makefile.pre.in.fix-parallel-make       2010-07-22 15:01:39.567996932 -0400
++++ Python-2.7/Makefile.pre.in 2010-07-22 15:47:02.437998509 -0400
+@@ -197,6 +197,7 @@ SIGNAL_OBJS=       @SIGNAL_OBJS@
+ ##########################################################################
+ # Grammar
++GRAMMAR_STAMP=        $(srcdir)/grammar-stamp
+ GRAMMAR_H=    $(srcdir)/Include/graminit.h
+ GRAMMAR_C=    $(srcdir)/Python/graminit.c
+ GRAMMAR_INPUT=        $(srcdir)/Grammar/Grammar
+@@ -514,10 +515,24 @@ Modules/getpath.o: $(srcdir)/Modules/get
+ Modules/python.o: $(srcdir)/Modules/python.c
+       $(MAINCC) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/python.c
++# GNU "make" interprets rules with two dependents as two copies of the rule.
++# 
++# In a parallel build this can lead to pgen being run twice, once for each of
++# GRAMMAR_H and GRAMMAR_C, leading to race conditions in which the compiler
++# reads a partially-overwritten copy of one of these files, leading to syntax
++# errors (or linker errors if the fragment happens to be syntactically valid C)
++#
++# See http://www.gnu.org/software/hello/manual/automake/Multiple-Outputs.html
++# for more information.
++#
++# Introduce ".grammar-stamp" as a contrived single output from PGEN to avoid
++# this:
++$(GRAMMAR_H) $(GRAMMAR_C): $(GRAMMAR_STAMP)
+-$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
++$(GRAMMAR_STAMP): $(PGEN) $(GRAMMAR_INPUT)
+               -@$(INSTALL) -d Include
+               -$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
++              touch $(GRAMMAR_STAMP)
+ $(PGEN):      $(PGENOBJS)
+               $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
diff --git a/recipes/python/python-2.6.7/01-use-proper-tools-for-cross-build.patch b/recipes/python/python-2.6.7/01-use-proper-tools-for-cross-build.patch
new file mode 100644 (file)
index 0000000..b7467cc
--- /dev/null
@@ -0,0 +1,116 @@
+# We need to ensure our host tools get run during build, not the freshly
+# built cross-tools (this will not work), so we introduce HOSTPYTHON and HOSTPGEN.
+# Signed-Off: Michael 'Mickey' Lauer <mickey@vanille-media.de>
+
+Index: Python-2.6.6/Makefile.pre.in
+===================================================================
+--- Python-2.6.6.orig/Makefile.pre.in
++++ Python-2.6.6/Makefile.pre.in
+@@ -175,6 +175,7 @@ UNICODE_OBJS=   @UNICODE_OBJS@
+ PYTHON=               python$(EXE)
+ BUILDPYTHON=  python$(BUILDEXE)
++HOSTPYTHON=   $(BUILDPYTHON)
+ # 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
+@@ -205,7 +206,7 @@ GRAMMAR_INPUT=     $(srcdir)/Grammar/Grammar
+ ##########################################################################
+ # Parser
+ PGEN=         Parser/pgen$(EXE)
+-
++HOSTPGEN=     $(PGEN)$(EXE)
+ POBJS=                \
+               Parser/acceler.o \
+               Parser/grammar1.o \
+@@ -394,8 +395,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
+@@ -517,7 +518,7 @@ Modules/python.o: $(srcdir)/Modules/pyth
+ $(GRAMMAR_STAMP): $(PGEN) $(GRAMMAR_INPUT)
+               -@$(INSTALL) -d Include
+-              -$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
++              -$(HOSTPGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
+               touch $(GRAMMAR_STAMP)
+ $(PGEN):      $(PGENOBJS)
+@@ -887,23 +888,23 @@ 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' $(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' $(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):
+@@ -1001,7 +1002,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) \
+Index: Python-2.6.6/setup.py
+===================================================================
+--- Python-2.6.6.orig/setup.py
++++ Python-2.6.6/setup.py
+@@ -322,6 +322,7 @@ class PyBuildExt(build_ext):
+             self.failed.append(ext.name)
+             self.announce('*** WARNING: renaming "%s" since importing it'
+                           ' failed: %s' % (ext.name, why), level=3)
++            return
+             assert not self.inplace
+             basename, tail = os.path.splitext(ext_filename)
+             newname = basename + "_failed" + tail
+@@ -356,8 +357,8 @@ 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_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.
+@@ -456,6 +457,9 @@ class PyBuildExt(build_ext):
+         # XXX Omitted modules: gl, pure, dl, SGI-specific modules
++        lib_dirs = [ os.getenv( "STAGING_LIBDIR" ) ]
++        inc_dirs = [ os.getenv( "STAGING_INCDIR" ) ]
++
+         #
+         # The following modules are all pretty straightforward, and compile
+         # on pretty much any POSIXish platform.
diff --git a/recipes/python/python-2.6.7/02-remove-test-for-cross.patch b/recipes/python/python-2.6.7/02-remove-test-for-cross.patch
new file mode 100644 (file)
index 0000000..b1c0bfb
--- /dev/null
@@ -0,0 +1,106 @@
+# OpenEmbedded prepopulates the autotools site cache, so if this
+# would be using AC_TRY_CACHE, we could patch it in a more sane way
+# Alas, I don't have enough autotalent to do that.
+#
+# Signed-Off: Michael 'Mickey' Lauer <mickey@vanille-media.de>
+Index: Python-2.6.1/configure.in
+===================================================================
+--- Python-2.6.5.orig/configure.in     2010-07-06 04:37:09.000000000 -0700
++++ Python-2.6.5/configure.in  2010-07-06 04:40:18.000000000 -0700
+@@ -2697,50 +2697,6 @@
+   AC_CHECK_LIB(resolv, inet_aton)
+ )
+-# On Tru64, chflags seems to be present, but calling it will
+-# exit Python
+-AC_CACHE_CHECK([for chflags], [ac_cv_have_chflags], [dnl
+-AC_TRY_RUN([[
+-#include <sys/stat.h>
+-#include <unistd.h>
+-int main(int argc, char*argv[])
+-{
+-  if(chflags(argv[0], 0) != 0)
+-    return 1;
+-  return 0;
+-}
+-]], ac_cv_have_chflags=yes,
+-   ac_cv_have_chflags=no,
+-   ac_cv_have_chflags=cross)
+-])
+-if test "$ac_cv_have_chflags" = cross ; then
+-  AC_CHECK_FUNC([chflags], [ac_cv_have_chflags="yes"], [ac_cv_have_chflags="no"])
+-fi
+-if test "$ac_cv_have_chflags" = yes ; then
+-  AC_DEFINE(HAVE_CHFLAGS, 1, Define to 1 if you have the `chflags' function.)
+-fi
+-
+-AC_CACHE_CHECK([for lchflags], [ac_cv_have_lchflags], [dnl
+-AC_TRY_RUN([[
+-#include <sys/stat.h>
+-#include <unistd.h>
+-int main(int argc, char*argv[])
+-{
+-  if(lchflags(argv[0], 0) != 0)
+-    return 1;
+-  return 0;
+-}
+-]], ac_cv_have_lchflags=yes,
+-   ac_cv_have_lchflags=no,
+-   ac_cv_have_lchflags=cross)
+-])
+-if test "$ac_cv_have_lchflags" = cross ; then
+-  AC_CHECK_FUNC([lchflags], [ac_cv_have_lchflags="yes"], [ac_cv_have_lchflags="no"])
+-fi
+-if test "$ac_cv_have_lchflags" = yes ; then
+-  AC_DEFINE(HAVE_LCHFLAGS, 1, Define to 1 if you have the `lchflags' function.)
+-fi
+-
+ dnl Check if system zlib has *Copy() functions
+ dnl
+ dnl On MacOSX the linker will search for dylibs on the entire linker path
+@@ -3844,45 +3800,6 @@
+   AC_MSG_RESULT(no)
+ fi
+-AC_MSG_CHECKING(for %zd printf() format support)
+-AC_TRY_RUN([#include <stdio.h>
+-#include <stddef.h>
+-#include <string.h>
+-
+-#ifdef HAVE_SYS_TYPES_H
+-#include <sys/types.h>
+-#endif
+-
+-#ifdef HAVE_SSIZE_T
+-typedef ssize_t Py_ssize_t;
+-#elif SIZEOF_VOID_P == SIZEOF_LONG
+-typedef long Py_ssize_t;
+-#else
+-typedef int Py_ssize_t;
+-#endif
+-
+-int main()
+-{
+-    char buffer[256];
+-
+-    if(sprintf(buffer, "%zd", (size_t)123) < 0)
+-              return 1;
+-
+-    if (strcmp(buffer, "123"))
+-      return 1;
+-
+-    if (sprintf(buffer, "%zd", (Py_ssize_t)-123) < 0)
+-              return 1;
+-
+-    if (strcmp(buffer, "-123"))
+-      return 1;
+-
+-    return 0;
+-}],
+-[AC_MSG_RESULT(yes)
+- AC_DEFINE(PY_FORMAT_SIZE_T, "z", [Define to printf format modifier for Py_ssize_t])],
+- AC_MSG_RESULT(no))
+-
+ AC_CHECK_TYPE(socklen_t,,
+   AC_DEFINE(socklen_t,int,
+             Define to `int' if <sys/socket.h> does not define.),[
diff --git a/recipes/python/python-2.6.7/03-fix-tkinter-detection.patch b/recipes/python/python-2.6.7/03-fix-tkinter-detection.patch
new file mode 100644 (file)
index 0000000..a1a385a
--- /dev/null
@@ -0,0 +1,40 @@
+# We need to supply STAGING_INCDIR here, otherwise the Tk headers
+# will not be found.
+# Signed-Off: Michael 'Mickey' Lauer <mickey@vanille.de>
+
+Index: Python-2.6.1/setup.py
+===================================================================
+--- Python-2.6.1.orig/setup.py
++++ Python-2.6.1/setup.py
+@@ -1543,7 +1543,7 @@ class PyBuildExt(build_ext):
+                 dotversion = dotversion[:-1] + '.' + dotversion[-1]
+             tcl_include_sub = []
+             tk_include_sub = []
+-            for dir in inc_dirs:
++            for dir in [os.getenv("STAGING_INCDIR")]:
+                 tcl_include_sub += [dir + os.sep + "tcl" + dotversion]
+                 tk_include_sub += [dir + os.sep + "tk" + dotversion]
+             tk_include_sub += tcl_include_sub
+@@ -1562,22 +1562,6 @@ class PyBuildExt(build_ext):
+             if dir not in include_dirs:
+                 include_dirs.append(dir)
+-        # Check for various platform-specific directories
+-        if platform == 'sunos5':
+-            include_dirs.append('/usr/openwin/include')
+-            added_lib_dirs.append('/usr/openwin/lib')
+-        elif os.path.exists('/usr/X11R6/include'):
+-            include_dirs.append('/usr/X11R6/include')
+-            added_lib_dirs.append('/usr/X11R6/lib64')
+-            added_lib_dirs.append('/usr/X11R6/lib')
+-        elif os.path.exists('/usr/X11R5/include'):
+-            include_dirs.append('/usr/X11R5/include')
+-            added_lib_dirs.append('/usr/X11R5/lib')
+-        else:
+-            # Assume default location for X11
+-            include_dirs.append('/usr/X11/include')
+-            added_lib_dirs.append('/usr/X11/lib')
+-
+         # If Cygwin, then verify that X is installed before proceeding
+         if platform == 'cygwin':
+             x11_inc = find_file('X11/Xlib.h', [], include_dirs)
diff --git a/recipes/python/python-2.6.7/04-default-is-optimized.patch b/recipes/python/python-2.6.7/04-default-is-optimized.patch
new file mode 100644 (file)
index 0000000..f99ea4c
--- /dev/null
@@ -0,0 +1,19 @@
+# when compiling for an embedded system, we need every bit of
+# performance we can get. default to optimized with the option
+# of opt-out.
+# 
+# Signed-Off: Michael 'Mickey' Lauer <mickey@vanille-media.de>
+
+Index: Python-2.6.6/Python/compile.c
+===================================================================
+--- Python-2.6.6.orig/Python/compile.c
++++ Python-2.6.6/Python/compile.c
+@@ -32,7 +32,7 @@
+ #include "symtable.h"
+ #include "opcode.h"
+-int Py_OptimizeFlag = 0;
++int Py_OptimizeFlag = 1;
+ #define DEFAULT_BLOCK_SIZE 16
+ #define DEFAULT_BLOCKS 8
diff --git a/recipes/python/python-2.6.7/05-enable-ctypes-cross-build.patch b/recipes/python/python-2.6.7/05-enable-ctypes-cross-build.patch
new file mode 100644 (file)
index 0000000..58b8078
--- /dev/null
@@ -0,0 +1,28 @@
+# CTypes need to know the actual host we are building on.
+# Signed-Off: Michael Dietrich <mdt@emdete.de>
+
+Index: Python-2.6.1/setup.py
+===================================================================
+--- Python-2.6.1.orig/setup.py
++++ Python-2.6.1/setup.py
+@@ -1656,16 +1656,16 @@ class PyBuildExt(build_ext):
+                                          ffi_configfile):
+                 from distutils.dir_util import mkpath
+                 mkpath(ffi_builddir)
+-                config_args = []
++                config_args = ['--host=%s' % os.environ["HOST_SYS"], ]
+                 # Pass empty CFLAGS because we'll just append the resulting
+                 # CFLAGS to Python's; -g or -O2 is to be avoided.
+-                cmd = "cd %s && env CFLAGS='' '%s/configure' %s" \
+-                      % (ffi_builddir, ffi_srcdir, " ".join(config_args))
++                cmd = "(cd %s && autoconf -W cross) && (cd %s && env CFLAGS='' '%s/configure' %s)" \
++                      % (ffi_srcdir, ffi_builddir, ffi_srcdir, " ".join(config_args))
+                 res = os.system(cmd)
+                 if res or not os.path.exists(ffi_configfile):
+-                    print "Failed to configure _ctypes module"
++                    print "Failed to configure _ctypes module (res=%d) or missing conffile=%s" % ( res, ffi_configfile )
+                     return False
+             fficonfig = {}
diff --git a/recipes/python/python-2.6.7/06-ctypes-libffi-fix-configure.patch b/recipes/python/python-2.6.7/06-ctypes-libffi-fix-configure.patch
new file mode 100644 (file)
index 0000000..3773791
--- /dev/null
@@ -0,0 +1,51 @@
+This fixes configure issues with recent autoconf, e.g:
+  autoreconf: Entering directory `Modules/_ctypes/libffi'
+  autoreconf: configure.ac: not using Gettext
+  autoreconf: running: aclocal --force
+  configure.ac:26: error: m4_copy: won't overwrite defined macro: _AC_ARG_VAR_PRECIOUS
+  configure.ac:26: the top level
+
+The problem is still present in python-2.6.5 but fixed in python-svn.
+
+diff -pruN Python-2.6.4.orig//Modules/_ctypes/libffi/configure.ac Python-2.6.4/Modules/_ctypes/libffi/configure.ac
+--- Python-2.6.4.orig//Modules/_ctypes/libffi/configure.ac      2009-04-28 22:01:18.000000000 +0200
++++ Python-2.6.4/Modules/_ctypes/libffi/configure.ac    2010-04-20 22:46:02.000000000 +0200
+@@ -23,6 +23,7 @@ AM_INIT_AUTOMAKE
+ m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS])
+ m4_define([_AC_ARG_VAR_PRECIOUS],[])
+ AC_PROG_CC
++m4_undefine([_AC_ARG_VAR_PRECIOUS])
+ m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
+ AC_SUBST(CFLAGS)
+@@ -366,7 +367,7 @@ test -d src/$TARGETDIR || mkdir src/$TAR
+ AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h)
+-AC_CONFIG_FILES(include/ffi.h)
++AC_CONFIG_FILES(include/ffi.h include/Makefile Makefile)
+ AC_CONFIG_LINKS(include/ffi_common.h:include/ffi_common.h)
+diff -pruN Python-2.6.4.orig//Modules/_ctypes/libffi/Makefile.am Python-2.6.4/Modules/_ctypes/libffi/Makefile.am
+--- Python-2.6.4.orig//Modules/_ctypes/libffi/Makefile.am       2008-03-04 21:09:11.000000000 +0100
++++ Python-2.6.4/Modules/_ctypes/libffi/Makefile.am     2010-04-20 22:54:03.000000000 +0200
+@@ -2,7 +2,7 @@
+ AUTOMAKE_OPTIONS = foreign subdir-objects
+-SUBDIRS = include testsuite man
++SUBDIRS = include
+ EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj configure.host \
+        src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \
+@@ -32,8 +32,6 @@ EXTRA_DIST = LICENSE ChangeLog.v1 Change
+        src/frv/ffi.c src/frv/eabi.S src/frv/ffitarget.h src/dlmalloc.c \
+        libtool-version ChangeLog.libffi
+-info_TEXINFOS = doc/libffi.texi
+-
+ ## ################################################################
+ ##
+
diff --git a/recipes/python/python-2.6.7/10-distutils-fix-swig-parameter.patch b/recipes/python/python-2.6.7/10-distutils-fix-swig-parameter.patch
new file mode 100644 (file)
index 0000000..f5e852a
--- /dev/null
@@ -0,0 +1,16 @@
+# Some versions of SWIG do not use the extension parameter.
+# Make it optional.
+# Signed-Off: Michael 'Mickey' Lauer <mickey@vanille-media.de>
+Index: Python-2.6.1/Lib/distutils/command/build_ext.py
+===================================================================
+--- Python-2.6.1.orig/Lib/distutils/command/build_ext.py
++++ Python-2.6.1/Lib/distutils/command/build_ext.py
+@@ -566,7 +566,7 @@ class build_ext (Command):
+             target_lang=language)
+-    def swig_sources (self, sources, extension):
++    def swig_sources (self, sources, extension=None):
+         """Walk the list of source files in 'sources', looking for SWIG
+         interface (.i) files.  Run SWIG on all that are found, and
diff --git a/recipes/python/python-2.6.7/11-distutils-never-modify-shebang-line.patch b/recipes/python/python-2.6.7/11-distutils-never-modify-shebang-line.patch
new file mode 100644 (file)
index 0000000..8354e26
--- /dev/null
@@ -0,0 +1,18 @@
+# Don't modify the she-bang line for a cross-build.
+# Otherwise it points to our hostpython (which we do not want)
+#
+# Signed-Off: Michael 'Mickey' Lauer <mickey@vanille-media.de>
+
+Index: Python-2.6.1/Lib/distutils/command/build_scripts.py
+===================================================================
+--- Python-2.6.1.orig/Lib/distutils/command/build_scripts.py
++++ Python-2.6.1/Lib/distutils/command/build_scripts.py
+@@ -87,7 +87,7 @@ class build_scripts (Command):
+                     continue
+                 match = first_line_re.match(first_line)
+-                if match:
++                if False: #match:
+                     adjust = 1
+                     post_interp = match.group(1) or ''
diff --git a/recipes/python/python-2.6.7/12-distutils-prefix-is-inside-staging-area.patch b/recipes/python/python-2.6.7/12-distutils-prefix-is-inside-staging-area.patch
new file mode 100644 (file)
index 0000000..bf4366f
--- /dev/null
@@ -0,0 +1,60 @@
+# The proper prefix is inside our staging area.
+# Signed-Off: Michael 'Mickey' Lauer <mickey@vanille-media.de>
+
+Index: Python-2.6.6/Lib/distutils/sysconfig.py
+===================================================================
+--- Python-2.6.6.orig/Lib/distutils/sysconfig.py
++++ Python-2.6.6/Lib/distutils/sysconfig.py
+@@ -19,8 +19,8 @@ import sys
+ from distutils.errors import DistutilsPlatformError
+ # These are needed in a couple of spots, so just compute them once.
+-PREFIX = os.path.normpath(sys.prefix)
+-EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
++PREFIX = os.path.normpath(sys.prefix).replace( os.getenv("BUILD_SYS"), os.getenv("HOST_SYS") )
++EXEC_PREFIX = os.path.normpath(sys.exec_prefix).replace( os.getenv("BUILD_SYS"), os.getenv("HOST_SYS") )
+ # Path to the base directory of the project. On Windows the binary may
+ # live in project/PCBuild9.  If we're dealing with an x64 Windows build,
+@@ -70,7 +70,10 @@ def get_python_inc(plat_specific=0, pref
+     sys.exec_prefix -- i.e., ignore 'plat_specific'.
+     """
+     if prefix is None:
+-        prefix = plat_specific and EXEC_PREFIX or PREFIX
++        if plat_specific:
++            prefix = plat_specific and os.environ['STAGING_INCDIR'].rstrip('include')
++        else:
++            prefix = plat_specific and EXEC_PREFIX or PREFIX
+     if os.name == "posix":
+         if python_build:
+@@ -116,7 +119,10 @@ def get_python_lib(plat_specific=0, stan
+     sys.exec_prefix -- i.e., ignore 'plat_specific'.
+     """
+     if prefix is None:
+-        prefix = plat_specific and EXEC_PREFIX or PREFIX
++        if plat_specific:
++            prefix = plat_specific and os.environ['STAGING_LIBDIR'].rstrip('lib')
++        else:
++            prefix = plat_specific and EXEC_PREFIX or PREFIX
+     if os.name == "posix":
+         libpython = os.path.join(prefix,
+@@ -216,7 +222,7 @@ def get_config_h_filename():
+     else:
+         # The name of the config.h file changed in 2.2
+         config_h = 'pyconfig.h'
+-    return os.path.join(inc_dir, config_h)
++    return os.path.join(inc_dir, config_h).replace( os.getenv("BUILD_SYS"), os.getenv("HOST_SYS") )
+ def get_makefile_filename():
+@@ -225,7 +231,7 @@ def get_makefile_filename():
+         return os.path.join(os.path.dirname(os.path.realpath(sys.executable)),
+                             "Makefile")
+     lib_dir = get_python_lib(plat_specific=1, standard_lib=1)
+-    return os.path.join(lib_dir, "config", "Makefile")
++    return os.path.join(lib_dir, "config", "Makefile").replace( os.getenv("BUILD_SYS"), os.getenv("HOST_SYS") )
+ def parse_config_h(fp, g=None):
diff --git a/recipes/python/python-2.6.7/debug.patch b/recipes/python/python-2.6.7/debug.patch
new file mode 100644 (file)
index 0000000..beb3adc
--- /dev/null
@@ -0,0 +1,27 @@
+Index: Python-2.6.1/Lib/distutils/unixccompiler.py
+===================================================================
+--- Python-2.6.1.orig/Lib/distutils/unixccompiler.py   2009-11-13 16:04:54.000000000 +0000
++++ Python-2.6.1/Lib/distutils/unixccompiler.py        2009-11-13 16:06:27.000000000 +0000
+@@ -300,6 +300,8 @@
+         dylib_f = self.library_filename(lib, lib_type='dylib')
+         static_f = self.library_filename(lib, lib_type='static')
++        print "Looking in %s for %s" % (lib, dirs)
++
+         for dir in dirs:
+             shared = os.path.join(dir, shared_f)
+             dylib = os.path.join(dir, dylib_f)
+@@ -309,10 +311,13 @@
+             # assuming that *all* Unix C compilers do.  And of course I'm
+             # ignoring even GCC's "-static" option.  So sue me.
+             if os.path.exists(dylib):
++                print "Found %s" % (dylib)
+                 return dylib
+             elif os.path.exists(shared):
++                print "Found %s" % (shared)
+                 return shared
+             elif os.path.exists(static):
++                print "Found %s" % (static)
+                 return static
+         # Oops, didn't find it in *any* of 'dirs'
diff --git a/recipes/python/python-2.6.7/fix_pthread_site.patch b/recipes/python/python-2.6.7/fix_pthread_site.patch
new file mode 100644 (file)
index 0000000..d392060
--- /dev/null
@@ -0,0 +1,38 @@
+--- configure.in.org   2008-05-01 12:40:58.000000000 +0200
++++ configure.in       2008-05-01 12:39:39.000000000 +0200
+@@ -998,7 +999,7 @@
+ # so we need to run a program to see whether it really made the
+ # function available.
+ AC_MSG_CHECKING(whether $CC accepts -pthread)
+-AC_CACHE_VAL(ac_cv_thread,
++AC_CACHE_VAL(ac_cv_pthread,
+ [ac_save_cc="$CC"
+ CC="$CC -pthread"
+ AC_TRY_RUN([
+@@ -1023,11 +1024,11 @@
+ # If we have set a CC compiler flag for thread support then
+ # check if it works for CXX, too.
+-ac_cv_cxx_thread=no
+ if test ! -z "$CXX"
+ then
+ AC_MSG_CHECKING(whether $CXX also accepts flags for thread support)
+-ac_save_cxx="$CXX"
++AC_CACHE_VAL(ac_cv_cxx_thread,
++[ac_save_cxx="$CXX"
+ if test "$ac_cv_kpthread" = "yes"
+ then
+@@ -1056,9 +1057,11 @@
+   fi
+   rm -fr conftest*
+ fi
++CXX="$ac_save_cxx"])
+ AC_MSG_RESULT($ac_cv_cxx_thread)
++else
++  ac_cv_cxx_thread=no
+ fi
+-CXX="$ac_save_cxx"
+ dnl # check for ANSI or K&R ("traditional") preprocessor
+ dnl AC_MSG_CHECKING(for C preprocessor type)
diff --git a/recipes/python/python-2.6.7/forced_largefile_support.patch b/recipes/python/python-2.6.7/forced_largefile_support.patch
new file mode 100644 (file)
index 0000000..8ac49ee
--- /dev/null
@@ -0,0 +1,22 @@
+--- Python-2.5.1-org/configure.in      2007-03-12 11:50:51.000000000 +0100
++++ Python-2.5.1/configure.in  2007-07-14 01:29:32.000000000 +0200
+@@ -1223,7 +1223,7 @@
+ }],
+ ac_cv_sizeof_off_t=`cat conftestval`,
+ ac_cv_sizeof_off_t=0,
+-ac_cv_sizeof_off_t=4)
++ac_cv_sizeof_off_t=8)
+ ])
+ AC_MSG_RESULT($ac_cv_sizeof_off_t)
+ AC_DEFINE_UNQUOTED(SIZEOF_OFF_T, $ac_cv_sizeof_off_t,
+--- Python-2.6.7-org/configure 2010-05-25 04:27:03.000000000 +0200
++++ Python-2.6.7/configure     2011-09-09 17:58:21.885690578 +0200
+@@ -6938,7 +6938,7 @@
+   $as_echo_n "(cached) " >&6
+ else
+   if test "$cross_compiling" = yes; then :
+-  ac_cv_sizeof_off_t=4
++  ac_cv_sizeof_off_t=8
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
diff --git a/recipes/python/python-2.6.7/ipv6-cross.patch b/recipes/python/python-2.6.7/ipv6-cross.patch
new file mode 100644 (file)
index 0000000..3d2ac5e
--- /dev/null
@@ -0,0 +1,13 @@
+Index: Python-2.6.5/configure.in
+===================================================================
+--- Python-2.6.5.orig/configure.in     2011-01-15 14:42:42.068656002 -0800
++++ Python-2.6.5/configure.in  2011-01-15 15:18:39.668656002 -0800
+@@ -2951,7 +2951,7 @@
+ buggygetaddrinfo=yes
+ ])
+-if test "$buggygetaddrinfo" = "yes"; then
++if test "$buggygetaddrinfo" = "yes" -a x"$cross_compiling" != "xyes"; then
+       if test "$ipv6" = "yes"; then
+               echo 'Fatal: You must get working getaddrinfo() function.'
+               echo '       or you can specify "--disable-ipv6"'.
diff --git a/recipes/python/python-2.6.7/nohostlibs.patch b/recipes/python/python-2.6.7/nohostlibs.patch
new file mode 100644 (file)
index 0000000..cc9b28c
--- /dev/null
@@ -0,0 +1,57 @@
+Index: Python-2.6.6/setup.py
+===================================================================
+--- Python-2.6.6.orig/setup.py
++++ Python-2.6.6/setup.py
+@@ -356,8 +356,8 @@ 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_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.
+@@ -393,10 +393,10 @@ 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,
++
++        add_dir_to_list(self.compiler.library_dirs,
+                             sysconfig.get_config_var("LIBDIR"))
+-            add_dir_to_list(self.compiler.include_dirs,
++        add_dir_to_list(self.compiler.include_dirs,
+                             sysconfig.get_config_var("INCLUDEDIR"))
+         try:
+@@ -407,11 +407,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 = []
+@@ -661,8 +658,7 @@ class PyBuildExt(build_ext):
+                 pass # Issue 7384: Already linked against curses or tinfo.
+             elif curses_library:
+                 readline_libs.append(curses_library)
+-            elif self.compiler.find_library_file(lib_dirs +
+-                                               ['/usr/lib/termcap'],
++            elif self.compiler.find_library_file(lib_dirs,
+                                                'termcap'):
+                 readline_libs.append('termcap')
+             exts.append( Extension('readline', ['readline.c'],
+-                                   library_dirs=['/usr/lib/termcap'],
+                                    extra_link_args=readline_extra_link_args,
+                                    libraries=readline_libs) )
+         else:
diff --git a/recipes/python/python-2.6.7/python-module-rpath-fix.patch b/recipes/python/python-2.6.7/python-module-rpath-fix.patch
new file mode 100644 (file)
index 0000000..a2c8089
--- /dev/null
@@ -0,0 +1,24 @@
+Index: Python-2.6.5/setup.py
+===================================================================
+--- Python-2.6.5.orig/setup.py
++++ Python-2.6.5/setup.py
+@@ -973,13 +973,18 @@ class PyBuildExt(build_ext):
+                 sqlite_extra_link_args = ('-Wl,-search_paths_first',)
+             else:
+                 sqlite_extra_link_args = ()
++          # Check weather we are cross compiling
++            if (os.environ.get('HOST_SYS') != os.environ.get('BUILD_SYS')):
++                runtime_library_dirs_temp=[os.environ.get('libdir')]
++          else:
++              runtime_library_dirs_temp=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=runtime_library_dirs_temp,
+                                   extra_link_args=sqlite_extra_link_args,
+                                   libraries=["sqlite3",]))
+         else:
diff --git a/recipes/python/python-2.6.7/sitecustomize.py b/recipes/python/python-2.6.7/sitecustomize.py
new file mode 100644 (file)
index 0000000..2739018
--- /dev/null
@@ -0,0 +1,45 @@
+# OpenEmbedded sitecustomize.py (C) 2002-2008 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
+# GPLv2 or later
+# Version: 20081123
+# Features:
+# * set proper default encoding
+# * enable readline completion in the interactive interpreter
+# * load command line history on startup
+# * save command line history on exit 
+
+import os
+
+def __exithandler():
+    try:
+        readline.write_history_file( "%s/.python-history" % os.getenv( "HOME", "/tmp" ) )
+    except IOError:
+        pass
+
+def __registerExitHandler():
+    import atexit
+    atexit.register( __exithandler )
+
+def __enableReadlineSupport():
+    readline.set_history_length( 1000 )
+    readline.parse_and_bind( "tab: complete" )
+    try:
+        readline.read_history_file( "%s/.python-history" % os.getenv( "HOME", "/tmp" ) )
+    except IOError:
+        pass
+
+def __enableDefaultEncoding():
+    import sys
+    try:
+        sys.setdefaultencoding( "utf8" )
+    except LookupError:
+        pass
+
+import sys
+try:
+    import rlcompleter, readline
+except ImportError:
+    pass
+else:
+    __enableDefaultEncoding()
+    __registerExitHandler()
+    __enableReadlineSupport()
diff --git a/recipes/python/python-2.6.7/some_configure_fixes.patch b/recipes/python/python-2.6.7/some_configure_fixes.patch
new file mode 100644 (file)
index 0000000..eced413
--- /dev/null
@@ -0,0 +1,32 @@
+--- configure.in       2008-02-13 20:17:17.000000000 +0100
++++ configure.in       2008-10-21 22:45:31.000000000 +0200
+@@ -3369,27 +3369,9 @@
+   AC_MSG_RESULT(no)
+ )
+-AC_MSG_CHECKING(for /dev/ptmx)
++AC_CHECK_FILE(/dev/ptmx, AC_DEFINE(HAVE_DEV_PTMX, 1, [Define if we have /dev/ptmx.]))
+-if test -r /dev/ptmx
+-then
+-  AC_MSG_RESULT(yes)
+-  AC_DEFINE(HAVE_DEV_PTMX, 1,
+-  [Define if we have /dev/ptmx.])
+-else
+-  AC_MSG_RESULT(no)
+-fi
+-
+-AC_MSG_CHECKING(for /dev/ptc)
+-
+-if test -r /dev/ptc
+-then
+-  AC_MSG_RESULT(yes)
+-  AC_DEFINE(HAVE_DEV_PTC, 1,
+-  [Define if we have /dev/ptc.])
+-else
+-  AC_MSG_RESULT(no)
+-fi
++AC_CHECK_FILE(/dev/ptc, AC_DEFINE(HAVE_DEV_PTC, 1, [Define if we have /dev/ptc.]))
+ case $MACHDEP in
+ darwin)       
diff --git a/recipes/python/python-2.6.7/strict_aliasing_site.patch b/recipes/python/python-2.6.7/strict_aliasing_site.patch
new file mode 100644 (file)
index 0000000..12eee32
--- /dev/null
@@ -0,0 +1,19 @@
+--- configure.in.org   2008-05-01 12:40:58.000000000 +0200
++++ configure.in       2008-05-01 12:39:39.000000000 +0200
+@@ -796,13 +796,14 @@
+     # pointer types. GCC may generate bad code as a result of that,
+     # so use -fno-strict-aliasing if supported.
+     AC_MSG_CHECKING(whether $CC accepts -fno-strict-aliasing)
+-     ac_save_cc="$CC"
++    AC_CACHE_VAL(ac_cv_no_strict_aliasing_ok,
++    [ac_save_cc="$CC"
+      CC="$CC -fno-strict-aliasing"
+      AC_TRY_RUN([int main() { return 0; }],
+      ac_cv_no_strict_aliasing_ok=yes,
+      ac_cv_no_strict_aliasing_ok=no,
+      ac_cv_no_strict_aliasing_ok=no)
+-     CC="$ac_save_cc"
++     CC="$ac_save_cc"])
+     AC_MSG_RESULT($ac_cv_no_strict_aliasing_ok)
+     if test $ac_cv_no_strict_aliasing_ok = yes
+     then
diff --git a/recipes/python/python-native_2.6.7.bb b/recipes/python/python-native_2.6.7.bb
new file mode 100644 (file)
index 0000000..d249391
--- /dev/null
@@ -0,0 +1,34 @@
+require python.inc
+DEPENDS = "openssl-native bzip2-full-native zlib-native readline-native"
+PR = "${INC_PR}.0"
+
+SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.bz2;name=archive \
+           file://00-fix-parallel-make.patch;patch=1 \
+           file://04-default-is-optimized.patch;patch=1 \
+           file://05-enable-ctypes-cross-build.patch;patch=1 \
+           file://06-ctypes-libffi-fix-configure.patch;patch=1 \
+           file://10-distutils-fix-swig-parameter.patch;patch=1 \
+           file://11-distutils-never-modify-shebang-line.patch;patch=1 \
+           file://12-distutils-prefix-is-inside-staging-area.patch;patch=1 \
+           file://debug.patch;patch=1 \
+           file://nohostlibs.patch;patch=1"
+
+S = "${WORKDIR}/Python-${PV}"
+
+inherit native
+
+EXTRA_OECONF_append = '\
+  --enable-unicode=ucs4 \
+'
+
+EXTRA_OEMAKE = '\
+  BUILD_SYS="" \
+  HOST_SYS="" \
+  LIBC="" \
+  STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE} \
+  STAGING_INCDIR=${STAGING_INCDIR_NATIVE} \
+'
+
+do_stage_append() {
+       install -m 0755 Parser/pgen ${STAGING_BINDIR_NATIVE}/pgen
+}
diff --git a/recipes/python/python_2.6.7.bb b/recipes/python/python_2.6.7.bb
new file mode 100644 (file)
index 0000000..98ea759
--- /dev/null
@@ -0,0 +1,145 @@
+require python.inc
+DEPENDS = "python-native db gdbm openssl readline sqlite3 tcl zlib\
+           ${@base_contains('DISTRO_FEATURES', 'tk', 'tk', '', d)}"
+DEPENDS_sharprom = "python-native db readline zlib gdbm openssl"
+DEPENDS_opendreambox = "python-native db gdbm openssl readline sqlite3 zlib"
+# set to .0 on every increase of INC_PR
+PR = "${INC_PR}.0"
+
+SRC_URI = "\
+  http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.bz2 \
+  file://00-fix-parallel-make.patch;patch=1 \
+  file://01-use-proper-tools-for-cross-build.patch;patch=1 \
+  file://02-remove-test-for-cross.patch;patch=1 \
+  file://03-fix-tkinter-detection.patch;patch=1 \
+  file://04-default-is-optimized.patch;patch=1 \
+  file://05-enable-ctypes-cross-build.patch;patch=1 \
+  file://06-ctypes-libffi-fix-configure.patch;patch=1 \
+  file://ipv6-cross.patch;patch=1 \
+  file://python-module-rpath-fix.patch;patch=1 \
+  file://sitecustomize.py \
+"
+
+SRC_URI_append_opendreambox = " \
+  file://some_configure_fixes.patch;patch=1;pnum=0 \
+  file://strict_aliasing_site.patch;patch=0;pnum=0 \
+  file://fix_pthread_site.patch;patch=0;pnum=0 \
+  file://forced_largefile_support.patch;patch=1;pnum=1"
+
+S = "${WORKDIR}/Python-${PV}"
+
+inherit autotools
+
+# The 3 lines below are copied from the libffi recipe, ctypes ships its own copy of the libffi sources
+#Somehow gcc doesn't set __SOFTFP__ when passing -mfloatabi=softp :(
+TARGET_CC_ARCH_append_armv6 = " -D__SOFTFP__"
+TARGET_CC_ARCH_append_armv7a = " -D__SOFTFP__"
+
+do_configure_prepend() {
+       rm -R ${S}/Lib/plat-linux3 || /bin/true
+       ln -sf ${S}/Lib/plat-linux2 ${S}/Lib/plat-linux3
+       autoreconf -Wcross --verbose --install --force --exclude=autopoint Modules/_ctypes/libffi || oenote "_ctypes failed to autoreconf"
+}
+
+#
+# Copy config.h and an appropriate Makefile for distutils.sysconfig,
+# which laters uses the information out of these to compile extensions
+#
+do_compile_prepend() {
+       install -d ${STAGING_INCDIR}/python${PYTHON_MAJMIN}/
+       install -d ${STAGING_LIBDIR}/python${PYTHON_MAJMIN}/config/
+       install -m 0644 pyconfig.h ${STAGING_INCDIR}/python${PYTHON_MAJMIN}/
+       install -m 0644 Makefile Makefile.orig
+       install -m 0644 Makefile Makefile.backup
+       sed -e 's,${includedir},${STAGING_INCDIR},' < Makefile.backup > Makefile
+       install -m 0644 Makefile Makefile.backup
+       sed -e 's,${libdir},${STAGING_LIBDIR},' < Makefile.backup > Makefile
+       install -m 0644 Makefile ${STAGING_LIBDIR}/python${PYTHON_MAJMIN}/config/
+}
+
+do_compile() {
+       oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/pgen \
+               HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python \
+               STAGING_LIBDIR=${STAGING_LIBDIR} \
+               STAGING_INCDIR=${STAGING_INCDIR} \
+               BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
+               OPT="${CFLAGS}" libpython${PYTHON_MAJMIN}.so
+
+       oe_libinstall -so libpython${PYTHON_MAJMIN} ${STAGING_LIBDIR}
+
+       oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/pgen \
+               HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python \
+               STAGING_LIBDIR=${STAGING_LIBDIR} \
+               STAGING_INCDIR=${STAGING_INCDIR} \
+               BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
+               RUNSHARED= OPT="${CFLAGS}"
+}
+
+do_stage() {
+       install -m 0644 Include/*.h ${STAGING_INCDIR}/python${PYTHON_MAJMIN}/
+       oe_libinstall -a -so libpython${PYTHON_MAJMIN} ${STAGING_LIBDIR}
+}
+
+do_install() {
+       install -m 0644 Makefile.orig Makefile
+       
+       oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/pgen \
+               HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python \
+               STAGING_LIBDIR=${STAGING_LIBDIR} \
+               STAGING_INCDIR=${STAGING_INCDIR} \
+               BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
+               DESTDIR=${D} LIBDIR=${libdir} RUNSHARED= install
+
+       install -m 0644 ${WORKDIR}/sitecustomize.py ${D}/${libdir}/python${PYTHON_MAJMIN}
+
+       # remove hardcoded ccache, see http://bugs.openembedded.net/show_bug.cgi?id=4144
+       sed -i -e s,ccache,'$(CCACHE)', ${D}/${libdir}/python${PYTHON_MAJMIN}/config/Makefile
+}
+
+do_install_append() {
+       # remove unecessary files from python-distutils' packages
+       rm ${D}/${libdir}/python${PYTHON_MAJMIN}/config/libpython2.6.a
+       rm ${D}/${libdir}/python${PYTHON_MAJMIN}/distutils/command/win*
+}
+
+require python-${PYTHON_MAJMIN}-manifest.inc
+
+# manual dependency additions
+RPROVIDES_${PN}-core = "${PN}"
+RRECOMMENDS_${PN}-core = "${PN}-readline"
+RRECOMMENDS_${PN}-crypt = "openssl"
+
+# add sitecustomize
+FILES_${PN}-core += "${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py"
+# ship 2to3
+FILES_${PN}-core += "${bindir}/2to3"
+
+# package libpython2
+PACKAGES =+ "lib${PN}2"
+FILES_lib${PN}2 = "${libdir}/libpython*.so.*"
+
+# additional stuff -dev
+
+FILES_${PN}-dev += "\
+  ${includedir} \
+  ${libdir}/lib*${SOLIBSDEV} \
+  ${libdir}/*.la \
+  ${libdir}/*.a \
+  ${libdir}/*.o \
+  ${libdir}/pkgconfig \
+  ${base_libdir}/*.a \
+  ${base_libdir}/*.o \
+  ${datadir}/aclocal \
+  ${datadir}/pkgconfig \
+"
+
+# catch debug extensions (isn't that already in python-core-dbg?)
+FILES_${PN}-dbg += "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/.debug"
+
+# catch all the rest (unsorted)
+PACKAGES += "${PN}-misc"
+FILES_${PN}-misc = "${libdir}/python${PYTHON_MAJMIN}"
+
+# catch manpage
+PACKAGES += "${PN}-man"
+FILES_${PN}-man = "${datadir}/man"