1{
2 stdenv,
3 lib,
4 buildPythonPackage,
5 fetchPypi,
6
7 # build-system
8 setuptools,
9
10 # tests
11 objgraph,
12 psutil,
13 python,
14 unittestCheckHook,
15}:
16
17let
18 greenlet = buildPythonPackage rec {
19 pname = "greenlet";
20 version = "3.2.3";
21 pyproject = true;
22
23 src = fetchPypi {
24 inherit pname version;
25 hash = "sha256-iw3YrkwNb15U7lW6k17rPXNam1iooeW1y6tk4Bo582U=";
26 };
27
28 build-system = [ setuptools ];
29
30 # tests in passthru, infinite recursion via objgraph/graphviz
31 doCheck = false;
32
33 nativeCheckInputs = [
34 objgraph
35 psutil
36 unittestCheckHook
37 ];
38
39 # https://github.com/python-greenlet/greenlet/issues/395
40 env.NIX_CFLAGS_COMPILE = lib.optionalString (
41 stdenv.hostPlatform.isPower64 || stdenv.hostPlatform.isLoongArch64
42 ) "-fomit-frame-pointer";
43
44 preCheck = ''
45 pushd ${placeholder "out"}/${python.sitePackages}
46 '';
47
48 unittestFlagsArray = [ "greenlet.tests" ];
49
50 postCheck = ''
51 popd
52 '';
53
54 passthru.tests.pytest = greenlet.overridePythonAttrs (_: {
55 doCheck = true;
56 });
57
58 meta = with lib; {
59 changelog = "https://github.com/python-greenlet/greenlet/blob/${version}/CHANGES.rst";
60 homepage = "https://github.com/python-greenlet/greenlet";
61 description = "Module for lightweight in-process concurrent programming";
62 license = with licenses; [
63 psfl # src/greenlet/slp_platformselect.h & files in src/greenlet/platform/ directory
64 mit
65 ];
66 };
67 };
68in
69greenlet