diff --git a/fix-no-return-in-nonvoid-function.patch b/fix-no-return-in-nonvoid-function.patch new file mode 100644 index 0000000..95c0833 --- /dev/null +++ b/fix-no-return-in-nonvoid-function.patch @@ -0,0 +1,23 @@ +Index: b/deps/libev/ev_iouring.c +=================================================================== +--- a/deps/libev/ev_iouring.c ++++ b/deps/libev/ev_iouring.c +@@ -213,6 +213,9 @@ iouring_sqe_get (EV_P) + return EV_SQES + (tail & EV_SQ_VAR (ring_mask)); + } + ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wreturn-type" ++ + inline_size + struct io_uring_sqe * + iouring_sqe_submit (EV_P_ struct io_uring_sqe *sqe) +@@ -260,6 +263,8 @@ iouring_internal_destroy (EV_P) + if (ev_is_active (&iouring_tfd_w )) ev_ref (EV_A); ev_io_stop (EV_A_ &iouring_tfd_w ); + } + ++#pragma GCC diagnostic pop ++ + ecb_cold + static int + iouring_internal_init (EV_P) diff --git a/fix-tests.patch b/fix-tests.patch deleted file mode 100644 index d90882e..0000000 --- a/fix-tests.patch +++ /dev/null @@ -1,32 +0,0 @@ -From: Antonio Larrosa -Subject: Fix failing tests - -- ssl.OP_NO_COMPRESSION is set by default by ssl. -- thread_ident can be represented as a negative hex number now, - so replace the negative sign with the regex too, and not just the number. ---- a/src/greentest/2.7/test_ssl.py -+++ b/src/greentest/2.7/test_ssl.py -@@ -835,9 +835,10 @@ class ContextTests(unittest.TestCase): - def test_options(self): - ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1) - # OP_ALL | OP_NO_SSLv2 | OP_NO_SSLv3 is the default value -- default = (ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3) -+ default = (ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3 | -+ OP_NO_COMPRESSION) - # SSLContext also enables these by default -- default |= (OP_NO_COMPRESSION | OP_CIPHER_SERVER_PREFERENCE | -+ default |= (OP_CIPHER_SERVER_PREFERENCE | - OP_SINGLE_DH_USE | OP_SINGLE_ECDH_USE | - OP_ENABLE_MIDDLEBOX_COMPAT) - self.assertEqual(default, ctx.options) ---- a/src/gevent/tests/test__util.py -+++ b/src/gevent/tests/test__util.py -@@ -134,7 +134,7 @@ class TestTree(greentest.TestCase): - - def _normalize_tree_format(self, value): - import re -- hexobj = re.compile('0x[0123456789abcdef]+L?', re.I) -+ hexobj = re.compile('-?0x[0123456789abcdef]+L?', re.I) - value = hexobj.sub('X', value) - value = value.replace('epoll', 'select') - value = value.replace('select', 'default') diff --git a/gevent-1.5a3.tar.gz b/gevent-1.5a3.tar.gz deleted file mode 100644 index 74ad5d9..0000000 --- a/gevent-1.5a3.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f1a90da498d05fecc20fb13d4d8383704043fe1d386ebca97ebfc89747dad426 -size 3878216 diff --git a/gevent-20.9.0.tar.gz b/gevent-20.9.0.tar.gz new file mode 100644 index 0000000..782e1b6 --- /dev/null +++ b/gevent-20.9.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a43d6b8335eae4d1ebb3f9585bcb78c397c6f1f141eb2449838167cbb4a40ee3 +size 4237730 diff --git a/python-gevent.changes b/python-gevent.changes index d2e4e19..9238a05 100644 --- a/python-gevent.changes +++ b/python-gevent.changes @@ -1,3 +1,257 @@ +------------------------------------------------------------------- +Thu Oct 8 10:03:45 UTC 2020 - Hans-Peter Jansen + +- Disable more tests failing for Python 3.6 +- Don't bother with python2 tests + +------------------------------------------------------------------- +Sat Oct 3 16:09:59 UTC 2020 - Hans-Peter Jansen + +- Update to version 20.9.0 (2020-09-22) + + Features + * The embedded libev is now asked to detect the availability of + clock_gettime and use the realtime and/or monotonic clocks, + if they are available. + * On Linux, this can reduce the number of system calls libev + makes. Originally provided by Josh Snyder. See + :issue:`issue1648`. + + Bugfixes + * On CPython, depend on greenlet >= 0.4.17. This version is + binary incompatible with earlier releases on CPython 3.7 and + later. + * On Python 3.7 and above, the module gevent.contextvars is no + longer monkey-patched into the standard library. contextvars + are now both greenlet and asyncio task local. See + :issue:`1656`. See :issue:`issue1674`. + * The DummyThread objects created automatically by certain + operations when the standard library threading module is + monkey-patched now match the naming convention the standard + library uses ("Dummy-12345"). Previously (since gevent 1.2a2) + they used "DummyThread-12345". See :issue:`1659`. + * Fix compatibility with dnspython 2. + * Caution! + * This currently means that it can be imported. But it cannot + yet be used. gevent has a pinned dependency on dnspython < 2 + for now. + * See :issue:`1661`. + +- Update to version 20.6.2 (2020-06-16) + + Features + * It is now possible to build and use the embedded libuv on a + Cygwin platform. + * Note that Cygwin is not an officially supported platform of + upstream libuv and is not tested by gevent, so the actual + working status is unknown, and this may bitrot in future + releases. + * Thanks to berkakinci for the patch. See :issue:`issue1645`. + + Bugfixes + * Relax the version constraint for psutil on PyPy. + * Previously it was pinned to 5.6.3 for PyPy2, except for on + Windows, where it was excluded. It is now treated the same as + CPython again. See :issue:`issue1643`. + +- Update to version 20.6.1 (2020-06-10) + + Features + * gevent's CI is now tested on Ubuntu 18.04 (Bionic), an + upgrade from 16.04 (Xenial). See :issue:`1623`. + + Bugfixes + * On Python 2, the dnspython resolver can be used without + having selectors2 installed. Previously, an ImportError would + be raised. See :issue:`issue1641`. + * Python 3 gevent.ssl.SSLSocket objects no longer attempt to + catch ConnectionResetError and treat it the same as an + SSLError with SSL_ERROR_EOF (typically by suppressing it). + * This was a difference from the way the standard library + behaved (which is to raise the exception). It was added to + gevent during early testing of OpenSSL 1.1 and TLS 1.3. See + :issue:`1637`. + +- Update to version 20.6.0 (2020-06-06) + + Features + * Add gevent.selectors containing GeventSelector. This selector + implementation uses gevent details to attempt to reduce + overhead when polling many file descriptors, only some of + which become ready at any given time. + * This is monkey-patched as selectors.DefaultSelector by + default. + * This is available on Python 2 if the selectors2 backport is + installed. (This backport is installed automatically using + the recommended extra.) When monkey-patching, selectors is + made available as an alias to this module. See :issue:`1532`. + * Depend on greenlet >= 0.4.16. This is required for CPython + 3.9 and 3.10a0. See :issue:`1627`. + * Add support for Python 3.9. + * No binary wheels are available yet, however. See + :issue:`1628`. + + Bugfixes + * gevent.socket.create_connection and + gevent.socket.socket.connect no longer ignore IPv6 scope IDs. + * Any IP address (IPv4 or IPv6) is no longer subject to an + extra call to getaddrinfo. Depending on the resolver in use, + this is likely to change the number and order of greenlet + switches. (On Windows, in particular test cases when there + are no other greenlets running, it has been observed to lead + to LoopExit in scenarios that didn't produce that before.) + See :issue:`1634`. + +- Update to version 20.5.2 (2020-05-28) + + Bugfixes + * Forking a process that had use the threadpool to run tasks + that created their own hub would fail to clean up the + threadpool by raising greenlet.error. See :issue:`1631`. + +- Update to version 20.5.1 (2020-05-26) + + Features + * Waiters on Event and Semaphore objects that call wait() or + acquire(), respectively, that find the Event already set, or + the Semaphore available, no longer "cut in line" and run + before any previously scheduled greenlets. They now run in + the order in which they arrived, just as waiters that had to + block in those methods do. See :issue:`1520`. + * Update tested PyPy version from 7.3.0 to 7.3.1 on Linux. See + :issue:`1569`. + * Make zope.interface, zope.event and (by extension) setuptools + required dependencies. The events install extra now does + nothing and will be removed in 2021. See :issue:`1619`. + * Update bundled libuv from 1.36.0 to 1.38.0. See + :issue:`1621`. + * Update bundled c-ares from 1.16.0 to 1.16.1. + * On macOS, stop trying to adjust c-ares headers to make them + universal. See :issue:`1624`. + + Bugfixes + * Make gevent locks that are monkey-patched usually work across + native threads as well as across greenlets within a single + thread. Locks that are only used in a single thread do not + take a performance hit. While cross-thread locking is + relatively expensive, and not a recommended programming + pattern, it can happen unwittingly, for example when using + the threadpool and logging. + * Before, cross-thread lock uses might succeed, or, if the lock + was contended, raise greenlet.error. Now, in the contended + case, if the lock has been acquired by the main thread at + least once, it should correctly block in any thread, + cooperating with the event loop of both threads. In certain + (hopefully rare) cases, it might be possible for contended + case to raise LoopExit when previously it would have raised + greenlet.error; if these cases are a practical concern, + please open an issue. + * Also, the underlying Semaphore always behaves in an atomic + fashion (as if the GIL was not released) when PURE_PYTHON is + set. Previously, it only correctly did so on PyPy. See + :issue:`issue1437`. + * Rename gevent's C accelerator extension modules using a + prefix to avoid clashing with other C extensions. See + :issue:`1480`. + * Using gevent.wait on an Event more than once, when that Event + is already set, could previously raise an AssertionError. + * As part of this, exceptions raised in the main greenlet will + now include a more complete traceback from the failing + greenlet. See :issue:`1540`. + * Avoid closing the same Python libuv watcher IO object twice. + Under some circumstances (only seen on Windows), that could + lead to program crashes. See :issue:`1587`. + * gevent can now be built using Cython 3.0a5 and newer. The + PyPI distribution uses this version. + * The libev extension was incompatible with this. As part of + this, certain internal, undocumented names have been changed. + * (Technically, gevent can be built with Cython 3.0a2 and + above. However, up through 3.0a4 compiling with Cython 3 + results in gevent's test for memory leaks failing. See this + Cython issue.) See :issue:`1599`. + * Destroying a hub after joining it didn't necessarily clean up + all resources associated with the hub, especially if the hub + had been created in a secondary thread that was exiting. The + hub and its parent greenlet could be kept alive. + * Now, destroying a hub drops the reference to the hub and + ensures it cannot be switched to again. (Though using a new + blocking API call may still create a new hub.) + * Joining a hub also cleans up some (small) memory resources + that might have stuck around for longer before as well. See + :issue:`1601`. + * Fix some potential crashes under libuv when using + gevent.signal_handler. The crashes were seen running the test + suite and were non-deterministic. See :issue:`1606`. + +- Update to version 20.5.0 (2020-05-01) + + Features + * Update bundled c-ares to version 1.16.0. Changes. See + :issue:`1588`. + * Update all the bundled config.guess and config.sub scripts. + See :issue:`1589`. + * Update bundled libuv from 1.34.0 to 1.36.0. See + :issue:`1597`. + + Bugfixes + * Use ares_getaddrinfo instead of a manual lookup. + * This requires c-ares 1.16.0. + * Note that this may change the results, in particular their + order. + * As part of this, certain parts of the c-ares extension were + adapted to use modern Cython idioms. + * A few minor errors and discrepancies were fixed as well, such + as gethostbyaddr('localhost') working on Python 3 and failing + on Python 2. The DNSpython resolver now raises the expected + TypeError in more cases instead of an AttributeError. See + :issue:`1012`. + * The c-ares and DNSPython resolvers now raise exceptions much + more consistently with the standard resolver. Types and + errnos are substantially more likely to match what the + standard library produces. + * Depending on the system and configuration, results may not + match exactly, at least with DNSPython. There are still some + rare cases where the system resolver can raise herror but + DNSPython will raise gaierror or vice versa. There doesn't + seem to be a deterministic way to account for this. On PyPy, + getnameinfo can produce results when CPython raises + socket.error, and gevent's DNSPython resolver also raises + socket.error. + * In addition, several other small discrepancies were + addressed, including handling of localhost and broadcast host + names. + * Note + * This has been tested on Linux (CentOS and Ubuntu), macOS, and + Windows. It hasn't been tested on other platforms, so results + are unknown for them. The c-ares support, in particular, is + using some additional socket functions and defines. Please + let the maintainers know if this introduces issues. + * See :issue:`1459`. + +- Update to version 20.04.0 (2020-04-22) + + Features + * Let CI (Travis and Appveyor) build and upload release wheels + for Windows, macOS and manylinux. As part of this, (a subset + of) gevent's tests can run if the standard library's + test.support module has been stripped. See :issue:`1555`. + * Update tested PyPy version from 7.2.0 on Windows to 7.3.1. + See :issue:`1569`. + + Bugfixes + * Fix a spurious warning about watchers and resource leaks on + libuv on Windows. Reported by Stéphane Rainville. See + :issue:`1564`. + * Make monkey-patching properly remove select.epoll and + select.kqueue. Reported by Kirill Smelkov. See :issue:`1570`. + * Make it possible to monkey-patch :mod:`contextvars` before + Python 3.7 if a non-standard backport that uses the same name + as the standard library does is installed. Previously this + would raise an error. Reported by Simon Davy. See + :issue:`1572`. + * Fix destroying the libuv default loop and then using the + default loop again. See :issue:`1580`. + * libuv loops that have watched children can now exit. + Previously, the SIGCHLD watcher kept the loop alive even if + there were no longer any watched children. See :issue:`1581`. + + Deprecations and Removals + * PyPy no longer uses the Python allocation functions for libuv + and libev allocations. See :issue:`1569`. + +- Use the system libev by default +- Remove fix-tests.patch +- Remove use-libev-cffi.patch +- Greatly reduce the list of non functional tests +- Add fix-no-return-in-nonvoid-function.patch, applied for 15.1 and + below in order to not fail the build +- Add missing runtime dependencies: + python-zope.event and python-zope.interface + ------------------------------------------------------------------- Fri Jan 3 11:51:00 CET 2020 - Matej Cepl diff --git a/python-gevent.spec b/python-gevent.spec index ee0166b..2409ef2 100644 --- a/python-gevent.spec +++ b/python-gevent.spec @@ -16,14 +16,18 @@ # -# DON'T USE FOR SLE, USES BUNDLED VERSION OF LIBEV!!! +# on TW, gevent is able to use system libev, Leaps et.al. need the bundled version +%if 0%{?suse_version} <= 1500 %define use_bundled_libev 1 +%else +%define use_bundled_libev 0 +%endif %{?!python_module:%define python_module() python-%{**} python3-%{**}} -%define modversion 1.5a3 +%define modversion 20.9.0 %define modname gevent Name: python-gevent -Version: 1.5.0~a3 +Version: 20.9.0 Release: 0 Summary: Python network library that uses greenlet and libevent License: MIT @@ -32,13 +36,15 @@ URL: http://www.gevent.org/ # Source: https://files.pythonhosted.org/packages/source/g/gevent/gevent-%%{version}.tar.gz Source0: https://github.com/gevent/%{modname}/archive/%{modversion}.tar.gz#/%{modname}-%{modversion}.tar.gz Source100: %{name}-rpmlintrc -Patch1: fix-tests.patch -Patch2: use-libev-cffi.patch +# gcc7 for 15.1 produces no-return-in-nonvoid-function, but the same compiler for 15.2 not +# usually, as long as no return value is used, this shouldn't be treated as an error +# let's selectively disable the warning around the offending code +Patch0: fix-no-return-in-nonvoid-function.patch BuildRequires: %{python_module Cython} BuildRequires: %{python_module cffi} BuildRequires: %{python_module devel} BuildRequires: %{python_module dnspython} -BuildRequires: %{python_module greenlet >= 0.4.14} +BuildRequires: %{python_module greenlet >= 0.4.17} BuildRequires: %{python_module mock} BuildRequires: %{python_module objgraph} BuildRequires: %{python_module psutil} @@ -53,7 +59,7 @@ BuildRequires: pkgconfig BuildRequires: python-rpm-macros BuildRequires: python3-testsuite BuildRequires: pkgconfig(libcares) -%if 0%{?use_bundled_libev} +%if ! 0%{use_bundled_libev} BuildRequires: pkgconfig(libev) %endif BuildRequires: pkgconfig(libuv) @@ -61,12 +67,12 @@ Requires: python-cffi Requires: python-dnspython Requires: python-greenlet Requires: python-requests +Requires: python-zope.event +Requires: python-zope.interface %if 0%{?suse_version} || 0%{?fedora_version} || 0%{?rhel} >= 8 Recommends: python-psutil -Recommends: python-zope.event %else Requires: python-psutil -Requires: python-zope.event %endif %python_subpackages @@ -98,8 +104,9 @@ Documentation and examples for %{name}. %prep %setup -q -n gevent-%{modversion} -%patch1 -p1 -%patch2 -p1 +%if 0%{?sle_version} <= 150100 && 0%{?is_opensuse} +%patch0 -p1 +%endif sed -i -e '1s!bin/env python!bin/python!' examples/*.py %build @@ -116,29 +123,22 @@ export CARES_EMBED=0 %check # create ignore list of tests that reach out to the net -# test_ssl.py is fragile as it expect specific responses from ssl and -# does not account to our local changes -# Also, gh#gevent/gevent#1390 -# Also, gh#gevent/gevent#1501 -# Test threading problems may be problem of bpo#36402, which has been -# fixed in 3.7.5. -cat <<'EOF' >> network_tests.txt -test__all__.py -test___config.py -test__doctests.py -test__examples.py -test__execmodules.py -test__getaddrinfo_import.py -test_httplib.py -test__socket_dns.py +cat << EOF > network_tests.txt +test__core_stat.py +%if 0%{?sle_version} <= 150200 && 0%{?is_opensuse} +test__destroy_default_loop.py +test__example_echoserver.py test_socket.py -test__socket_ssl.py -test__ssl.py -test_ssl.py -test_threading.py -test_urllib2_localnet.py -test_urllib2net.py -test_wsgiref.py +%endif +%if %{python3_version_nodots} < 37 +test__threading_2.py +%endif +test__examples.py +# this one fails occasionally with: Address already in use: ('127.0.0.1', 16000) +test__example_portforwarder.py +test__getaddrinfo_import.py +test__resolver_dnspython.py +test__socket_dns.py EOF export GEVENT_RESOLVER=thread # Setting the TRAVIS environment variable makes some different configuration @@ -148,7 +148,11 @@ export TRAVIS=1 # for Appveyor that we also need in obs for "wait_threads() failed to cleanup 1 threads" export APPVEYOR=1 export LANG=en_US.UTF-8 -%python_expand PYTHONPATH=%{buildroot}%{$python_sitearch} $python -m gevent.tests --ignore network_tests.txt +# don't bother with python2 tests +%{python_expand if [ "$python" != "python2" ]; then + PYTHONPATH=%{buildroot}%{$python_sitearch} $python -m gevent.tests --ignore network_tests.txt +fi +} %files %{python_files} %doc AUTHORS README.rst TODO CHANGES.rst CONTRIBUTING.rst diff --git a/use-libev-cffi.patch b/use-libev-cffi.patch deleted file mode 100644 index 1ef9a16..0000000 --- a/use-libev-cffi.patch +++ /dev/null @@ -1,23 +0,0 @@ -From: Antonio Larrosa -Subject: Fix failing tests - -libev-cext seems to be broken on i586, so use libev-cffi by default -(also, the gevent documentation mentions that upstream will make -libev-cffi the default soon [1]). - -[1] http://www.gevent.org/loop_impls.html#libev - -Index: gevent-1.4.0/src/gevent/_config.py -=================================================================== ---- gevent-1.4.0.orig/src/gevent/_config.py -+++ gevent-1.4.0/src/gevent/_config.py -@@ -352,8 +352,8 @@ class Loop(ImportableSetting, Setting): - """ - - default = [ -- 'libev-cext', - 'libev-cffi', -+ 'libev-cext', - 'libuv-cffi', - ] if not WIN else [ - 'libuv-cffi',