Skip to contentSkip to conversation

Python 2.6.4 and cython 0.12 - please test/ack

PATCH In review Martin Jansa 2 participants 5 messages Jan 28, 2010 – Feb 1, 2010

lore
Share & tools
lore
#0 lore raw

Hi,

with last issues with python bindings for E libs I tired newer python and cython. E libs issue was found somewhere else, so it wasn't old python/cython fault, but as I already have those upgrades, here it is:

All older patches apply cleanly, no new breakage found with build test, few python apps tested on arm4t, but cannot test them all properly myself, please try it and report possible findings.

If nothing found in a week, can I push it?

Tested on build from scratch of shr-image (om-gta02) + building task-python-everything.

Few formal fixes already pushed now there is failing:

ERROR: '/home/projects/OE/dev/recipes/fam/fam_2.7.0.bb' failed
http://tinderbox.openembedded.net/packages/447591/ - missing iostream.h - not python related

ERROR: '/home/projects/OE/dev/recipes/python/python-epsilon_svn.bb' failed
http://tinderbox.openembedded.net/packages/447594/ - this is new with newer cython
- but epsilon is deprecated by emthumb and not supported by E devs

ERROR: '/home/projects/OE/dev/recipes/python/python-pyqt_4.4.3.bb' failed
http://tinderbox.openembedded.net/packages/447592/ - doesn't look like new python fault

ERROR: '/home/projects/OE/dev/recipes/dtnrg/dtn_2.5.0.bb' failed
http://tinderbox.openembedded.net/packages/447595/ - gcc-4.4 needs patch

#1 lore raw

PATCH 1/2 python: add version 2.6.4

---
 .../00-fix-bindir-libdir-for-cross.patch           |   20 +++
 .../01-use-proper-tools-for-cross-build.patch      |  116 ++++++++++++++++
 .../python-2.6.4/02-remove-test-for-cross.patch    |   94 +++++++++++++
 .../python-2.6.4/03-fix-tkinter-detection.patch    |   40 ++++++
 .../python-2.6.4/04-default-is-optimized.patch     |   52 ++++++++
 .../05-enable-ctypes-cross-build.patch             |   28 ++++
 .../python-2.6.4/99-ignore-optimization-flag.patch |   19 +++
 recipes/python/python-2.6.4/sitecustomize.py       |   45 +++++++
 .../00-fix-bindir-libdir-for-cross.patch           |   20 +++
 .../04-default-is-optimized.patch                  |   18 +++
 .../10-distutils-fix-swig-parameter.patch          |   16 +++
 .../11-distutils-never-modify-shebang-line.patch   |   18 +++
 ...2-distutils-prefix-is-inside-staging-area.patch |   60 +++++++++
 recipes/python/python-native-2.6.4/debug.patch     |   27 ++++
 .../python/python-native-2.6.4/nohostlibs.patch    |   53 ++++++++
 .../python/python-native-2.6.4/sitecustomize.py    |   45 +++++++
 recipes/python/python-native_2.6.4.bb              |   33 +++++
 recipes/python/python_2.6.4.bb                     |  139 ++++++++++++++++++++
 18 files changed, 843 insertions(+), 0 deletions(-)
 create mode 100644 recipes/python/python-2.6.4/00-fix-bindir-libdir-for-cross.patch
 create mode 100644 recipes/python/python-2.6.4/01-use-proper-tools-for-cross-build.patch
 create mode 100644 recipes/python/python-2.6.4/02-remove-test-for-cross.patch
 create mode 100644 recipes/python/python-2.6.4/03-fix-tkinter-detection.patch
 create mode 100644 recipes/python/python-2.6.4/04-default-is-optimized.patch
 create mode 100644 recipes/python/python-2.6.4/05-enable-ctypes-cross-build.patch
 create mode 100644 recipes/python/python-2.6.4/99-ignore-optimization-flag.patch
 create mode 100644 recipes/python/python-2.6.4/sitecustomize.py
 create mode 100644 recipes/python/python-native-2.6.4/00-fix-bindir-libdir-for-cross.patch
 create mode 100644 recipes/python/python-native-2.6.4/04-default-is-optimized.patch
 create mode 100644 recipes/python/python-native-2.6.4/10-distutils-fix-swig-parameter.patch
 create mode 100644 recipes/python/python-native-2.6.4/11-distutils-never-modify-shebang-line.patch
 create mode 100644 recipes/python/python-native-2.6.4/12-distutils-prefix-is-inside-staging-area.patch
 create mode 100644 recipes/python/python-native-2.6.4/debug.patch
 create mode 100644 recipes/python/python-native-2.6.4/nohostlibs.patch
 create mode 100644 recipes/python/python-native-2.6.4/sitecustomize.py
 create mode 100644 recipes/python/python-native_2.6.4.bb
 create mode 100644 recipes/python/python_2.6.4.bb
recipes/python/python-2.6.4/00-fix-bindir-libdir-for-cross.patch new file +20 -0
new file mode 100644
index 0000000..2559e3a
@@ -0,0 +1,20 @@
+# $(exec_prefix) points to the wrong directory, when installing
+# a cross-build. @bindir@ and @libdir@ works better and doesn't
+# affect the native build.
+# Signed-Off: Michael 'Mickey' Lauer <[email protected]>
+
+Index: Python-2.6.1/Makefile.pre.in
+===================================================================
+--- Python-2.6.1.orig/Makefile.pre.in
++++ Python-2.6.1/Makefile.pre.in
+@@ -86,8 +86,8 @@ exec_prefix=	@exec_prefix@
+ datarootdir=    @datarootdir@
+ 
+ # Expanded directories
+-BINDIR=		$(exec_prefix)/bin
+-LIBDIR=		$(exec_prefix)/lib
++BINDIR=		@bindir@
++LIBDIR=		@libdir@
+ MANDIR=		@mandir@
+ INCLUDEDIR=	@includedir@
+ CONFINCLUDEDIR=	$(exec_prefix)/include
recipes/python/python-2.6.4/01-use-proper-tools-for-cross-build.patch new file +116 -0

116 lines not on this page · raw message

recipes/python/python-2.6.4/02-remove-test-for-cross.patch new file +94 -0

94 lines not on this page · raw message

recipes/python/python-2.6.4/03-fix-tkinter-detection.patch new file +40 -0
new file mode 100644
index 0000000..a1a385a
@@ -0,0 +1,40 @@
+# We need to supply STAGING_INCDIR here, otherwise the Tk headers
+# will not be found.
+# Signed-Off: Michael 'Mickey' Lauer <[email protected]>
+
+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)
recipes/python/python-2.6.4/04-default-is-optimized.patch new file +52 -0

52 lines not on this page · raw message

recipes/python/python-2.6.4/05-enable-ctypes-cross-build.patch new file +28 -0
new file mode 100644
index 0000000..58b8078
@@ -0,0 +1,28 @@
+# CTypes need to know the actual host we are building on.
+# Signed-Off: Michael Dietrich <[email protected]>
+
+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 = {}
recipes/python/python-2.6.4/99-ignore-optimization-flag.patch new file +19 -0
new file mode 100644
index 0000000..02dc44c
@@ -0,0 +1,19 @@
+# Reinstate the empty -O option to fix weird mixing of native and target
+# binaries and libraries with LD_LIBRARY_PATH when host==target
+#
+# Signed-off-by: Denys Dmytriyenko <[email protected]>
+
+Index: Python-2.6.1/Modules/main.c
+===================================================================
+--- Python-2.6.1-orig/Modules/main.c
++++ Python-2.6.1/Modules/main.c
+@@ -352,6 +352,9 @@ Py_Main(int argc, char **argv)
+ 
+ 		/* case 'J': reserved for Jython */
+ 
++		case 'O': /* ignore it */
++			break;
++
+ 		case 'N':
+ 			Py_OptimizeFlag=0;
+ 			break;
recipes/python/python-2.6.4/sitecustomize.py new file +45 -0

45 lines not on this page · raw message

recipes/python/python-native-2.6.4/00-fix-bindir-libdir-for-cross.patch new file +20 -0
new file mode 100644
index 0000000..2559e3a
@@ -0,0 +1,20 @@
+# $(exec_prefix) points to the wrong directory, when installing
+# a cross-build. @bindir@ and @libdir@ works better and doesn't
+# affect the native build.
+# Signed-Off: Michael 'Mickey' Lauer <[email protected]>
+
+Index: Python-2.6.1/Makefile.pre.in
+===================================================================
+--- Python-2.6.1.orig/Makefile.pre.in
++++ Python-2.6.1/Makefile.pre.in
+@@ -86,8 +86,8 @@ exec_prefix=	@exec_prefix@
+ datarootdir=    @datarootdir@
+ 
+ # Expanded directories
+-BINDIR=		$(exec_prefix)/bin
+-LIBDIR=		$(exec_prefix)/lib
++BINDIR=		@bindir@
++LIBDIR=		@libdir@
+ MANDIR=		@mandir@
+ INCLUDEDIR=	@includedir@
+ CONFINCLUDEDIR=	$(exec_prefix)/include
recipes/python/python-native-2.6.4/04-default-is-optimized.patch new file +18 -0
new file mode 100644
index 0000000..5131e0b
@@ -0,0 +1,18 @@
+# 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 <[email protected]>
+
+Index: Python-2.6.1/Python/compile.c
+===================================================================
+--- Python-2.6.1.orig/Python/compile.c
++++ Python-2.6.1/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
recipes/python/python-native-2.6.4/10-distutils-fix-swig-parameter.patch new file +16 -0
new file mode 100644
index 0000000..f5e852a
@@ -0,0 +1,16 @@
+# Some versions of SWIG do not use the extension parameter.
+# Make it optional.
+# Signed-Off: Michael 'Mickey' Lauer <[email protected]>
+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
recipes/python/python-native-2.6.4/11-distutils-never-modify-shebang-line.patch new file +18 -0
new file mode 100644
index 0000000..8354e26
@@ -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 <[email protected]>
+
+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 ''
+ 
recipes/python/python-native-2.6.4/12-distutils-prefix-is-inside-staging-area.patch new file +60 -0

60 lines not on this page · raw message

recipes/python/python-native-2.6.4/debug.patch new file +27 -0
new file mode 100644
index 0000000..beb3adc
@@ -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'
recipes/python/python-native-2.6.4/nohostlibs.patch new file +53 -0

53 lines not on this page · raw message

recipes/python/python-native-2.6.4/sitecustomize.py new file +45 -0

45 lines not on this page · raw message

recipes/python/python-native_2.6.4.bb new file +33 -0
new file mode 100644
index 0000000..ca65057
@@ -0,0 +1,33 @@
+require python.inc
+DEPENDS = "openssl-native bzip2-full-native zlib-native readline-native"
+PR = "${INC_PR}.2"
+
+SRC_URI = "\
+  http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.bz2;name=archive \
+  file://00-fix-bindir-libdir-for-cross.patch;patch=1 \
+  file://04-default-is-optimized.patch;patch=1 \
+  file://05-enable-ctypes-cross-build.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}"
+
+SRC_URI[archive.md5sum] = "fee5408634a54e721a93531aba37f8c1"
+SRC_URI[archive.sha256sum] = "dad8d5575144a210d5cc4fdbc40b8a26386e9cdb1ef58941bec0be02c7cb9d89"
+
+inherit native
+
+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
+}
recipes/python/python_2.6.4.bb new file +139 -0

139 lines not on this page · raw message

Signature · 1 line
1.6.6.1
#2 lore raw

PATCH 2/2 python-cython: add version 0.12

---
 recipes/python/python-cython-native_0.12.bb |   10 ++++++++++
 recipes/python/python-cython_0.12.bb        |   16 ++++++++++++++++
 2 files changed, 26 insertions(+), 0 deletions(-)
 create mode 100644 recipes/python/python-cython-native_0.12.bb
 create mode 100644 recipes/python/python-cython_0.12.bb
recipes/python/python-cython-native_0.12.bb new file +10 -0
new file mode 100644
index 0000000..95886ae
@@ -0,0 +1,10 @@
+require python-cython_${PV}.bb
+inherit native
+DEPENDS = "python-native"
+RDEPENDS = ""
+
+do_stage() {
+    PYTHONPATH=${STAGING_BINDIR} BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
+    STAGING_LIBDIR=${STAGING_LIBDIR} STAGING_INCDIR=${STAGING_INCDIR} \
+        ${STAGING_BINDIR}/python setup.py install --prefix=${STAGING_BINDIR}/.. --install-data=${STAGING_DATADIR}
+}
recipes/python/python-cython_0.12.bb new file +16 -0
new file mode 100644
index 0000000..846be47
@@ -0,0 +1,16 @@
+DESCRIPTION = "Cython is a language specially designed for writing Python extension modules. \
+It's designed to bridge the gap between the nice, high-level, easy-to-use world of Python \
+and the messy, low-level world of C."
+SECTION = "devel/python"
+PRIORITY = "optional"
+LICENSE = "GPL"
+SRCNAME = "Cython"
+PR = "ml0"
+
+SRC_URI = "http://www.cython.org/release/${SRCNAME}-${PV}.tar.gz;name=archive"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+SRC_URI[archive.md5sum] = "f73ad2258115c92ce982d34d27580076"
+SRC_URI[archive.sha256sum] = "90d611aeff8d017a5ccca3b1e02ec8d6dd0efc7dfd29806f721bc718d3774ea3"
+
+inherit distutils
Signature · 1 line
1.6.6.1
Acked-by on v1 2/2
#3 lore raw

Re: [PATCH 2/2] python-cython: add version 0.12

Am 28.01.2010 um 23:51 schrieb Martin Jansa:

Quoted 54 lines

---

recipes/python/python-cython-native_0.12.bb |   10 ++++++++++
recipes/python/python-cython_0.12.bb        |   16 ++++++++++++++++
2 files changed, 26 insertions(+), 0 deletions(-)

create mode 100644 recipes/python/python-cython-native_0.12.bb create mode 100644 recipes/python/python-cython_0.12.bb

recipes/python/python-cython-native_0.12.bb new file +10 -0
new file mode 100644
index 0000000..95886ae
@@ -0,0 +1,10 @@
+require python-cython_${PV}.bb
+inherit native
+DEPENDS = "python-native"
+RDEPENDS = ""
+
+do_stage() {
+    PYTHONPATH=${STAGING_BINDIR} BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
+    STAGING_LIBDIR=${STAGING_LIBDIR} STAGING_INCDIR=${STAGING_INCDIR} \
+        ${STAGING_BINDIR}/python setup.py install --prefix=${STAGING_BINDIR}/.. --install-data=${STAGING_DATADIR}
+}
recipes/python/python-cython_0.12.bb new file +16 -0
new file mode 100644
index 0000000..846be47
@@ -0,0 +1,16 @@
+DESCRIPTION = "Cython is a language specially designed for writing Python extension modules. \
+It's designed to bridge the gap between the nice, high-level, easy-to-use world of Python \
+and the messy, low-level world of C."
+SECTION = "devel/python"
+PRIORITY = "optional"
+LICENSE = "GPL"
+SRCNAME = "Cython"
+PR = "ml0"
+
+SRC_URI = "http://www.cython.org/release/${SRCNAME}-${PV}.tar.gz;name=archive"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+SRC_URI[archive.md5sum] = "f73ad2258115c92ce982d34d27580076"
+SRC_URI[archive.sha256sum] = "90d611aeff8d017a5ccca3b1e02ec8d6dd0efc7dfd29806f721bc718d3774ea3"
+
+inherit distutils
Signature · 7 lines
1.6.6.1


_______________________________________________
Openembedded-devel mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
Acked-by on v1 1/2
#4 lore raw

Re: [PATCH 1/2] python: add version 2.6.4

In reply to Martin Jansa

Great work, thanks!

Am 28.01.2010 um 23:51 schrieb Martin Jansa:

Quoted 999 lines

---

.../00-fix-bindir-libdir-for-cross.patch           |   20 +++
.../01-use-proper-tools-for-cross-build.patch      |  116 ++++++++++++++++
.../python-2.6.4/02-remove-test-for-cross.patch    |   94 +++++++++++++
.../python-2.6.4/03-fix-tkinter-detection.patch    |   40 ++++++
.../python-2.6.4/04-default-is-optimized.patch     |   52 ++++++++
.../05-enable-ctypes-cross-build.patch             |   28 ++++
.../python-2.6.4/99-ignore-optimization-flag.patch |   19 +++
recipes/python/python-2.6.4/sitecustomize.py       |   45 +++++++
.../00-fix-bindir-libdir-for-cross.patch           |   20 +++
.../04-default-is-optimized.patch                  |   18 +++
.../10-distutils-fix-swig-parameter.patch          |   16 +++
.../11-distutils-never-modify-shebang-line.patch   |   18 +++
...2-distutils-prefix-is-inside-staging-area.patch |   60 +++++++++
recipes/python/python-native-2.6.4/debug.patch     |   27 ++++
.../python/python-native-2.6.4/nohostlibs.patch    |   53 ++++++++
.../python/python-native-2.6.4/sitecustomize.py    |   45 +++++++
recipes/python/python-native_2.6.4.bb              |   33 +++++
recipes/python/python_2.6.4.bb                     |  139 ++++++++++++++++++++
18 files changed, 843 insertions(+), 0 deletions(-)

create mode 100644 recipes/python/python-2.6.4/00-fix-bindir-libdir-for-cross.patch create mode 100644 recipes/python/python-2.6.4/01-use-proper-tools-for-cross-build.patch create mode 100644 recipes/python/python-2.6.4/02-remove-test-for-cross.patch
create mode 100644 recipes/python/python-2.6.4/03-fix-tkinter-detection.patch
create mode 100644 recipes/python/python-2.6.4/04-default-is-optimized.patch
create mode 100644 recipes/python/python-2.6.4/05-enable-ctypes-cross-build.patch create mode 100644 recipes/python/python-2.6.4/99-ignore-optimization-flag.patch create mode 100644 recipes/python/python-2.6.4/sitecustomize.py
create mode 100644 recipes/python/python-native-2.6.4/00-fix-bindir-libdir-for-cross.patch create mode 100644 recipes/python/python-native-2.6.4/04-default-is-optimized.patch create mode 100644 recipes/python/python-native-2.6.4/10-distutils-fix-swig-parameter.patch create mode 100644 recipes/python/python-native-2.6.4/11-distutils-never-modify-shebang-line.patch create mode 100644 recipes/python/python-native-2.6.4/12-distutils-prefix-is-inside-staging-area.patch create mode 100644 recipes/python/python-native-2.6.4/debug.patch
create mode 100644 recipes/python/python-native-2.6.4/nohostlibs.patch
create mode 100644 recipes/python/python-native-2.6.4/sitecustomize.py
create mode 100644 recipes/python/python-native_2.6.4.bb
create mode 100644 recipes/python/python_2.6.4.bb

recipes/python/python-2.6.4/00-fix-bindir-libdir-for-cross.patch new file +20 -0
new file mode 100644
index 0000000..2559e3a
@@ -0,0 +1,20 @@
+# $(exec_prefix) points to the wrong directory, when installing
+# a cross-build. @bindir@ and @libdir@ works better and doesn't
+# affect the native build.
+# Signed-Off: Michael 'Mickey' Lauer <[email protected]>
+
+Index: Python-2.6.1/Makefile.pre.in
+===================================================================
+--- Python-2.6.1.orig/Makefile.pre.in
++++ Python-2.6.1/Makefile.pre.in
+@@ -86,8 +86,8 @@ exec_prefix=	@exec_prefix@
+ datarootdir=    @datarootdir@
+ 
+ # Expanded directories
+-BINDIR=		$(exec_prefix)/bin
+-LIBDIR=		$(exec_prefix)/lib
++BINDIR=		@bindir@
++LIBDIR=		@libdir@
+ MANDIR=		@mandir@
+ INCLUDEDIR=	@includedir@
+ CONFINCLUDEDIR=	$(exec_prefix)/include
recipes/python/python-2.6.4/01-use-proper-tools-for-cross-build.patch new file +116 -0
new file mode 100644
index 0000000..e89faa4
@@ -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 <[email protected]>
+
+Index: Python-2.6.1/Makefile.pre.in
+===================================================================
+--- Python-2.6.1.orig/Makefile.pre.in
++++ Python-2.6.1/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)' 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
+ 
+ # Build static library
+@@ -513,7 +514,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)
+@@ -879,23 +880,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):
+@@ -993,7 +994,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.1/setup.py
+===================================================================
+--- Python-2.6.1.orig/setup.py
++++ Python-2.6.1/setup.py
+@@ -276,6 +276,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
+@@ -310,8 +311,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.
+@@ -410,6 +411,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.
recipes/python/python-2.6.4/02-remove-test-for-cross.patch new file +94 -0
new file mode 100644
index 0000000..48386ea
@@ -0,0 +1,94 @@
+# 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 <[email protected]>
+Index: Python-2.6.1/configure.in
+===================================================================
+--- Python-2.6.1.orig/configure.in
++++ Python-2.6.1/configure.in
+@@ -2556,38 +2556,6 @@ AC_CHECK_LIB(c, inet_aton, [$ac_cv_prog_
+   AC_CHECK_LIB(resolv, inet_aton)
+ )
+ 
+-# On Tru64, chflags seems to be present, but calling it will
+-# exit Python
+-AC_MSG_CHECKING(for chflags)
+-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_DEFINE(HAVE_CHFLAGS, 1, Define to 1 if you have the `chflags' function.)
+-  AC_MSG_RESULT(yes),
+-  AC_MSG_RESULT(no)
+-)
+-
+-AC_MSG_CHECKING(for lchflags)
+-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_DEFINE(HAVE_LCHFLAGS, 1, Define to 1 if you have the `lchflags' function.)
+-  AC_MSG_RESULT(yes),
+-  AC_MSG_RESULT(no)
+-)
+-
+ dnl Check if system zlib has *Copy() functions
+ dnl
+ dnl On MacOSX the linker will search for dylibs on the entire linker path
+@@ -3649,45 +3617,6 @@ else
+   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.),[
recipes/python/python-2.6.4/03-fix-tkinter-detection.patch new file +40 -0
new file mode 100644
index 0000000..a1a385a
@@ -0,0 +1,40 @@
+# We need to supply STAGING_INCDIR here, otherwise the Tk headers
+# will not be found.
+# Signed-Off: Michael 'Mickey' Lauer <[email protected]>
+
+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)
recipes/python/python-2.6.4/04-default-is-optimized.patch new file +52 -0
new file mode 100644
index 0000000..805f4f6
@@ -0,0 +1,52 @@
+# 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 <[email protected]>
+
+Index: Python-2.6.1/Python/compile.c
+===================================================================
+--- Python-2.6.1.orig/Python/compile.c
++++ Python-2.6.1/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
+Index: Python-2.6.1/Modules/main.c
+===================================================================
+--- Python-2.6.1.orig/Modules/main.c
++++ Python-2.6.1/Modules/main.c
+@@ -40,7 +40,7 @@ static char **orig_argv;
+ static int  orig_argc;
+ 
+ /* command line options */
+-#define BASE_OPTS "3bBc:dEhiJm:OQ:sStuUvVW:xX?"
++#define BASE_OPTS "3bBc:dEhiJm:NOQ:sStuUvVW:xX?"
+ 
+ #ifndef RISCOS
+ #define PROGRAM_OPTS BASE_OPTS
+@@ -69,8 +69,7 @@ Options and arguments (and corresponding
+ static char *usage_2 = "\
+          if stdin does not appear to be a terminal; also PYTHONINSPECT=x\n\
+ -m mod : run library module as a script (terminates option list)\n\
+--O     : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x\n\
+--OO    : remove doc-strings in addition to the -O optimizations\n\
++-N     : do NOT optimize generated bytecode\n\
+ -Q arg : division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew\n\
+ -s     : don't add user site directory to sys.path; also PYTHONNOUSERSITE\n\
+ -S     : don't imply 'import site' on initialization\n\
+@@ -353,8 +352,8 @@ Py_Main(int argc, char **argv)
+ 
+ 		/* case 'J': reserved for Jython */
+ 
+-		case 'O':
+-			Py_OptimizeFlag++;
++		case 'N':
++			Py_OptimizeFlag=0;
+ 			break;
+ 
+ 		case 'B':
recipes/python/python-2.6.4/05-enable-ctypes-cross-build.patch new file +28 -0
new file mode 100644
index 0000000..58b8078
@@ -0,0 +1,28 @@
+# CTypes need to know the actual host we are building on.
+# Signed-Off: Michael Dietrich <[email protected]>
+
+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 = {}
recipes/python/python-2.6.4/99-ignore-optimization-flag.patch new file +19 -0
new file mode 100644
index 0000000..02dc44c
@@ -0,0 +1,19 @@
+# Reinstate the empty -O option to fix weird mixing of native and target
+# binaries and libraries with LD_LIBRARY_PATH when host==target
+#
+# Signed-off-by: Denys Dmytriyenko <[email protected]>
+
+Index: Python-2.6.1/Modules/main.c
+===================================================================
+--- Python-2.6.1-orig/Modules/main.c
++++ Python-2.6.1/Modules/main.c
+@@ -352,6 +352,9 @@ Py_Main(int argc, char **argv)
+ 
+ 		/* case 'J': reserved for Jython */
+ 
++		case 'O': /* ignore it */
++			break;
++
+ 		case 'N':
+ 			Py_OptimizeFlag=0;
+ 			break;
recipes/python/python-2.6.4/sitecustomize.py new file +45 -0
new file mode 100644
index 0000000..2739018
@@ -0,0 +1,45 @@
+# OpenEmbedded sitecustomize.py (C) 2002-2008 Michael 'Mickey' Lauer <[email protected]>
+# 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()
recipes/python/python-native-2.6.4/00-fix-bindir-libdir-for-cross.patch new file +20 -0
new file mode 100644
index 0000000..2559e3a
@@ -0,0 +1,20 @@
+# $(exec_prefix) points to the wrong directory, when installing
+# a cross-build. @bindir@ and @libdir@ works better and doesn't
+# affect the native build.
+# Signed-Off: Michael 'Mickey' Lauer <[email protected]>
+
+Index: Python-2.6.1/Makefile.pre.in
+===================================================================
+--- Python-2.6.1.orig/Makefile.pre.in
++++ Python-2.6.1/Makefile.pre.in
+@@ -86,8 +86,8 @@ exec_prefix=	@exec_prefix@
+ datarootdir=    @datarootdir@
+ 
+ # Expanded directories
+-BINDIR=		$(exec_prefix)/bin
+-LIBDIR=		$(exec_prefix)/lib
++BINDIR=		@bindir@
++LIBDIR=		@libdir@
+ MANDIR=		@mandir@
+ INCLUDEDIR=	@includedir@
+ CONFINCLUDEDIR=	$(exec_prefix)/include
recipes/python/python-native-2.6.4/04-default-is-optimized.patch new file +18 -0
new file mode 100644
index 0000000..5131e0b
@@ -0,0 +1,18 @@
+# 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 <[email protected]>
+
+Index: Python-2.6.1/Python/compile.c
+===================================================================
+--- Python-2.6.1.orig/Python/compile.c
++++ Python-2.6.1/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
recipes/python/python-native-2.6.4/10-distutils-fix-swig-parameter.patch new file +16 -0
new file mode 100644
index 0000000..f5e852a
@@ -0,0 +1,16 @@
+# Some versions of SWIG do not use the extension parameter.
+# Make it optional.
+# Signed-Off: Michael 'Mickey' Lauer <[email protected]>
+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
recipes/python/python-native-2.6.4/11-distutils-never-modify-shebang-line.patch new file +18 -0
new file mode 100644
index 0000000..8354e26
@@ -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 <[email protected]>
+
+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 ''
+ 
recipes/python/python-native-2.6.4/12-distutils-prefix-is-inside-staging-area.patch new file +60 -0
new file mode 100644
index 0000000..aa43936
@@ -0,0 +1,60 @@
+# The proper prefix is inside our staging area.
+# Signed-Off: Michael 'Mickey' Lauer <[email protected]>
+
+Index: Python-2.6.1/Lib/distutils/sysconfig.py
+===================================================================
+--- Python-2.6.1.orig/Lib/distutils/sysconfig.py
++++ Python-2.6.1/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:
+             base = os.path.dirname(os.path.abspath(sys.executable))
+@@ -112,7 +115,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,
+@@ -218,7 +218,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():
+@@ -226,7 +226,7 @@ def get_makefile_filename():
+     if python_build:
+         return os.path.join(os.path.dirname(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):
recipes/python/python-native-2.6.4/debug.patch new file +27 -0
new file mode 100644
index 0000000..beb3adc
@@ -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'
recipes/python/python-native-2.6.4/nohostlibs.patch new file +53 -0
new file mode 100644
index 0000000..7020f3c
@@ -0,0 +1,53 @@
+Index: Python-2.6.1/setup.py
+===================================================================
+--- Python-2.6.1.orig/setup.py	2009-11-13 16:20:47.000000000 +0000
++++ Python-2.6.1/setup.py	2009-11-13 16:28:00.000000000 +0000
+@@ -310,8 +310,8 @@
+ 
+     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.
+@@ -347,10 +347,10 @@
+                     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:
+@@ -361,11 +361,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 = []
+         missing = []
+ 
+@@ -583,8 +580,7 @@
+                 readline_libs.append('ncurses')
+             elif self.compiler.find_library_file(lib_dirs, 'curses'):
+                 readline_libs.append('curses')
+-            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'],
recipes/python/python-native-2.6.4/sitecustomize.py new file +45 -0
new file mode 100644
index 0000000..2739018
@@ -0,0 +1,45 @@
+# OpenEmbedded sitecustomize.py (C) 2002-2008 Michael 'Mickey' Lauer <[email protected]>
+# 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()
recipes/python/python-native_2.6.4.bb new file +33 -0
new file mode 100644
index 0000000..ca65057
@@ -0,0 +1,33 @@
+require python.inc
+DEPENDS = "openssl-native bzip2-full-native zlib-native readline-native"
+PR = "${INC_PR}.2"
+
+SRC_URI = "\
+  http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.bz2;name=archive \
+  file://00-fix-bindir-libdir-for-cross.patch;patch=1 \
+  file://04-default-is-optimized.patch;patch=1 \
+  file://05-enable-ctypes-cross-build.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}"
+
+SRC_URI[archive.md5sum] = "fee5408634a54e721a93531aba37f8c1"
+SRC_URI[archive.sha256sum] = "dad8d5575144a210d5cc4fdbc40b8a26386e9cdb1ef58941bec0be02c7cb9d89"
+
+inherit native
+
+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
+}
recipes/python/python_2.6.4.bb new file +139 -0
new file mode 100644
index 0000000..6d93c2c
@@ -0,0 +1,139 @@
+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"
+# 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;name=archive \
+  file://00-fix-bindir-libdir-for-cross.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://99-ignore-optimization-flag.patch;patch=1 \
+  \
+# not yet pushed forward
+# sitebranding
+  \
+#  file://05-install.patch;patch=1 \
+#  file://06-fix-urllib-exception.patch;patch=1 \
+#  file://16-bug1179-imageop.patch;patch=1 \
+#  file://13-set-wakeup-fix.patch;patch=1 \
+  \
+  file://sitecustomize.py \
+"
+SRC_URI[archive.md5sum] = "fee5408634a54e721a93531aba37f8c1"
+SRC_URI[archive.sha256sum] = "dad8d5575144a210d5cc4fdbc40b8a26386e9cdb1ef58941bec0be02c7cb9d89"
+
+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() {
+	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
+}
+
+require python-${PYTHON_MAJMIN}-manifest.inc
+
+# manual dependency additions
+RPROVIDES_python-core = "python"
+RRECOMMENDS_python-core = "python-readline"
+RRECOMMENDS_python-crypt = "openssl"
+
+# add sitecustomize
+FILES_python-core += "${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py"
+# ship 2to3
+FILES_python-core += "${bindir}/2to3"
+
+# package libpython2
+PACKAGES =+ "libpython2"
+FILES_libpython2 = "${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_python-dbg += "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/.debug"
+
+# catch all the rest (unsorted)
+PACKAGES += "python-misc"
+FILES_python-misc = "${libdir}/python${PYTHON_MAJMIN}"
+
+# catch manpage
+PACKAGES += "python-man"
+FILES_python-man = "${datadir}/man"
Signature · 7 lines
1.6.6.1


_______________________________________________
Openembedded-devel mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel