From 75e31ca6b23700b5d9304c01d16de62be52d419c Mon Sep 17 00:00:00 2001 From: Liam Murphy Date: Sun, 22 Jun 2025 10:47:29 +1000 Subject: [PATCH 1/2] pycapnp: update to Cython 3 --- pkgs/development/python-modules/pycapnp/default.nix | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/pycapnp/default.nix b/pkgs/development/python-modules/pycapnp/default.nix index 51f36bd86eec..51432b13e9b3 100644 --- a/pkgs/development/python-modules/pycapnp/default.nix +++ b/pkgs/development/python-modules/pycapnp/default.nix @@ -2,8 +2,9 @@ lib, buildPythonPackage, capnproto, - cython_0, + cython, fetchFromGitHub, + fetchpatch2, isPy27, isPyPy, pkgconfig, @@ -22,8 +23,16 @@ buildPythonPackage rec { sha256 = "sha256-SVeBRJMMR1Z8+S+QoiUKGRFGUPS/MlmWLi1qRcGcPoE="; }; + patches = [ + (fetchpatch2 { + name = "cython-3.patch"; + url = "https://github.com/capnproto/pycapnp/pull/334.diff?full_index=1"; + hash = "sha256-we7v4RaL7c1tePWl+oYfzMHAfnvnpdMkQgVu9YLwC6Y="; + }) + ]; + nativeBuildInputs = [ - cython_0 + cython pkgconfig ]; From e12a71c71704d17ee2b00eba3699b0d5764234b0 Mon Sep 17 00:00:00 2001 From: Liam Murphy Date: Sun, 22 Jun 2025 20:17:49 +1000 Subject: [PATCH 2/2] pycapnp: adopt, cleanup --- .../python-modules/pycapnp/default.nix | 55 ++++++++++++++----- .../pycapnp/include-paths.patch | 14 +++++ 2 files changed, 54 insertions(+), 15 deletions(-) create mode 100644 pkgs/development/python-modules/pycapnp/include-paths.patch diff --git a/pkgs/development/python-modules/pycapnp/default.nix b/pkgs/development/python-modules/pycapnp/default.nix index 51432b13e9b3..f06b010a5467 100644 --- a/pkgs/development/python-modules/pycapnp/default.nix +++ b/pkgs/development/python-modules/pycapnp/default.nix @@ -1,29 +1,41 @@ { lib, buildPythonPackage, - capnproto, - cython, + replaceVars, fetchFromGitHub, fetchpatch2, - isPy27, - isPyPy, + setuptools, + wheel, + capnproto, + cython, pkgconfig, + pytest-asyncio, + pytestCheckHook, }: buildPythonPackage rec { pname = "pycapnp"; version = "2.0.0"; - format = "setuptools"; - disabled = isPyPy || isPy27; + format = "pyproject"; src = fetchFromGitHub { owner = "capnproto"; repo = "pycapnp"; tag = "v${version}"; - sha256 = "sha256-SVeBRJMMR1Z8+S+QoiUKGRFGUPS/MlmWLi1qRcGcPoE="; + hash = "sha256-SVeBRJMMR1Z8+S+QoiUKGRFGUPS/MlmWLi1qRcGcPoE="; }; patches = [ + # pycapnp hardcodes /usr/include and /usr/local/include as the paths to search + # for capnproto's built-in schemas in; replace them with the path to our copy of + # capnproto. + # + # Theoretically, this mechanism could also be used to load capnproto schemas + # exposed by other packages (e.g. capnproto-java), which we could support using + # a setup hook; but in practice nobody seems to use this mechanism for anything + # other than the builtin schemas (based on quick GitHub code search), so I don't + # think it's worthwhile. + (replaceVars ./include-paths.patch { inherit capnproto; }) (fetchpatch2 { name = "cython-3.patch"; url = "https://github.com/capnproto/pycapnp/pull/334.diff?full_index=1"; @@ -31,21 +43,34 @@ buildPythonPackage rec { }) ]; - nativeBuildInputs = [ + build-system = [ + setuptools + wheel cython pkgconfig ]; buildInputs = [ capnproto ]; - # Tests depend on schema_capnp which fails to generate - doCheck = false; + nativeCheckInputs = [ + pytest-asyncio + pytestCheckHook + ]; + __darwinAllowLocalNetworking = true; + # https://github.com/NixOS/nixpkgs/issues/255262 + preCheck = '' + enabledTestPaths=$PWD/test + pushd "$out" + ''; + postCheck = '' + popd + ''; - pythonImportsCheck = [ "capnp" ]; - - meta = with lib; { + meta = { + description = "Cython wrapping of the C++ Cap'n Proto library"; homepage = "https://capnproto.github.io/pycapnp/"; - maintainers = [ ]; - license = licenses.bsd2; + changelog = "https://github.com/capnproto/pycapnp/blob/${src.rev}/CHANGELOG.md"; + license = lib.licenses.bsd2; + maintainers = with lib.maintainers; [ Liamolucko ]; }; } diff --git a/pkgs/development/python-modules/pycapnp/include-paths.patch b/pkgs/development/python-modules/pycapnp/include-paths.patch new file mode 100644 index 000000000000..04bd7a79e5c2 --- /dev/null +++ b/pkgs/development/python-modules/pycapnp/include-paths.patch @@ -0,0 +1,14 @@ +--- a/capnp/lib/capnp.pyx ++++ b/capnp/lib/capnp.pyx +@@ -4410,10 +4410,7 @@ def load(file_name, display_name=None, imports=[]): + # Automatically include the system and built-in capnp paths + # Highest priority at position 0 + _capnp_paths = [ +- # Common macOS brew location +- '/usr/local/include', +- # Common posix location +- '/usr/include', ++ '@capnproto@/include', + ] + + class _Loader: