pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/devel/py-cffi py-cffi: update to 1.11.0



details:   https://anonhg.NetBSD.org/pkgsrc/rev/791c351600fc
branches:  trunk
changeset: 369535:791c351600fc
user:      adam <adam%pkgsrc.org@localhost>
date:      Sat Sep 30 13:09:47 2017 +0000

description:
py-cffi: update to 1.11.0

v1.11
Support the modern standard types char16_t and char32_t. These work like wchar_t: they represent one unicode character, or when used as charN_t * or charN_t[] they represent a unicode string. The 
difference with wchar_t is that they have a known, fixed size. They should work at all places that used to work with wchar_t (please report an issue if I missed something). Note that with 
set_source(), you need to make sure that these types are actually defined by the C source you provide (if used in cdef()).

Support the C99 types float _Complex and double _Complex. Note that libffi doesn?t support them, which means that in the ABI mode you still cannot call C functions that take complex numbers directly 
as arguments or return type.

Fixed a rare race condition when creating multiple FFI instances from multiple threads. (Note that you aren?t meant to create many FFI instances: in inline mode, you should write ffi = cffi.FFI() at 
module level just after import cffi; and in out-of-line mode you don?t instantiate FFI explicitly at all.)

Windows: using callbacks can be messy because the CFFI internal error messages show up to stderr?but stderr goes nowhere in many applications. This makes it particularly hard to get started with the 
embedding mode. (Once you get started, you can at least use @ffi.def_extern(onerror=...) and send the error logs where it makes sense for your application, or record them in log files, and so on.) So 
what is new in CFFI is that now, on Windows CFFI will try to open a non-modal MessageBox (in addition to sending raw messages to stderr). The MessageBox is only visible if the process stays alive: 
typically, console applications that crash close immediately, but that is also the situation where stderr should be visible anyway.

Progress on support for callbacks in NetBSD.

Functions returning booleans would in some case still return 0 or 1 instead of False or True. Fixed.

ffi.gc() now takes an optional third parameter, which gives an estimate of the size (in bytes) of the object. So far, this is only used by PyPy, to make the next GC occur more quickly (issue 320). In 
the future, this might have an effect on CPython too (provided the CPython issue 31105 is addressed).

Add a note to the documentation: the ABI mode gives function objects that are slower to call than the API mode does. For some reason it is often thought to be faster. It is not!

diffstat:

 devel/py-cffi/Makefile                          |   15 +--
 devel/py-cffi/PLIST                             |    5 +-
 devel/py-cffi/distinfo                          |   11 +-
 devel/py-cffi/patches/patch-c___cffi__backend.c |  131 ------------------------
 4 files changed, 12 insertions(+), 150 deletions(-)

diffs (217 lines):

diff -r 2cd35b70e16e -r 791c351600fc devel/py-cffi/Makefile
--- a/devel/py-cffi/Makefile    Sat Sep 30 12:51:57 2017 +0000
+++ b/devel/py-cffi/Makefile    Sat Sep 30 13:09:47 2017 +0000
@@ -1,8 +1,7 @@
-# $NetBSD: Makefile,v 1.27 2017/07/03 18:17:45 joerg Exp $
+# $NetBSD: Makefile,v 1.28 2017/09/30 13:09:47 adam Exp $
 
-DISTNAME=      cffi-1.10.0
+DISTNAME=      cffi-1.11.0
 PKGNAME=       ${PYPKGPREFIX}-${DISTNAME}
-PKGREVISION=   1
 CATEGORIES=    devel
 MASTER_SITES=  ${MASTER_SITE_PYPI:=c/cffi/}
 
@@ -11,25 +10,19 @@
 COMMENT=       Foreign Function Interface for Python calling C code
 LICENSE=       mit
 
+USE_LANGUAGES= c c++
 USE_TOOLS+=    pkg-config
-USE_LANGUAGES= c c++
 
 DEPENDS+=      ${PYPKGPREFIX}-cparser-[0-9]*:../../devel/py-cparser
 BUILD_DEPENDS+=        ${PYPKGPREFIX}-test-[0-9]*:../../devel/py-test
 
 DISTUTILS_BUILDDIR_IN_TEST_ENV=        yes
 
-USE_LANGUAGES= c
-
-.if !empty(PKGSRC_RUN_TEST:M[yY][eE][sS])
-USE_LANGUAGES+=        c++
-.endif
-
 TEST_ENV+=     TMPDIR=${WRKDIR}/tmp
 
 do-test:
        ${MKDIR} ${WRKDIR}/tmp
-       cd ${WRKSRC} && ${PKGSRC_SETENV} ${TEST_ENV} ${PREFIX}/bin/py.test-${PYVERSSUFFIX} -v
+       cd ${WRKSRC} && ${PKGSRC_SETENV} ${TEST_ENV} ${PREFIX}/bin/py.test-${PYVERSSUFFIX}
 
 .include "../../devel/libffi/buildlink3.mk"
 .include "../../lang/python/egg.mk"
diff -r 2cd35b70e16e -r 791c351600fc devel/py-cffi/PLIST
--- a/devel/py-cffi/PLIST       Sat Sep 30 12:51:57 2017 +0000
+++ b/devel/py-cffi/PLIST       Sat Sep 30 13:09:47 2017 +0000
@@ -1,5 +1,4 @@
-@comment $NetBSD: PLIST,v 1.6 2017/04/05 15:54:26 wiz Exp $
-${PYSITELIB}/_cffi_backend.so
+@comment $NetBSD: PLIST,v 1.7 2017/09/30 13:09:47 adam Exp $
 ${PYSITELIB}/${EGG_INFODIR}/PKG-INFO
 ${PYSITELIB}/${EGG_INFODIR}/SOURCES.txt
 ${PYSITELIB}/${EGG_INFODIR}/dependency_links.txt
@@ -7,9 +6,11 @@
 ${PYSITELIB}/${EGG_INFODIR}/not-zip-safe
 ${PYSITELIB}/${EGG_INFODIR}/requires.txt
 ${PYSITELIB}/${EGG_INFODIR}/top_level.txt
+${PYSITELIB}/_cffi_backend.so
 ${PYSITELIB}/cffi/__init__.py
 ${PYSITELIB}/cffi/__init__.pyc
 ${PYSITELIB}/cffi/__init__.pyo
+${PYSITELIB}/cffi/_cffi_errors.h
 ${PYSITELIB}/cffi/_cffi_include.h
 ${PYSITELIB}/cffi/_embedding.h
 ${PYSITELIB}/cffi/api.py
diff -r 2cd35b70e16e -r 791c351600fc devel/py-cffi/distinfo
--- a/devel/py-cffi/distinfo    Sat Sep 30 12:51:57 2017 +0000
+++ b/devel/py-cffi/distinfo    Sat Sep 30 13:09:47 2017 +0000
@@ -1,9 +1,8 @@
-$NetBSD: distinfo,v 1.24 2017/07/03 18:17:45 joerg Exp $
+$NetBSD: distinfo,v 1.25 2017/09/30 13:09:47 adam Exp $
 
-SHA1 (cffi-1.10.0.tar.gz) = 8484aba03d1e64367d3110c0e36c1ed052b43f12
-RMD160 (cffi-1.10.0.tar.gz) = 8bcdd03716d70fed5a7c25fd0371572356b36aab
-SHA512 (cffi-1.10.0.tar.gz) = 02c9987c44698708dcb7e0aa17637df6b15f81732dc25b03e54563ca5664a817863b87daf7a782a62c7b6150388cdca858ef496a975ab289c86f05e5492465ef
-Size (cffi-1.10.0.tar.gz) = 418131 bytes
-SHA1 (patch-c___cffi__backend.c) = e06cb7fd3eef875ba1176ba8ac9d7c1cad229ccf
+SHA1 (cffi-1.11.0.tar.gz) = 93cb5aaf152e19f9d4082a723aa2396e9cd5d93f
+RMD160 (cffi-1.11.0.tar.gz) = 76dc6345a24be4c292af0db0b9660a6632d63048
+SHA512 (cffi-1.11.0.tar.gz) = 907af351de6f45a8d6e34dcd29b17d77425c6c513a1310570dd6e63921f3631946336350b0c3dcdab9f0bb799dfc41aa85ed0e0657c9c310c434c5aa2a7881ac
+Size (cffi-1.11.0.tar.gz) = 434283 bytes
 SHA1 (patch-testing_cffi0_test__verify.py) = 9097ed364176f968d8c5084e1bc3d3d368d92714
 SHA1 (patch-testing_cffi1_test__verify1.py) = 64a0c7073a446dd4ca7cd97086646959ad4fad08
diff -r 2cd35b70e16e -r 791c351600fc devel/py-cffi/patches/patch-c___cffi__backend.c
--- a/devel/py-cffi/patches/patch-c___cffi__backend.c   Sat Sep 30 12:51:57 2017 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-$NetBSD: patch-c___cffi__backend.c,v 1.1 2017/07/03 18:17:45 joerg Exp $
-
---- c/_cffi_backend.c.orig     2017-03-21 10:41:29.000000000 +0000
-+++ c/_cffi_backend.c
-@@ -60,8 +60,6 @@
- # endif
- #endif
- 
--#include "malloc_closure.h"
--
- #if PY_MAJOR_VERSION >= 3
- # define STR_OR_BYTES "bytes"
- # define PyText_Type PyUnicode_Type
-@@ -256,6 +254,11 @@ typedef struct {
- } CDataObject_gcp;
- 
- typedef struct {
-+    CDataObject head;
-+    ffi_closure *closure;
-+} CDataObject_closure;
-+
-+typedef struct {
-     ffi_cif cif;
-     /* the following information is used when doing the call:
-        - a buffer of size 'exchange_size' is malloced
-@@ -1678,10 +1681,10 @@ static void cdataowninggc_dealloc(CDataO
-         Py_DECREF(x);
-     }
-     else if (cd->c_type->ct_flags & CT_FUNCTIONPTR) {   /* a callback */
--        ffi_closure *closure = (ffi_closure *)cd->c_data;
--        PyObject *args = (PyObject *)(closure->user_data);
-+        ffi_closure *closure = ((CDataObject_closure *)cd)->closure;
-+        PyObject *args = (PyObject *)closure->user_data;
-         Py_XDECREF(args);
--        cffi_closure_free(closure);
-+        ffi_closure_free(closure);
-     }
-     else if (cd->c_type->ct_flags & CT_IS_UNSIZED_CHAR_A) {  /* from_buffer */
-         Py_buffer *view = ((CDataObject_owngc_frombuf *)cd)->bufferview;
-@@ -1698,8 +1701,8 @@ static int cdataowninggc_traverse(CDataO
-         Py_VISIT(x);
-     }
-     else if (cd->c_type->ct_flags & CT_FUNCTIONPTR) {   /* a callback */
--        ffi_closure *closure = (ffi_closure *)cd->c_data;
--        PyObject *args = (PyObject *)(closure->user_data);
-+        ffi_closure *closure = ((CDataObject_closure *)cd)->closure;
-+        PyObject *args = (PyObject *)closure->user_data;
-         Py_VISIT(args);
-     }
-     else if (cd->c_type->ct_flags & CT_IS_UNSIZED_CHAR_A) {  /* from_buffer */
-@@ -1719,8 +1722,8 @@ static int cdataowninggc_clear(CDataObje
-         Py_DECREF(x);
-     }
-     else if (cd->c_type->ct_flags & CT_FUNCTIONPTR) {   /* a callback */
--        ffi_closure *closure = (ffi_closure *)cd->c_data;
--        PyObject *args = (PyObject *)(closure->user_data);
-+        ffi_closure *closure = ((CDataObject_closure *)cd)->closure;
-+        PyObject *args = (PyObject *)closure->user_data;
-         closure->user_data = NULL;
-         Py_XDECREF(args);
-     }
-@@ -1925,7 +1928,8 @@ static PyObject *cdataowninggc_repr(CDat
-         return _cdata_repr2(cd, "handle to", x);
-     }
-     else if (cd->c_type->ct_flags & CT_FUNCTIONPTR) {   /* a callback */
--        PyObject *args = (PyObject *)((ffi_closure *)cd->c_data)->user_data;
-+        ffi_closure *closure = ((CDataObject_closure *)cd)->closure;
-+        PyObject *args = (PyObject *)closure->user_data;
-         if (args == NULL)
-             return cdata_repr(cd);
-         else
-@@ -5488,11 +5492,12 @@ static PyObject *prepare_callback_info_t
- static PyObject *b_callback(PyObject *self, PyObject *args)
- {
-     CTypeDescrObject *ct;
--    CDataObject *cd;
-+    CDataObject_closure *cd;
-     PyObject *ob, *error_ob = Py_None, *onerror_ob = Py_None;
-     PyObject *infotuple;
-     cif_description_t *cif_descr;
-     ffi_closure *closure;
-+    void *closure_exec;
- 
-     if (!PyArg_ParseTuple(args, "O!O|OO:callback", &CTypeDescr_Type, &ct, &ob,
-                           &error_ob, &onerror_ob))
-@@ -5502,15 +5507,20 @@ static PyObject *b_callback(PyObject *se
-     if (infotuple == NULL)
-         return NULL;
- 
--    closure = cffi_closure_alloc();
-+    closure = ffi_closure_alloc(sizeof(ffi_closure), &closure_exec);
-+    if (closure == NULL) {
-+        Py_DECREF(infotuple);
- 
--    cd = PyObject_GC_New(CDataObject, &CDataOwningGC_Type);
-+        return NULL;
-+    }
-+    cd = PyObject_GC_New(CDataObject_closure, &CDataOwningGC_Type);
-     if (cd == NULL)
-         goto error;
-     Py_INCREF(ct);
--    cd->c_type = ct;
--    cd->c_data = (char *)closure;
--    cd->c_weakreflist = NULL;
-+    cd->head.c_type = ct;
-+    cd->head.c_data = (char *)closure_exec;
-+    cd->head.c_weakreflist = NULL;
-+    cd->closure = closure;
-     PyObject_GC_Track(cd);
- 
-     cif_descr = (cif_description_t *)ct->ct_extra;
-@@ -5520,8 +5530,8 @@ static PyObject *b_callback(PyObject *se
-                      "return type or with '...'", ct->ct_name);
-         goto error;
-     }
--    if (ffi_prep_closure(closure, &cif_descr->cif,
--                         invoke_callback, infotuple) != FFI_OK) {
-+    if (ffi_prep_closure_loc(closure, &cif_descr->cif,
-+                         invoke_callback, infotuple, closure_exec) != FFI_OK) {
-         PyErr_SetString(PyExc_SystemError,
-                         "libffi failed to build this callback");
-         goto error;
-@@ -5545,7 +5555,7 @@ static PyObject *b_callback(PyObject *se
-  error:
-     closure->user_data = NULL;
-     if (cd == NULL)
--        cffi_closure_free(closure);
-+        ffi_closure_free(closure);
-     else
-         Py_DECREF(cd);
-     Py_XDECREF(infotuple);



Home | Main Index | Thread Index | Old Index