This patch was taken from gitweb.openembedded.org (Author: Michael 'mickey' Lauer) and enables the cross compilation of the ctypes module. diff -Naur Python-2.5.1.orig/setup.py Python-2.5.1/setup.py --- Python-2.5.orig/setup.py 2006-08-10 01:42:18.000000000 +0200 +++ Python-2.5/setup.py 2007-11-21 18:00:43.000000000 +0100 @@ -1321,16 +1329,16 @@ ffi_configfile): from distutils.dir_util import mkpath mkpath(ffi_builddir) - config_args = [] + config_args = ['--host=%s' % os.environ["CHOST"], ] # 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, ret %d or missing %s"% (res, ffi_configfile, ) return False fficonfig = {} diff -Naur Python-2.5.1.orig/Modules/_ctypes/callbacks.c Python-2.5.1/Modules/_ctypes/callbacks.c --- Python-2.5.1.orig/Modules/_ctypes/callbacks.c 2006-10-17 21:41:10.000000000 +0200 +++ Python-2.5.1/Modules/_ctypes/callbacks.c 2007-11-22 10:29:33.000000000 +0100 @@ -273,11 +273,13 @@ PyErr_NoMemory(); return NULL; } +#if FFI_CLOSURES p->pcl = MallocClosure(); if (p->pcl == NULL) { PyErr_NoMemory(); goto error; } +#endif for (i = 0; i < nArgs; ++i) { PyObject *cnv = PySequence_GetItem(converters, i); @@ -315,12 +317,14 @@ "ffi_prep_cif failed with %d", result); goto error; } +#if FFI_CLOSURES result = ffi_prep_closure(p->pcl, &p->cif, closure_fcn, p); if (result != FFI_OK) { PyErr_Format(PyExc_RuntimeError, "ffi_prep_closure failed with %d", result); goto error; } +#endif p->converters = converters; p->callable = callable; @@ -328,8 +332,10 @@ error: if (p) { +#if FFI_CLOSURES if (p->pcl) FreeClosure(p->pcl); +#endif PyMem_Free(p); } return NULL; diff -Naur Python-2.5.1.orig/Modules/_ctypes/_ctypes.c Python-2.5.1/Modules/_ctypes/_ctypes.c --- Python-2.5.1.orig/Modules/_ctypes/_ctypes.c 2007-03-23 20:56:45.000000000 +0100 +++ Python-2.5.1/Modules/_ctypes/_ctypes.c 2007-11-22 10:29:01.000000000 +0100 @@ -3419,7 +3419,9 @@ Py_CLEAR(self->paramflags); if (self->thunk) { +#if FFI_CLOSURES FreeClosure(self->thunk->pcl); +#endif PyMem_Free(self->thunk); self->thunk = NULL; } diff -Naur Python-2.5.1.orig/Modules/_ctypes/ctypes.h Python-2.5.1/Modules/_ctypes/ctypes.h --- Python-2.5.1.orig/Modules/_ctypes/ctypes.h 2006-08-14 13:17:48.000000000 +0200 +++ Python-2.5.1/Modules/_ctypes/ctypes.h 2007-11-22 10:29:44.000000000 +0100 @@ -68,7 +68,9 @@ }; typedef struct { +#if FFI_CLOSURES ffi_closure *pcl; /* the C callable */ +#endif ffi_cif cif; PyObject *converters; PyObject *callable; diff -Naur Python-2.5.1.orig/Modules/_ctypes/malloc_closure.c Python-2.5.1/Modules/_ctypes/malloc_closure.c --- Python-2.5.1.orig/Modules/_ctypes/malloc_closure.c 2006-06-12 22:56:48.000000000 +0200 +++ Python-2.5.1/Modules/_ctypes/malloc_closure.c 2007-11-22 10:30:17.000000000 +0100 @@ -27,7 +27,9 @@ /******************************************************************/ typedef union _tagITEM { +#if FFI_CLOSURES ffi_closure closure; +#endif union _tagITEM *next; } ITEM;