python25 _ctypes module on arm

Matthew Luckie mjl at luckie.org.nz
Sat May 17 11:25:14 UTC 2008


The python _ctypes module is not built on arm.  This is mainly because
Modules/_ctypes/libffi/configure does not have the magic glue for
arm-*-freebsd* but also because _ctypes.c assumes ffi_closure is available
(which it isn't in the libffi included with the Python distribution for
arm)

However, the configure script for python allows for linking against a
system libffi, which seems to work ok on arm anyway.

Is the following patch acceptable?  Note that it relies on a small change to
libffi port (which is included below and has been submitted as a PR, I
predict number 123754 (though it hasn't been assigned a number just
yet)

>>> from ctypes import *
>>> cdll.LoadLibrary("libc.so.7")
>>> libc = CDLL("libc.so.7")
>>> print libc.time(None)
0
>>> print libc.time      
<_FuncPtr object at 0x2031877c>
>>> printf = libc.printf
>>> printf("Hello, %s\n", "World!")
Hello, World!
14
>>> printf("An int %d, a double %f\n", 1234, c_double(3.14))
An int 1234, a double 3.140000
31

Note that the libc.time function should not return zero, i'm not sure
why that is but I imagine it might have something to do with time_t being
64 bits on arm.

--- python25.orig/Makefile      Sat Apr 26 07:01:46 2008
+++ python25/Makefile   Sat May 17 17:55:26 2008
@@ -103,6 +103,12 @@
 .if ${ARCH} == sparc64
 CFLAGS+=        -DPYTHON_DEFAULT_RECURSION_LIMIT=900
 .endif
+.if ${ARCH} == arm
+CONFIGURE_ARGS+=       --with-system-ffi
+LIB_DEPENDS+=          ffi.5:${PORTSDIR}/devel/libffi
+CONFIGURE_ENV+=                CFLAGS="${CFLAGS} -I${LOCALBASE}/include"
+CONFIGURE_ENV+=                LIBS="-L${LOCALBASE}/lib"
+.endif
 
 .if !exists(/usr/bin/ypcat) # the world with NO_NIS
 PLIST_SUB+=    NO_NIS="@comment "


=========================


diff -uNr libffi.orig/files/patch-include-Makefile.in libffi/files/patch-include
-Makefile.in
--- libffi.orig/files/patch-include-Makefile.in Thu Jan  1 12:00:00 1970
+++ libffi/files/patch-include-Makefile.in      Sat May 17 21:02:36 2008
@@ -0,0 +1,11 @@
+--- include/Makefile.in.orig   2008-05-17 21:00:01.000000000 +1200
++++ include/Makefile.in        2008-05-17 21:01:39.000000000 +1200
+@@ -182,7 +182,7 @@
+ AUTOMAKE_OPTIONS = foreign
+ DISTCLEANFILES = ffitarget.h
+ EXTRA_DIST = ffi.h.in ffi_common.h
+-includesdir = $(libdir)/@PACKAGE_NAME at -@PACKAGE_VERSION@/include
++includesdir = @includedir@
+ nodist_includes_HEADERS = ffi.h ffitarget.h 
+ all: all-am
+ 
diff -uNr libffi.orig/files/patch-libffi.pc.in libffi/files/patch-libffi.pc.in
--- libffi.orig/files/patch-libffi.pc.in        Thu Jan  1 12:00:00 1970
+++ libffi/files/patch-libffi.pc.in     Sat May 17 20:58:36 2008
@@ -0,0 +1,11 @@
+--- libffi.pc.in.orig  2008-05-17 20:56:19.000000000 +1200
++++ libffi.pc.in       2008-05-17 20:58:09.000000000 +1200
+@@ -1,7 +1,7 @@
+ prefix=@prefix@
+ exec_prefix=@exec_prefix@
+ libdir=@libdir@
+-includedir=${libdir}/@PACKAGE_NAME at -@PACKAGE_VERSION@/include
++includedir=@includedir@
+ 
+ Name: @PACKAGE_NAME@
+ Description: Library supporting Foreign Function Interfaces
diff -uNr libffi.orig/pkg-plist libffi/pkg-plist
--- libffi.orig/pkg-plist       Sat Apr  5 07:00:51 2008
+++ libffi/pkg-plist    Sat May 17 21:04:53 2008
@@ -1,9 +1,7 @@
-lib/libffi-%%PORTVERSION%%/include/ffi.h
-lib/libffi-%%PORTVERSION%%/include/ffitarget.h
+include/ffi.h
+include/ffitarget.h
 lib/libffi.a
 lib/libffi.la
 lib/libffi.so
 lib/libffi.so.5
 libdata/pkgconfig/libffi.pc
- at dirrm lib/libffi-%%PORTVERSION%%/include
- at dirrm lib/libffi-%%PORTVERSION%%


More information about the freebsd-python mailing list