public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: dev-python/greenlet/, dev-python/greenlet/files/
@ 2020-03-16 22:27 Matt Turner
  0 siblings, 0 replies; 2+ messages in thread
From: Matt Turner @ 2020-03-16 22:27 UTC (permalink / raw
  To: gentoo-commits

commit:     7ba57dcd3ba259f31ccc0c8e1ff9fc4a395c8d8e
Author:     Matt Turner <mattst88 <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 16 22:23:44 2020 +0000
Commit:     Matt Turner <mattst88 <AT> gentoo <DOT> org>
CommitDate: Mon Mar 16 22:27:43 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7ba57dcd

dev-python/greenlet: Add Alpha support

greenlet-0.4.15-r1 was added to the tree for Python 3.8 support, but
some unknown mistake caused the KEYWORDS="-alpha -ia64 -hppa" to turn
into KEYWORDS="~alpha ~ia64 ~hppa". Might as well turn this lemon into
lemonade.

Signed-off-by: Matt Turner <mattst88 <AT> gentoo.org>

 ...greenlet-0.4.15-Add-support-for-DEC-Alpha.patch | 63 ++++++++++++++++++++++
 dev-python/greenlet/greenlet-0.4.15-r1.ebuild      |  4 ++
 2 files changed, 67 insertions(+)

diff --git a/dev-python/greenlet/files/greenlet-0.4.15-Add-support-for-DEC-Alpha.patch b/dev-python/greenlet/files/greenlet-0.4.15-Add-support-for-DEC-Alpha.patch
new file mode 100644
index 00000000000..6a5b37b0e94
--- /dev/null
+++ b/dev-python/greenlet/files/greenlet-0.4.15-Add-support-for-DEC-Alpha.patch
@@ -0,0 +1,63 @@
+https://github.com/python-greenlet/greenlet/pull/160
+
+From 839dfa8d4bc4e9a0b97a1984ab2519841f5511e4 Mon Sep 17 00:00:00 2001
+From: Matt Turner <mattst88@gmail.com>
+Date: Mon, 16 Mar 2020 14:38:21 -0700
+Subject: [PATCH] Add support for DEC Alpha
+
+---
+ platform/switch_alpha_unix.h | 30 ++++++++++++++++++++++++++++++
+ slp_platformselect.h         |  2 ++
+ 2 files changed, 32 insertions(+)
+ create mode 100644 platform/switch_alpha_unix.h
+
+diff --git a/platform/switch_alpha_unix.h b/platform/switch_alpha_unix.h
+new file mode 100644
+index 0000000..216619f
+--- /dev/null
++++ b/platform/switch_alpha_unix.h
+@@ -0,0 +1,30 @@
++#define STACK_REFPLUS 1
++
++#ifdef SLP_EVAL
++#define STACK_MAGIC 0
++
++#define REGS_TO_SAVE "$9", "$10", "$11", "$12", "$13", "$14", "$15", \
++		     "$f2", "$f3", "$f4", "$f5", "$f6", "$f7", "$f8", "$f9"
++
++static int
++slp_switch(void)
++{
++  register int ret;
++  register long *stackref, stsizediff;
++  __asm__ volatile ("" : : : REGS_TO_SAVE);
++  __asm__ volatile ("mov $30, %0" : "=r" (stackref) : );
++  {
++      SLP_SAVE_STATE(stackref, stsizediff);
++      __asm__ volatile (
++	  "addq $30, %0, $30\n\t"
++	  : /* no outputs */
++	  : "r" (stsizediff)
++	  );
++      SLP_RESTORE_STATE();
++  }
++  __asm__ volatile ("" : : : REGS_TO_SAVE);
++  __asm__ volatile ("mov $31, %0" : "=r" (ret) : );
++  return ret;
++}
++
++#endif
+diff --git a/slp_platformselect.h b/slp_platformselect.h
+index bed9e6d..fb99aed 100644
+--- a/slp_platformselect.h
++++ b/slp_platformselect.h
+@@ -51,4 +51,6 @@
+ #include "platform/switch_csky_gcc.h" /* gcc on csky */
+ #elif defined(__GNUC__) && defined(__riscv)
+ #include "platform/switch_riscv_unix.h" /* gcc on RISC-V */
++#elif defined(__GNUC__) && defined(__alpha__)
++#include "platform/switch_alpha_unix.h" /* gcc on DEC Alpha */
+ #endif
+-- 
+2.24.1
+

diff --git a/dev-python/greenlet/greenlet-0.4.15-r1.ebuild b/dev-python/greenlet/greenlet-0.4.15-r1.ebuild
index 3aa34d75264..25d63b0fc09 100644
--- a/dev-python/greenlet/greenlet-0.4.15-r1.ebuild
+++ b/dev-python/greenlet/greenlet-0.4.15-r1.ebuild
@@ -19,6 +19,10 @@ IUSE="doc"
 
 BDEPEND="dev-python/setuptools[${PYTHON_USEDEP}]"
 
+PATCHES=(
+	"${FILESDIR}"/${P}-Add-support-for-DEC-Alpha.patch
+)
+
 DISTUTILS_IN_SOURCE_BUILD=1
 
 distutils_enable_sphinx doc


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: dev-python/greenlet/, dev-python/greenlet/files/
@ 2024-07-09 15:30 Michał Górny
  0 siblings, 0 replies; 2+ messages in thread
From: Michał Górny @ 2024-07-09 15:30 UTC (permalink / raw
  To: gentoo-commits

commit:     d445e348b76c66984a68ae9404453a9e8d7f7558
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Jul  9 15:15:48 2024 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Jul  9 15:30:47 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d445e348

dev-python/greenlet: Enable py3.13

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 .../greenlet/files/greenlet-3.0.3-py313.patch      | 225 +++++++++++++++++++++
 dev-python/greenlet/greenlet-3.0.3-r1.ebuild       |  53 +++++
 2 files changed, 278 insertions(+)

diff --git a/dev-python/greenlet/files/greenlet-3.0.3-py313.patch b/dev-python/greenlet/files/greenlet-3.0.3-py313.patch
new file mode 100644
index 000000000000..195acae3fa6d
--- /dev/null
+++ b/dev-python/greenlet/files/greenlet-3.0.3-py313.patch
@@ -0,0 +1,225 @@
+diff --git a/src/greenlet/TPythonState.cpp b/src/greenlet/TPythonState.cpp
+index 465d4174..82eb34f0 100644
+--- a/src/greenlet/TPythonState.cpp
++++ b/src/greenlet/TPythonState.cpp
+@@ -18,7 +18,11 @@ PythonState::PythonState()
+ #else
+     ,recursion_depth(0)
+ #endif
++#if GREENLET_PY313
++    ,delete_later(nullptr)
++#else
+     ,trash_delete_nesting(0)
++#endif
+ #if GREENLET_PY311
+     ,current_frame(nullptr)
+     ,datastack_chunk(nullptr)
+@@ -130,11 +134,15 @@ void PythonState::operator<<(const PyThreadState *const tstate) noexcept
+ #if GREENLET_PY311
+   #if GREENLET_PY312
+     this->py_recursion_depth = tstate->py_recursion_limit - tstate->py_recursion_remaining;
+-    this->c_recursion_depth = C_RECURSION_LIMIT - tstate->c_recursion_remaining;
++    this->c_recursion_depth = Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining;
+   #else // not 312
+     this->recursion_depth = tstate->recursion_limit - tstate->recursion_remaining;
+   #endif // GREENLET_PY312
++  #if GREENLET_PY313
++    this->current_frame = tstate->current_frame;
++  #elif GREENLET_USE_CFRAME
+     this->current_frame = tstate->cframe->current_frame;
++  #endif
+     this->datastack_chunk = tstate->datastack_chunk;
+     this->datastack_top = tstate->datastack_top;
+     this->datastack_limit = tstate->datastack_limit;
+@@ -143,7 +151,9 @@ void PythonState::operator<<(const PyThreadState *const tstate) noexcept
+     Py_XDECREF(frame);  // PyThreadState_GetFrame gives us a new
+                         // reference.
+     this->_top_frame.steal(frame);
+-  #if GREENLET_PY312
++  #if GREENLET_PY313
++    this->delete_later = Py_XNewRef(tstate->delete_later);
++  #elif GREENLET_PY312
+     this->trash_delete_nesting = tstate->trash.delete_nesting;
+   #else // not 312
+     this->trash_delete_nesting = tstate->trash_delete_nesting;
+@@ -199,17 +209,25 @@ void PythonState::operator>>(PyThreadState *const tstate) noexcept
+ #if GREENLET_PY311
+   #if GREENLET_PY312
+     tstate->py_recursion_remaining = tstate->py_recursion_limit - this->py_recursion_depth;
+-    tstate->c_recursion_remaining = C_RECURSION_LIMIT - this->c_recursion_depth;
++    tstate->c_recursion_remaining = Py_C_RECURSION_LIMIT - this->c_recursion_depth;
+     this->unexpose_frames();
+   #else // \/ 3.11
+     tstate->recursion_remaining = tstate->recursion_limit - this->recursion_depth;
+   #endif // GREENLET_PY312
++  #if GREENLET_PY313
++    tstate->current_frame = this->current_frame;
++  #elif GREENLET_USE_CFRAME
+     tstate->cframe->current_frame = this->current_frame;
++  #endif
+     tstate->datastack_chunk = this->datastack_chunk;
+     tstate->datastack_top = this->datastack_top;
+     tstate->datastack_limit = this->datastack_limit;
+     this->_top_frame.relinquish_ownership();
+-  #if GREENLET_PY312
++  #if GREENLET_PY313
++    Py_XDECREF(tstate->delete_later);
++    tstate->delete_later = this->delete_later;
++    Py_CLEAR(this->delete_later);
++  #elif GREENLET_PY312
+     tstate->trash.delete_nesting = this->trash_delete_nesting;
+   #else // not 3.12
+     tstate->trash_delete_nesting = this->trash_delete_nesting;
+@@ -238,7 +256,7 @@ void PythonState::set_initial_state(const PyThreadState* const tstate) noexcept
+ #if GREENLET_PY312
+     this->py_recursion_depth = tstate->py_recursion_limit - tstate->py_recursion_remaining;
+     // XXX: TODO: Comment from a reviewer:
+-    //     Should this be ``C_RECURSION_LIMIT - tstate->c_recursion_remaining``?
++    //     Should this be ``Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining``?
+     // But to me it looks more like that might not be the right
+     // initialization either?
+     this->c_recursion_depth = tstate->py_recursion_limit - tstate->py_recursion_remaining;
+diff --git a/src/greenlet/greenlet.cpp b/src/greenlet/greenlet.cpp
+index 5a9818e8..dfc748a8 100644
+--- a/src/greenlet/greenlet.cpp
++++ b/src/greenlet/greenlet.cpp
+@@ -1328,6 +1328,7 @@ mod_enable_optional_cleanup(PyObject* UNUSED(module), PyObject* flag)
+     Py_RETURN_NONE;
+ }
+ 
++#if !GREENLET_PY313
+ PyDoc_STRVAR(mod_get_tstate_trash_delete_nesting_doc,
+              "get_tstate_trash_delete_nesting() -> Integer\n"
+              "\n"
+@@ -1343,6 +1344,7 @@ mod_get_tstate_trash_delete_nesting(PyObject* UNUSED(module))
+     return PyLong_FromLong(tstate->trash_delete_nesting);
+ #endif
+ }
++#endif
+ 
+ static PyMethodDef GreenMethods[] = {
+     {"getcurrent",
+@@ -1356,7 +1358,9 @@ static PyMethodDef GreenMethods[] = {
+     {"get_total_main_greenlets", (PyCFunction)mod_get_total_main_greenlets, METH_NOARGS, mod_get_total_main_greenlets_doc},
+     {"get_clocks_used_doing_optional_cleanup", (PyCFunction)mod_get_clocks_used_doing_optional_cleanup, METH_NOARGS, mod_get_clocks_used_doing_optional_cleanup_doc},
+     {"enable_optional_cleanup", (PyCFunction)mod_enable_optional_cleanup, METH_O, mod_enable_optional_cleanup_doc},
++#if !GREENLET_PY313
+     {"get_tstate_trash_delete_nesting", (PyCFunction)mod_get_tstate_trash_delete_nesting, METH_NOARGS, mod_get_tstate_trash_delete_nesting_doc},
++#endif
+     {NULL, NULL} /* Sentinel */
+ };
+ 
+diff --git a/src/greenlet/greenlet_cpython_compat.hpp b/src/greenlet/greenlet_cpython_compat.hpp
+index cdc1617f..ce5fd882 100644
+--- a/src/greenlet/greenlet_cpython_compat.hpp
++++ b/src/greenlet/greenlet_cpython_compat.hpp
+@@ -12,19 +12,24 @@
+ 
+ #if PY_VERSION_HEX >= 0x30A00B1
+ #    define GREENLET_PY310 1
++#else
++#    define GREENLET_PY310 0
++#endif
++
+ /*
+ Python 3.10 beta 1 changed tstate->use_tracing to a nested cframe member.
+ See https://github.com/python/cpython/pull/25276
+ We have to save and restore this as well.
++
++Python 3.13 removed PyThreadState.cframe (GH-108035).
+ */
++#if GREENLET_PY310 && PY_VERSION_HEX < 0x30D0000
+ #    define GREENLET_USE_CFRAME 1
+ #else
+ #    define GREENLET_USE_CFRAME 0
+-#    define GREENLET_PY310 0
+ #endif
+ 
+ 
+-
+ #if PY_VERSION_HEX >= 0x30B00A4
+ /*
+ Greenlet won't compile on anything older than Python 3.11 alpha 4 (see
+@@ -50,6 +55,12 @@ Greenlet won't compile on anything older than Python 3.11 alpha 4 (see
+ #    define GREENLET_PY312 0
+ #endif
+ 
++#if PY_VERSION_HEX >= 0x30D0000
++#    define GREENLET_PY313 1
++#else
++#    define GREENLET_PY313 0
++#endif
++
+ #ifndef Py_SET_REFCNT
+ /* Py_REFCNT and Py_SIZE macros are converted to functions
+ https://bugs.python.org/issue39573 */
+@@ -124,4 +135,8 @@ static inline void PyThreadState_LeaveTracing(PyThreadState *tstate)
+ }
+ #endif
+ 
++#if !defined(Py_C_RECURSION_LIMIT) && defined(C_RECURSION_LIMIT)
++#  define Py_C_RECURSION_LIMIT C_RECURSION_LIMIT
++#endif
++
+ #endif /* GREENLET_CPYTHON_COMPAT_H */
+diff --git a/src/greenlet/greenlet_greenlet.hpp b/src/greenlet/greenlet_greenlet.hpp
+index d52ce1fd..fbfdfbfc 100644
+--- a/src/greenlet/greenlet_greenlet.hpp
++++ b/src/greenlet/greenlet_greenlet.hpp
+@@ -23,6 +23,7 @@ using greenlet::refs::BorrowedGreenlet;
+ #endif
+ 
+ #if GREENLET_PY312
++#  define Py_BUILD_CORE
+ #  include "internal/pycore_frame.h"
+ #endif
+ 
+@@ -110,7 +111,11 @@ namespace greenlet
+ #else
+         int recursion_depth;
+ #endif
++#if GREENLET_PY313
++        PyObject *delete_later;
++#else
+         int trash_delete_nesting;
++#endif
+ #if GREENLET_PY311
+         _PyInterpreterFrame* current_frame;
+         _PyStackChunk* datastack_chunk;
+diff --git a/src/greenlet/tests/test_greenlet.py b/src/greenlet/tests/test_greenlet.py
+index 51849cd6..259707ae 100644
+--- a/src/greenlet/tests/test_greenlet.py
++++ b/src/greenlet/tests/test_greenlet.py
+@@ -471,7 +471,9 @@ def creator():
+         # Unfortunately, this doesn't actually clear the references, they're in the
+         # fast local array.
+         if not wait_for_cleanup:
+-            result[0].gr_frame.f_locals.clear()
++            # f_locals has no clear method in Python 3.13
++            if hasattr(result[0].gr_frame.f_locals, 'clear'):
++                result[0].gr_frame.f_locals.clear()
+         else:
+             self.assertIsNone(result[0].gr_frame)
+ 
+diff --git a/src/greenlet/tests/test_greenlet_trash.py b/src/greenlet/tests/test_greenlet_trash.py
+index 8d9716e9..2bce8fd0 100644
+--- a/src/greenlet/tests/test_greenlet_trash.py
++++ b/src/greenlet/tests/test_greenlet_trash.py
+@@ -29,8 +29,17 @@
+ 
+ import unittest
+ 
++try:
++    from greenlet._greenlet import get_tstate_trash_delete_nesting
++except ImportError:
++    get_tstate_trash_delete_nesting = None
++
++
+ class TestTrashCanReEnter(unittest.TestCase):
+ 
++    # Python 3.13 has not "trash delete nesting" anymore (but "delete later")
++    @unittest.skipIf(get_tstate_trash_delete_nesting is None,
++                     'need get_tstate_trash_delete_nesting()')
+     def test_it(self):
+         # Try several times to trigger it, because it isn't 100%
+         # reliable.

diff --git a/dev-python/greenlet/greenlet-3.0.3-r1.ebuild b/dev-python/greenlet/greenlet-3.0.3-r1.ebuild
new file mode 100644
index 000000000000..35dc7896bb52
--- /dev/null
+++ b/dev-python/greenlet/greenlet-3.0.3-r1.ebuild
@@ -0,0 +1,53 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+# Note: greenlet is built-in in pypy
+PYTHON_COMPAT=( python3_{10..13} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Lightweight in-process concurrent programming"
+HOMEPAGE="
+	https://greenlet.readthedocs.io/en/latest/
+	https://github.com/python-greenlet/greenlet/
+	https://pypi.org/project/greenlet/
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 -hppa -ia64 ~m68k ~mips ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~x64-macos"
+
+BDEPEND="
+	test? (
+		dev-python/objgraph[${PYTHON_USEDEP}]
+		dev-python/psutil[${PYTHON_USEDEP}]
+	)
+"
+
+distutils_enable_sphinx docs \
+	dev-python/furo
+distutils_enable_tests unittest
+
+src_prepare() {
+	local PATCHES=(
+		# https://github.com/python-greenlet/greenlet/pull/396
+		"${FILESDIR}/${P}-py313.patch"
+	)
+
+	distutils-r1_src_prepare
+
+	# patch cflag manipulations out
+	sed -i -e 's:global_compile_args[.]append.*:pass:' setup.py || die
+	# broken assertions on py3.12+
+	# https://github.com/python-greenlet/greenlet/issues/368
+	sed -e 's:test_trace_events_multiple_greenlets_switching:_&: ' \
+		-i src/greenlet/tests/test_tracing.py || die
+}
+
+python_test() {
+	eunittest greenlet.tests
+}


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-07-09 15:31 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-03-16 22:27 [gentoo-commits] repo/gentoo:master commit in: dev-python/greenlet/, dev-python/greenlet/files/ Matt Turner
  -- strict thread matches above, loose matches on Subject: below --
2024-07-09 15:30 Michał Górny

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox