[packages/python-greenlet] Version: 0.4.2, python3 support added
jajcus
jajcus at pld-linux.org
Fri Feb 21 10:37:44 CET 2014
commit f818725e465db7a6d6cf36e3acecd888700bdb5a
Author: Jacek Konieczny <j.konieczny at eggsoft.pl>
Date: Fri Feb 21 08:32:44 2014 +0100
Version: 0.4.2, python3 support added
– Patches removed – it is not clear what they were supposed to fix, they
are not used upstream and they were dropped in Fedora too.
– License updated – part of the code is licensed under MIT, other part
under PSF.
– Use currently built module when running the benchmark
get-rid-of-ts_origin.patch | 106 -----------------------------------------
i686-register-fixes.patch | 62 ------------------------
python-greenlet.spec | 115 ++++++++++++++++++++++++++++++++++-----------
3 files changed, 88 insertions(+), 195 deletions(-)
---
diff --git a/python-greenlet.spec b/python-greenlet.spec
index 4dbb9cf..ae71875 100644
--- a/python-greenlet.spec
+++ b/python-greenlet.spec
@@ -1,25 +1,43 @@
-#
+
+# TODO:
+# one of two happens when building 'with python2_tests':
+# - FAIL: test_threaded_adv_leak (tests.test_leaks.ArgRefcountTests)
+# or:
+# - PYTHONPATH=/home/users/jajcus/rpm/BUILD/greenlet-0.4.2/build/lib.linux-i686-2.7 /usr/bin/python benchmarks/chain.py
+# python: Objects/object.c:2453: _PyTrash_thread_deposit_object: Assertion `((((((((PyObject*)(op))->ob_type)))->tp_flags & ((1L<<14))) != 0) && ((((PyObject*)(op))->ob_type)->tp_is_gc == ((void *)0) || (((PyObject*)(op))->ob_type)->tp_is_gc(op)))' failed.
+# Result:Aborted
+
# Conditional build:
%bcond_without tests # do not perform "make test"
+%bcond_without python2 # CPython 2.x module
+%bcond_without python3 # CPython 3.x module
+%bcond_without python2_tests # CPython 2.x module tests
+
+%if %{without tests}
+%undefine with_python2_tests
+%endif
%define module greenlet
Summary: Lightweight in-process concurrent programming
Name: python-%{module}
-Version: 0.3.1
-Release: 1
-License: MIT
-Group: Development/Libraries
+Version: 0.4.2
+Release: 0.1
+License: MIT & PSF
+Group: Libraries/Python
URL: http://pypi.python.org/pypi/greenlet
-Source0: http://pypi.python.org/packages/source/g/greenlet/%{module}-%{version}.tar.gz
-# Source0-md5: 8d75d7f3f659e915e286e1b0fa0e1c4d
-# Based on https://bitbucket.org/ambroff/greenlet/changeset/2d5b17472757
-# slightly fixed up to apply cleanly. Avoid rhbz#746771
-Patch1: get-rid-of-ts_origin.patch
-# Apply https://bitbucket.org/ambroff/greenlet/changeset/25bf29f4d3b7
-# to fix the i686 crash in rhbz#746771
-Patch2: i686-register-fixes.patch
+Source0: http://pypi.python.org/packages/source/g/greenlet/%{module}-%{version}.zip
+# Source0-md5: 580a8a5e833351f7abdaedb1a877f7ac
+%if %{with python2}
BuildRequires: python-devel
BuildRequires: python-setuptools
+%endif
+%if %{with python3}
+BuildRequires: python3-2to3
+BuildRequires: python3-devel
+BuildRequires: python3-distribute
+BuildRequires: python3-modules
+%endif
+BuildRequires: rpmbuild(macros) >= 1.219
BuildRequires: rpm-pythonprov
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
@@ -37,48 +55,91 @@ Requires: %{name} = %{version}-%{release}
%description devel
This package contains header files required for C modules development.
+%package -n python3-%{module}
+Summary: Lightweight in-process concurrent programming
+Group: Libraries/Python
+
+%description -n python3-%{module}
+The greenlet package is a spin-off of Stackless, a version of CPython
+that supports micro-threads called "tasklets". Tasklets run
+pseudo-concurrently (typically in a single or a few OS-level threads)
+and are synchronized with data exchanges on "channels".
+
+%package -n python3-%{module}-devel
+Summary: C development headers for python3-greenlet
+Group: Development/Libraries
+Requires: python3-%{module} = %{version}-%{release}
+
+%description -n python3-%{module}-devel
+This package contains header files required for C modules development.
+
%prep
%setup -q -n greenlet-%{version}
-%patch1 -p1
-%patch2 -p1
%build
+%if %{with python2}
CC="%{__cc}" \
CFLAGS="%{rpmcflags}" \
%{__python} setup.py build
-%if %{with tests}
-# FIXME!!
-# The checks segfault on ppc64. So this arch
-# is essentially not supported until this is fixed
-%ifnarch ppc ppc64 s390 s390x
-# Run the upstream test suite:
+%if %{with python2_tests}
%{__python} setup.py test
# Run the upstream benchmarking suite to further exercise the code:
-PYTHONPATH=$(pwd) %{__python} benchmarks/chain.py
-PYTHONPATH=$(pwd) %{__python} benchmarks/switch.py
+PYTHONPATH=$(echo $(pwd)/build/lib.*-2.?) %{__python} benchmarks/chain.py
+%endif
+%endif
+
+%if %{with python3}
+# CC/CFLAGS is only for arch packages - remove on noarch packages
+CC="%{__cc}" \
+CFLAGS="%{rpmcflags}" \
+%{__python3} setup.py build %{?with_tests:test}
+
+%if %{with tests}
+# Run the upstream benchmarking suite to further exercise the code:
+mkdir -p benchmarks-3
+2to3-3.3 -o benchmarks-3 -n -w --no-diffs benchmarks
+PYTHONPATH=$(echo $(pwd)/build/lib.*-3.?) %{__python3} benchmarks-3/chain.py
%endif
%endif
%install
-rm -rf $RPM_BUILD_ROOT
-%{__python} setup.py install \
- --skip-build \
+%if %{with python2}
+%{__python} setup.py \
+ install --skip-build \
--optimize=2 \
--root=$RPM_BUILD_ROOT
%py_postclean
+%endif
+
+%if %{with python3}
+%{__python3} setup.py \
+ install --skip-build \
+ --optimize=2 \
+ --root=$RPM_BUILD_ROOT
+%endif
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(644,root,root,755)
-%doc doc/greenlet.txt README benchmarks AUTHORS NEWS
+%doc doc/greenlet.txt README.rst benchmarks AUTHORS NEWS LICENSE
%attr(755,root,root) %{py_sitedir}/%{module}.so
%{py_sitedir}/%{module}*.egg-info
%files devel
%defattr(644,root,root,755)
%{_includedir}/python%{py_ver}/greenlet
+
+%files -n python3-%{module}
+%defattr(644,root,root,755)
+%doc doc/greenlet.txt README.rst benchmarks AUTHORS NEWS LICENSE
+%attr(755,root,root) %{py3_sitedir}/%{module}.*.so
+%{py3_sitedir}/%{module}*.egg-info
+
+%files -n python3-%{module}-devel
+%defattr(644,root,root,755)
+%{_includedir}/python%{py3_ver}*/greenlet
diff --git a/get-rid-of-ts_origin.patch b/get-rid-of-ts_origin.patch
deleted file mode 100644
index 0840b5f..0000000
--- a/get-rid-of-ts_origin.patch
+++ /dev/null
@@ -1,106 +0,0 @@
-diff -up greenlet-0.3.1/greenlet.c.get-rid-of-ts_origin greenlet-0.3.1/greenlet.c
---- greenlet-0.3.1/greenlet.c.get-rid-of-ts_origin 2010-04-05 17:24:25.000000000 -0400
-+++ greenlet-0.3.1/greenlet.c 2011-10-19 13:59:30.485035920 -0400
-@@ -116,10 +116,8 @@ extern PyTypeObject PyGreenlet_Type;
-
- /* The current greenlet in this thread state (holds a reference) */
- static PyGreenlet* ts_current = NULL;
--/* Holds a reference to the switching-from stack during the slp switch */
--static PyGreenlet* ts_origin = NULL;
- /* Holds a reference to the switching-to stack during the slp switch */
--static PyGreenlet* ts_target = NULL;
-+static PyGreenlet* volatile ts_target = NULL;
- /* NULL if error, otherwise args tuple to pass around during slp switch */
- static PyObject* ts_passaround_args = NULL;
- static PyObject* ts_passaround_kwargs = NULL;
-@@ -257,6 +255,7 @@ static int g_save(PyGreenlet* g, char* s
- static void slp_restore_state(void)
- {
- PyGreenlet* g = ts_target;
-+ PyGreenlet* owner = ts_current;
-
- /* Restore the heap copy back into the C stack */
- if (g->stack_saved != 0) {
-@@ -265,30 +264,32 @@ static void slp_restore_state(void)
- g->stack_copy = NULL;
- g->stack_saved = 0;
- }
-- if (ts_current->stack_stop == g->stack_stop)
-- g->stack_prev = ts_current->stack_prev;
-- else
-- g->stack_prev = ts_current;
-+ if (owner->stack_start == NULL)
-+ owner = owner->stack_prev; /* greenlet is dying, skip it */
-+ while (owner && owner->stack_stop <= g->stack_stop)
-+ owner = owner->stack_prev; /* find greenlet with more stack */
-+ g->stack_prev = owner;
- }
-
- static int slp_save_state(char* stackref)
- {
- /* must free all the C stack up to target_stop */
- char* target_stop = ts_target->stack_stop;
-- assert(ts_current->stack_saved == 0);
-- if (ts_current->stack_start == NULL)
-- ts_current = ts_current->stack_prev; /* not saved if dying */
-+ PyGreenlet* owner = ts_current;
-+ assert(owner->stack_saved == 0);
-+ if (owner->stack_start == NULL)
-+ owner = owner->stack_prev; /* not saved if dying */
- else
-- ts_current->stack_start = stackref;
-+ owner->stack_start = stackref;
-
-- while (ts_current->stack_stop < target_stop) {
-+ while (owner->stack_stop < target_stop) {
- /* ts_current is entierely within the area to free */
-- if (g_save(ts_current, ts_current->stack_stop))
-+ if (g_save(owner, owner->stack_stop))
- return -1; /* XXX */
-- ts_current = ts_current->stack_prev;
-+ owner = owner->stack_prev;
- }
-- if (ts_current != ts_target) {
-- if (g_save(ts_current, target_stop))
-+ if (owner != ts_target) {
-+ if (g_save(owner, target_stop))
- return -1; /* XXX */
- }
- return 0;
-@@ -337,11 +338,11 @@ static int g_switchstack(void)
- */
- int err;
- { /* save state */
-+ PyGreenlet* current = ts_current;
- PyThreadState* tstate = PyThreadState_GET();
-- ts_current->recursion_depth = tstate->recursion_depth;
-- ts_current->top_frame = tstate->frame;
-+ current->recursion_depth = tstate->recursion_depth;
-+ current->top_frame = tstate->frame;
- }
-- ts_origin = ts_current;
- err = _PyGreenlet_slp_switch();
- if (err < 0) { /* error */
- Py_XDECREF(ts_passaround_args);
-@@ -351,13 +352,15 @@ static int g_switchstack(void)
- ts_passaround_kwargs = NULL;
- }
- else {
-+ PyGreenlet* target = ts_target;
-+ PyGreenlet* origin = ts_current;
- PyThreadState* tstate = PyThreadState_GET();
-- tstate->recursion_depth = ts_target->recursion_depth;
-- tstate->frame = ts_target->top_frame;
-- ts_target->top_frame = NULL;
-- ts_current = ts_target;
-- Py_INCREF(ts_target);
-- Py_DECREF(ts_origin);
-+ tstate->recursion_depth = target->recursion_depth;
-+ tstate->frame = target->top_frame;
-+ target->top_frame = NULL;
-+ ts_current = target;
-+ Py_INCREF(target);
-+ Py_DECREF(origin);
- }
- return err;
- }
diff --git a/i686-register-fixes.patch b/i686-register-fixes.patch
deleted file mode 100644
index b7a26d0..0000000
--- a/i686-register-fixes.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-# HG changeset patch
-# User Alexey Borzenkov <snaury at gmail.com>
-# Date 1313701525 -14400
-# Node ID 25bf29f4d3b79b026c1c05787bb741a8e7ef2229
-# Parent c0bf397a723d4b61d7ef78cf575dea4c0fdb527e
-Fix compilation and register problems on some i386 configurations
-
-diff -r c0bf397a723d4b61d7ef78cf575dea4c0fdb527e -r 25bf29f4d3b79b026c1c05787bb741a8e7ef2229 platform/switch_x86_unix.h
---- a/platform/switch_x86_unix.h Thu Aug 18 02:44:20 2011 +0400
-+++ b/platform/switch_x86_unix.h Fri Aug 19 01:05:25 2011 +0400
-@@ -2,6 +2,8 @@
- * this is the internal transfer function.
- *
- * HISTORY
-+ * 19-Aug-11 Alexey Borzenkov <snaury at gmail.com>
-+ * Correctly save ebp, ebx and cw
- * 07-Sep-05 (py-dev mailing list discussion)
- * removed 'ebx' from the register-saved. !!!! WARNING !!!!
- * It means that this file can no longer be compiled statically!
-@@ -34,18 +36,13 @@
- static int
- slp_switch(void)
- {
-+ void *ebp, *ebx;
-+ unsigned short cw;
- register int *stackref, stsizediff;
-- /* !!!!WARNING!!!! need to add "ebx" in the next line, as well as in the
-- * last line of this function, if this header file is meant to be compiled
-- * non-dynamically!
-- */
-- __asm__ volatile ("" : : :
-- "esi",
-- "edi"
--#ifdef __MINGW32__
-- , "ebx"
--#endif
-- );
-+ __asm__ volatile ("" : : : "esi", "edi");
-+ __asm__ volatile ("fstcw %0" : "=m" (cw));
-+ __asm__ volatile ("movl %%ebp, %0" : "=m" (ebp));
-+ __asm__ volatile ("movl %%ebx, %0" : "=m" (ebx));
- __asm__ ("movl %%esp, %0" : "=g" (stackref));
- {
- SLP_SAVE_STATE(stackref, stsizediff);
-@@ -57,13 +54,10 @@
- );
- SLP_RESTORE_STATE();
- }
-- __asm__ volatile ("" : : :
-- "esi",
-- "edi"
--#ifdef __MINGW32__
-- , "ebx"
--#endif
-- );
-+ __asm__ volatile ("movl %0, %%ebx" : : "m" (ebx));
-+ __asm__ volatile ("movl %0, %%ebp" : : "m" (ebp));
-+ __asm__ volatile ("fldcw %0" : : "m" (cw));
-+ __asm__ volatile ("" : : : "esi", "edi");
- return 0;
- }
-
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/python-greenlet.git/commitdiff/f818725e465db7a6d6cf36e3acecd888700bdb5a
More information about the pld-cvs-commit
mailing list