[Python-modules-commits] r23804 - in packages/python-cffi/trunk/debian (4 files)

stefanor at users.alioth.debian.org stefanor at users.alioth.debian.org
Sat Mar 30 19:53:38 UTC 2013


    Date: Saturday, March 30, 2013 @ 19:53:37
  Author: stefanor
Revision: 23804

* Fix long double related test failures on non-x86. (LP: #1157978)
* Use the glibc varargs convention on kFreeBSD and Hurd ports.

Added:
  packages/python-cffi/trunk/debian/patches/long-double-tests
  packages/python-cffi/trunk/debian/patches/tests-non-linux-ports
Modified:
  packages/python-cffi/trunk/debian/changelog
  packages/python-cffi/trunk/debian/patches/series

Modified: packages/python-cffi/trunk/debian/changelog
===================================================================
--- packages/python-cffi/trunk/debian/changelog	2013-03-28 21:59:37 UTC (rev 23803)
+++ packages/python-cffi/trunk/debian/changelog	2013-03-30 19:53:37 UTC (rev 23804)
@@ -1,3 +1,10 @@
+python-cffi (0.5-2) UNRELEASED; urgency=low
+
+  * Fix long double related test failures on non-x86. (LP: #1157978)
+  * Use the glibc varargs convention on kFreeBSD and Hurd ports.
+
+ -- Stefano Rivera <stefanor at debian.org>  Thu, 07 Mar 2013 17:06:27 +0200
+
 python-cffi (0.5-1) unstable; urgency=low
 
   * Initial package (Closes: #700084)

Added: packages/python-cffi/trunk/debian/patches/long-double-tests
===================================================================
--- packages/python-cffi/trunk/debian/patches/long-double-tests	                        (rev 0)
+++ packages/python-cffi/trunk/debian/patches/long-double-tests	2013-03-30 19:53:37 UTC (rev 23804)
@@ -0,0 +1,143 @@
+Description: Fix long double related test failures on non-x86
+ long double on PPC has higher precision than double, while the same size.
+ On other architectures, it's simply the same as double.
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/python-cffi/+bug/1157978
+Bug-Upstream: https://bitbucket.org/cffi/cffi/issue/68/long-double
+Origin: upstream,
+ https://bitbucket.org/cffi/cffi/commits/e67cd88ae64b
+ https://bitbucket.org/cffi/cffi/commits/c5e85201f3ce
+ https://bitbucket.org/cffi/cffi/commits/be070b8687d3
+ https://bitbucket.org/cffi/cffi/commits/3c66c29d2e80
+ https://bitbucket.org/cffi/cffi/commits/1f49770a97b2
+ https://bitbucket.org/cffi/cffi/commits/231fd7f12dbb
+Author: Armin Rigo <arigo at tunes.org>
+
+--- a/c/_cffi_backend.c
++++ b/c/_cffi_backend.c
+@@ -4642,11 +4642,12 @@
+     return ptr->a1 + (int)ptr->a2;
+ }
+ 
+-static long double _testfunc19(long double x)
++static long double _testfunc19(long double x, int count)
+ {
+     int i;
+-    for (i=0; i<28; i++)
+-        x += x;
++    for (i=0; i<count; i++) {
++        x = 4*x - x*x;
++    }
+     return x;
+ }
+ 
+@@ -4786,11 +4787,6 @@
+ _cffi_to_c_UNSIGNED_FN(unsigned int, 32)
+ _cffi_to_c_UNSIGNED_FN(unsigned PY_LONG_LONG, 64)
+ 
+-static char _cffi_to_c_char(PyObject *obj)
+-{
+-    return (char)_convert_to_char(obj);
+-}
+-
+ static PyObject *_cffi_from_c_pointer(char *ptr, CTypeDescrObject *ct)
+ {
+     return convert_to_object((char *)&ptr, ct);
+@@ -4878,7 +4874,7 @@
+     _cffi_to_c_u32,
+     _cffi_to_c_i64,
+     _cffi_to_c_u64,
+-    _cffi_to_c_char,
++    _convert_to_char,
+     _cffi_from_c_pointer,
+     _cffi_to_c_pointer,
+     _cffi_get_struct_layout,
+--- a/c/test_c.py
++++ b/c/test_c.py
+@@ -2210,6 +2210,7 @@
+ 
+ def test_longdouble():
+     py_py = 'PY_DOT_PY' in globals()
++    BInt = new_primitive_type("int")
+     BLongDouble = new_primitive_type("long double")
+     BLongDoublePtr = new_pointer_type(BLongDouble)
+     BLongDoubleArray = new_array_type(BLongDoublePtr, None)
+@@ -2227,21 +2228,23 @@
+     assert float(x) == 1.23
+     assert int(x) == 1
+     #
+-    BFunc19 = new_function_type((BLongDouble,), BLongDouble)
++    BFunc19 = new_function_type((BLongDouble, BInt), BLongDouble)
+     f = cast(BFunc19, _testfunc(19))
+-    start = 8
++    start = lstart = 1.5
+     for i in range(107):
+-        start = f(start)
+-    if sizeof(BLongDouble) > sizeof(new_primitive_type("double")):
+-        if not py_py:
+-            assert repr(start).startswith("<cdata 'long double' 6.15")
+-            assert repr(start).endswith("E+902>")
+-        #
+-        c = newp(BLongDoubleArray, [start])
+-        x = c[0]
+-        if not py_py:
+-            assert repr(x).endswith("E+902>")
+-            assert float(x) == float("inf")
++        start = 4 * start - start * start
++        lstart = f(lstart, 1)
++    lother = f(1.5, 107)
++    if not py_py:
++        assert float(lstart) == float(lother)
++        assert repr(lstart) == repr(lother)
++        if sizeof(BLongDouble) > sizeof(new_primitive_type("double")):
++            assert float(lstart) != start
++            assert repr(lstart).startswith("<cdata 'long double' ")
++    #
++    c = newp(BLongDoubleArray, [lstart])
++    x = c[0]
++    assert float(f(lstart, 107)) == float(f(x, 107))
+ 
+ def test_get_array_of_length_zero():
+     for length in [0, 5, 10]:
+--- a/testing/test_verify.py
++++ b/testing/test_verify.py
+@@ -425,13 +425,18 @@
+ 
+ def _check_field_match(typename, real, expect_mismatch):
+     ffi = FFI()
+-    if expect_mismatch == 'by_size':
++    testing_by_size = (expect_mismatch == 'by_size')
++    if testing_by_size:
+         expect_mismatch = ffi.sizeof(typename) != ffi.sizeof(real)
+     ffi.cdef("struct foo_s { %s x; ...; };" % typename)
+     try:
+         ffi.verify("struct foo_s { %s x; };" % real)
+     except VerificationError:
+         if not expect_mismatch:
++            if testing_by_size and typename != real:
++                print("ignoring mismatch between %s* and %s* even though "
++                      "they have the same size" % (typename, real))
++                return
+             raise AssertionError("unexpected mismatch: %s should be accepted "
+                                  "as equal to %s" % (typename, real))
+     else:
+@@ -1217,7 +1222,8 @@
+     f0 = lib.square(0.0)
+     f2 = lib.square(f)
+     f3 = lib.square(f * 2.0)
+-    assert repr(f2) != repr(f3)             # two non-null 'long doubles'
++    if repr(f2) == repr(f3):
++        py.test.skip("long double doesn't have enough precision")
+     assert float(f0) == float(f2) == float(f3) == 0.0  # too tiny for 'double'
+     assert int(ffi.cast("_Bool", f2)) == 1
+     assert int(ffi.cast("_Bool", f3)) == 1
+--- a/cffi/vengine_cpy.py
++++ b/cffi/vengine_cpy.py
+@@ -773,7 +773,7 @@
+ #define _cffi_to_c_u64                                                   \
+                  ((unsigned long long(*)(PyObject *))_cffi_exports[8])
+ #define _cffi_to_c_char                                                  \
+-                 ((char(*)(PyObject *))_cffi_exports[9])
++                 ((int(*)(PyObject *))_cffi_exports[9])
+ #define _cffi_from_c_pointer                                             \
+     ((PyObject *(*)(char *, CTypeDescrObject *))_cffi_exports[10])
+ #define _cffi_to_c_pointer                                               \

Modified: packages/python-cffi/trunk/debian/patches/series
===================================================================
--- packages/python-cffi/trunk/debian/patches/series	2013-03-28 21:59:37 UTC (rev 23803)
+++ packages/python-cffi/trunk/debian/patches/series	2013-03-30 19:53:37 UTC (rev 23804)
@@ -1 +1,3 @@
 avoid_d_d
+long-double-tests
+tests-non-linux-ports

Added: packages/python-cffi/trunk/debian/patches/tests-non-linux-ports
===================================================================
--- packages/python-cffi/trunk/debian/patches/tests-non-linux-ports	                        (rev 0)
+++ packages/python-cffi/trunk/debian/patches/tests-non-linux-ports	2013-03-30 19:53:37 UTC (rev 23804)
@@ -0,0 +1,16 @@
+Description: Linux isn't the only platform using glibc. Debian gnukfreebsd and hurd ports do too
+Author: Stefano Rivera <stefanor at debian.org>
+Forwarded: https://bitbucket.org/cffi/cffi/pull-request/12/linux-isnt-the-only-platform-using-glibc
+Last-Update: 2013-03-30
+
+--- a/testing/test_function.py
++++ b/testing/test_function.py
+@@ -156,7 +156,7 @@
+         res = fd.getvalue()
+         if sys.platform == 'win32':
+             NIL = b"00000000"
+-        elif sys.platform.startswith('linux'):
++        elif sys.platform.startswith(('linux', 'gnu')):
+             NIL = b"(nil)"
+         else:
+             NIL = b"0x0"    # OS/X at least




More information about the Python-modules-commits mailing list