[Python-modules-team] Bug#893745: python-cffi: FTBFS on ia64: several test failures

Aaron M. Ucko ucko at debian.org
Wed Mar 21 23:02:21 UTC 2018


Source: python-cffi
Version: 1.11.5-1
Severity: important
Tags: upstream
Justification: fails to build from source (but built successfully in the past)
User: debian-ia64 at lists.debian.org
Usertags: ia64

Builds of python-cffi for ia64 (admittedly not a release architecture)
have been failing lately, per the below excerpts from [1].

Could you please take a look?

Thanks!

[1] https://buildd.debian.org/status/fetch.php?pkg=python-cffi&arch=ia64&ver=1.11.5-1&stamp=1519768961&raw=0

----------------------------------------------------------------------

I: pybuild base:184: python2.7 -m pytest c/ testing/
============================= test session starts ==============================
[...]
=================================== FAILURES ===================================
__________________________ test_struct_return_in_func __________________________

    def test_struct_return_in_func():
        BChar = new_primitive_type("char")
        BShort = new_primitive_type("short")
        BFloat = new_primitive_type("float")
        BDouble = new_primitive_type("double")
        BInt = new_primitive_type("int")
        BStruct = new_struct_type("struct foo_s")
        complete_struct_or_union(BStruct, [('a1', BChar, -1),
                                           ('a2', BShort, -1)])
        BFunc10 = new_function_type((BInt,), BStruct)
        f = cast(BFunc10, _testfunc(10))
        s = f(40)
        assert repr(s) == "<cdata 'struct foo_s' owning 4 bytes>"
>       assert s.a1 == bytechr(40)
E       AssertionError: assert '\x00' == '('
E         - \x00
E         + (

c/test_c.py:2014: AssertionError
_________________________ TestFFI.test_struct_by_value _________________________

self = <testing.cffi0.test_ffi_backend.TestFFI object at 0x2000000001b312d0>

    def test_struct_by_value(self):
        if self.module is None:
            py.test.skip("fix the auto-generation of the tiny test lib")
        ffi = FFI(backend=self.Backend())
        ffi.cdef("""
                typedef struct {
                    long x;
                    long y;
                } POINT;
    
                typedef struct {
                    long left;
                    long top;
                    long right;
                    long bottom;
                } RECT;
    
                long left, top, right, bottom;
    
                RECT ReturnRect(int i, RECT ar, RECT* br, POINT cp, RECT dr,
                            RECT *er, POINT fp, RECT gr);
            """)
        ownlib = ffi.dlopen(self.module)
    
        rect = ffi.new('RECT[1]')
        pt = ffi.new('POINT[1]')
        pt[0].x = 15
        pt[0].y = 25
        rect[0].left = ownlib.left
        rect[0].right = ownlib.right
        rect[0].top = ownlib.top
        rect[0].bottom = ownlib.bottom
    
        for i in range(4):
            ret = ownlib.ReturnRect(i, rect[0], rect, pt[0], rect[0],
                                    rect, pt[0], rect[0])
>           assert ret.left == ownlib.left
E           AssertionError: assert 18014398513676288 == 10
E            +  where 18014398513676288 = <cdata 'RECT' owning 32 bytes>.left
E            +  and   10 = <cffi.api.FFILibrary_/tmp/ffi-0/testownlib.so object at 0x2000000001b31410>.left

testing/cffi0/test_ownlib.py:296: AssertionError
_______________________ TestOwnLib.test_struct_by_value ________________________

self = <testing.cffi0.test_ownlib.TestOwnLib object at 0x2000000003d6b4d0>

    def test_struct_by_value(self):
        if self.module is None:
            py.test.skip("fix the auto-generation of the tiny test lib")
        ffi = FFI(backend=self.Backend())
        ffi.cdef("""
                typedef struct {
                    long x;
                    long y;
                } POINT;
    
                typedef struct {
                    long left;
                    long top;
                    long right;
                    long bottom;
                } RECT;
    
                long left, top, right, bottom;
    
                RECT ReturnRect(int i, RECT ar, RECT* br, POINT cp, RECT dr,
                            RECT *er, POINT fp, RECT gr);
            """)
        ownlib = ffi.dlopen(self.module)
    
        rect = ffi.new('RECT[1]')
        pt = ffi.new('POINT[1]')
        pt[0].x = 15
        pt[0].y = 25
        rect[0].left = ownlib.left
        rect[0].right = ownlib.right
        rect[0].top = ownlib.top
        rect[0].bottom = ownlib.bottom
    
        for i in range(4):
            ret = ownlib.ReturnRect(i, rect[0], rect, pt[0], rect[0],
                                    rect, pt[0], rect[0])
>           assert ret.left == ownlib.left
E           AssertionError: assert 18014398513676288 == 123457
E            +  where 18014398513676288 = <cdata 'RECT &' 0x60000000004faba0>.left
E            +  and   123457 = <cffi.api.FFILibrary_/tmp/ffi-0/testownlib.so object at 0x20000000036887d0>.left

testing/cffi0/test_ownlib.py:296: AssertionError
_______________________ test_no_unknown_exported_symbols _______________________

    def test_no_unknown_exported_symbols():
        if not hasattr(_cffi_backend, '__file__'):
            py.test.skip("_cffi_backend module is built-in")
        if not sys.platform.startswith('linux'):
            py.test.skip("linux-only")
        g = os.popen("objdump -T '%s'" % _cffi_backend.__file__, 'r')
        for line in g:
            if not line.startswith('0'):
                continue
            if '*UND*' in line:
                continue
            name = line.split()[-1]
            if name.startswith('_') or name.startswith('.'):
                continue
            if name not in ('init_cffi_backend', 'PyInit__cffi_backend'):
>               raise Exception("Unexpected exported name %r" % (name,))
E               Exception: Unexpected exported name 'ctypedescr_clear'

testing/cffi1/test_cffi_binary.py:19: Exception
_______________________ test_win32_calling_convention_3 ________________________

    def test_win32_calling_convention_3():
        ffi = FFI()
        ffi.cdef("""
            struct point { int x, y; };
    
            int (*const cb1)(struct point);
            int (__stdcall *const cb2)(struct point);
    
            struct point __stdcall call1(int(*cb)(struct point));
            struct point call2(int(__stdcall *cb)(struct point));
        """)
        lib = verify(ffi, 'test_win32_calling_convention_3', r"""
            #ifndef _MSC_VER
            #  define __cdecl
            #  define __stdcall
            #endif
            struct point { int x, y; };
            int           cb1(struct point pt) { return pt.x + 10 * pt.y; }
            int __stdcall cb2(struct point pt) { return pt.x + 100 * pt.y; }
            struct point __stdcall call1(int(__cdecl *cb)(struct point)) {
                int i;
                struct point result = { 0, 0 };
                //printf("here1\n");
                //printf("cb = %p, cb1 = %p\n", cb, (void *)cb1);
                for (i = 0; i < 1000; i++) {
                    struct point p = { i, -i };
                    int r = cb(p);
                    result.x += r;
                    result.y -= r;
                }
                return result;
            }
            struct point __cdecl call2(int(__stdcall *cb)(struct point)) {
                int i;
                struct point result = { 0, 0 };
                for (i = 0; i < 1000; i++) {
                    struct point p = { -i, i };
                    int r = cb(p);
                    result.x += r;
                    result.y -= r;
                }
                return result;
            }
        """)
        ptr_call1 = ffi.addressof(lib, 'call1')
        ptr_call2 = ffi.addressof(lib, 'call2')
        if sys.platform == 'win32' and not sys.maxsize > 2**32:
            py.test.raises(TypeError, lib.call1, ffi.addressof(lib, 'cb2'))
            py.test.raises(TypeError, ptr_call1, ffi.addressof(lib, 'cb2'))
            py.test.raises(TypeError, lib.call2, ffi.addressof(lib, 'cb1'))
            py.test.raises(TypeError, ptr_call2, ffi.addressof(lib, 'cb1'))
        pt = lib.call1(ffi.addressof(lib, 'cb1'))
        assert (pt.x, pt.y) == (-9*500*999, 9*500*999)
        pt = ptr_call1(ffi.addressof(lib, 'cb1'))
>       assert (pt.x, pt.y) == (-9*500*999, 9*500*999)
E       assert (0, 8388607) == (-4495500, 4495500)
E         At index 0 diff: 0 != -4495500
E         Use -v to get the full diff

testing/cffi1/test_recompiler.py:1534: AssertionError
----------------------------- Captured stdout call -----------------------------
generating /tmp/ffi-0/_CFFI_test_win32_calling_convention_3.cpp
setting the current directory to '/tmp/ffi-0'
running build_ext
building '_CFFI_test_win32_calling_convention_3' extension
ia64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -UNDEBUG -I/usr/include/python2.7 -c _CFFI_test_win32_calling_convention_3.cpp -o ./_CFFI_test_win32_calling_convention_3.o
ia64-linux-gnu-g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-diLoLc/python2.7-2.7.14=. -Wformat -Werror=format-security -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 ./_CFFI_test_win32_calling_convention_3.o -o ./_CFFI_test_win32_calling_convention_3.so
----------------------------- Captured stderr call -----------------------------
cc1plus: warning: command line option '-Wstrict-prototypes' is valid for C/ObjC but not for C++
__________________________ test_extern_python_struct ___________________________

    def test_extern_python_struct():
        ffi = FFI()
        ffi.cdef("""
            struct foo_s { int a, b, c; };
            extern "Python" int bar(int, struct foo_s, int);
            extern "Python" { struct foo_s baz(int, int);
                              struct foo_s bok(void); }
        """)
        lib = verify(ffi, 'test_extern_python_struct',
                     "struct foo_s { int a, b, c; };")
        #
        @ffi.def_extern()
        def bar(x, s, z):
            return x + s.a + s.b + s.c + z
        res = lib.bar(1000, [1001, 1002, 1004], 1008)
        assert res == 5015
        #
        @ffi.def_extern()
        def baz(x, y):
            return [x + y, x - y, x * y]
        res = lib.baz(1000, 42)
>       assert res.a == 1042
E       AssertionError: assert 1109917696 == 1042
E        +  where 1109917696 = <cdata 'struct foo_s' owning 12 bytes>.a

testing/cffi1/test_recompiler.py:1675: AssertionError
----------------------------- Captured stdout call -----------------------------
generating /tmp/ffi-0/_CFFI_test_extern_python_struct.cpp
setting the current directory to '/tmp/ffi-0'
running build_ext
building '_CFFI_test_extern_python_struct' extension
ia64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -UNDEBUG -I/usr/include/python2.7 -c _CFFI_test_extern_python_struct.cpp -o ./_CFFI_test_extern_python_struct.o
ia64-linux-gnu-g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-diLoLc/python2.7-2.7.14=. -Wformat -Werror=format-security -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 ./_CFFI_test_extern_python_struct.o -o ./_CFFI_test_extern_python_struct.so
----------------------------- Captured stderr call -----------------------------
cc1plus: warning: command line option '-Wstrict-prototypes' is valid for C/ObjC but not for C++

-- 
Aaron M. Ucko, KB1CJC (amu at alum.mit.edu, ucko at debian.org)
http://www.mit.edu/~amu/ | http://stuff.mit.edu/cgi/finger/?amu@monk.mit.edu



More information about the Python-modules-team mailing list