Skip to content

Commit 9dbd04f

Browse files
committed
TST: add Rust extension module using PyO3
This requires nightly Rust and unreleased Meson, and it currently bumps into a Meson warning: ``WARNING: Library entry portable_atomic has unexpected keys "doc-scrape-examples"``.
1 parent f915043 commit 9dbd04f

11 files changed

Lines changed: 426 additions & 0 deletions

File tree

tests/conftest.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,10 @@ def __init__(self, source_dir, build_dir, meson_args=None, editable_verbose=None
224224
# keeps working.
225225
'link-against-local-lib',
226226

227+
# The ``rust-pyo3`` package bumps into this Meson
228+
# warning: ``WARNING: Library entry portable_atomic
229+
# has unexpected keys "doc-scrape-examples"``.
230+
'rust-pyo3',
227231
}:
228232
if meson_args is None:
229233
meson_args = {}

tests/packages/rust-pyo3/Cargo.lock

Lines changed: 132 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# SPDX-FileCopyrightText: 2026 The meson-python developers
2+
#
3+
# SPDX-License-Identifier: MIT
4+
5+
[package]
6+
name = "rust-pyo3"
7+
version = "1.0.0"
8+
edition = "2024"
9+
10+
[lib]
11+
name = "rust_pyo3"
12+
crate-type = ["cdylib"]
13+
14+
[dependencies]
15+
pyo3 = "0.29.0"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# SPDX-FileCopyrightText: 2026 The meson-python developers
2+
#
3+
# SPDX-License-Identifier: MIT
4+
5+
project('rust-pyo3', 'c', 'rust', version: '1.0.0', meson_version: '>= 1.12.0', default_options: ['rust_std=2024'])
6+
7+
py = import('python').find_installation(pure: false)
8+
pkg = import('rust').workspace().package()
9+
10+
py.extension_module(
11+
'rust_pyo3',
12+
'src/lib.rs',
13+
rust_dependency_map : pkg.rust_dependency_map(),
14+
rust_args: pkg.rust_args(),
15+
dependencies : pkg.dependencies(),
16+
install: true,
17+
)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# SPDX-FileCopyrightText: 2021 The meson-python developers
2+
#
3+
# SPDX-License-Identifier: MIT
4+
5+
[build-system]
6+
build-backend = "mesonpy"
7+
requires = ["meson-python"]
8+
9+
[tool.meson-python.args]
10+
setup = ['--vsenv']
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// SPDX-FileCopyrightText: 2026 The meson-python developers
2+
//
3+
// SPDX-License-Identifier: MIT
4+
5+
use pyo3::prelude::*;
6+
7+
#[pymodule]
8+
mod rust_pyo3 {
9+
use pyo3::prelude::*;
10+
11+
/// Sum two numbers.
12+
#[pyfunction]
13+
fn sum(a: i64, b: i64) -> PyResult<i64> {
14+
Ok(a + b)
15+
}
16+
}

tests/packages/rust-pyo3/subprojects/.wraplock

Whitespace-only changes.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
extra_args += cargo_ws.subproject('pyo3-ffi', pkg_obj.api(), native: false).dependency().get_variable('args').split('\0')

0 commit comments

Comments
 (0)