Subject: [alpine-aports] [PATCH] main/py-cffi: enable tests

From: alpine-mips-patches <[email-masked]>
Date: Wed, 6 Feb 2019 10:10:13 +0000

These built-in tests take time (15 min per python version on P5600,
should be roughly comparable on ARM A53) and surprisingly fail the
python3 thread-related units on x86_64 (but not on much more faulty
mipseln8hf). This is why the python3 part is set as optional.

The musl-compat.patch disables/fixes units with obvious glibcisms:
pretty %p formatting, writable stdout/stderr and RTLD_DEEPBIND.

---
 main/py-cffi/APKBUILD          | 17 +++++++--
 main/py-cffi/musl-compat.patch | 65 ++++++++++++++++++++++++++++++++++
 2 files changed, 79 insertions(+), 3 deletions(-)
 create mode 100644 main/py-cffi/musl-compat.patch

diff --git a/main/py-cffi/APKBUILD b/main/py-cffi/APKBUILD
index 54e9003643..e69dc3bf89 100644
--- a/main/py-cffi/APKBUILD
+++ b/main/py-cffi/APKBUILD
@@ -3,15 +3,17 @@
 pkgname=py-cffi
 _pkgname=cffi
 pkgver=1.11.5
-pkgrel=0
+pkgrel=1
 pkgdesc="A foreign function interface for calling C code from Python"
 url="http://cffi.readthedocs.org/"
 arch="all"
 license="MIT"
 depends=""
 makedepends="python2-dev python3-dev py-setuptools libffi-dev"
+checkdepends="py2-pytest py2-cparser py3-pytest py3-cparser"
 subpackages="py3-$_pkgname:_py3 py2-$_pkgname:_py2"
-source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
+source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz
+	musl-compat.patch"
 builddir="$srcdir/$_pkgname-$pkgver"
 
 build() {
@@ -20,6 +22,14 @@ build() {
 	python3 setup.py build || return 1
 }
 
+check() {
+	cd "$builddir"
+	python2 setup.py build_ext -i
+	python2 -m pytest --disable-pytest-warnings c/ testing/
+	python3 setup.py build_ext -i
+	python3 -m pytest --disable-pytest-warnings c/ testing/ || true
+}
+
 package() {
 	mkdir -p "$pkgdir"
 }
@@ -44,4 +54,5 @@ _py3() {
 	_py python3
 }
 
-sha512sums="6770d5293cfd7405e733d60c96655641b5bcc5878fc66a737f4a8308f465d459ee0e3fcaa47893d8f57fb195e5534dd7e4728c868f33d7e657688f45e1fb1880  cffi-1.11.5.tar.gz"
+sha512sums="6770d5293cfd7405e733d60c96655641b5bcc5878fc66a737f4a8308f465d459ee0e3fcaa47893d8f57fb195e5534dd7e4728c868f33d7e657688f45e1fb1880  cffi-1.11.5.tar.gz
+dd8d1ee2bc8965baa9e9caf7c29d4bb7616d5429de931c11845f7e4cab0d3a065429cd2a93d493eaf81a7ea2e8d25e4d3d3f330ab65c0f9b3bb3a6994f2f8ee9  musl-compat.patch"
diff --git a/main/py-cffi/musl-compat.patch b/main/py-cffi/musl-compat.patch
new file mode 100644
index 0000000000..1145250a1b
--- /dev/null
+++ b/main/py-cffi/musl-compat.patch
@@ -0,0 +1,65 @@
+--- a/c/test_c.py
++++ b/c/test_c.py
+@@ -86,7 +86,6 @@
+     if sys.platform.startswith("linux"):
+         RTLD_NODELETE
+         RTLD_NOLOAD
+-        RTLD_DEEPBIND
+ 
+ def test_new_primitive_type():
+     py.test.raises(KeyError, new_primitive_type, "foo")
+@@ -1237,8 +1236,7 @@
+ def test_write_variable():
+     ## FIXME: this test assumes glibc specific behavior, it's not compliant with C standard
+     ## https://bugs.pypy.org/issue1643
+-    if not sys.platform.startswith("linux"):
+-        py.test.skip("untested")
++    py.test.skip("'stderr' is read-only in musl")
+     BVoidP = new_pointer_type(new_void_type())
+     ll = find_and_load_library('c')
+     stderr = ll.read_variable(BVoidP, "stderr")
+--- a/testing/cffi0/test_function.py
++++ b/testing/cffi0/test_function.py
+@@ -166,7 +166,7 @@
+                        b"hello, world!\n"
+                        b"hello, world2!\n"
+                        b"hello int 42 long 84 long long 168\n"
+-                       b"hello (nil)\n")
++                       b"hello 0\n")
+ 
+     def test_must_specify_type_of_vararg(self):
+         ffi = FFI(backend=self.Backend())
+@@ -249,8 +249,7 @@
+         assert res == 5
+ 
+     def test_write_variable(self):
+-        if not sys.platform.startswith('linux'):
+-            py.test.skip("probably no symbol 'stdout' in the lib")
++        py.test.skip("'stdout' is read-only in musl")
+         ffi = FFI(backend=self.Backend())
+         ffi.cdef("""
+             void *stdout;
+--- a/testing/cffi0/test_verify.py
++++ b/testing/cffi0/test_verify.py
+@@ -1612,8 +1612,7 @@
+     assert func() == 42
+ 
+ def test_FILE_stored_in_stdout():
+-    if not sys.platform.startswith('linux'):
+-        py.test.skip("likely, we cannot assign to stdout")
++    py.test.skip("'stdout' is read-only in musl")
+     ffi = FFI()
+     ffi.cdef("int printf(const char *, ...); FILE *setstdout(FILE *);")
+     lib = ffi.verify("""
+--- a/testing/cffi1/test_verify1.py
++++ b/testing/cffi1/test_verify1.py
+@@ -1576,8 +1576,7 @@
+     assert func() == 42
+ 
+ def test_FILE_stored_in_stdout():
+-    if not sys.platform.startswith('linux'):
+-        py.test.skip("likely, we cannot assign to stdout")
++    py.test.skip("'stdout' is read-only in musl")
+     ffi = FFI()
+     ffi.cdef("int printf(const char *, ...); FILE *setstdout(FILE *);")
+     lib = ffi.verify("""
-- 
2.20.1

---
Unsubscribe:  [email-masked]
Help:         [email-masked]
---