Move macros into separate feature.
It's enabled by default to avoid breakage, but this allows compiling pyo3 with a lot less dependencies in case the macros are not needed.
This commit is contained in:
parent
818ebf7ddf
commit
dab8c2e4e7
|
@ -28,7 +28,9 @@ jobs:
|
|||
toolchain: nightly
|
||||
default: true
|
||||
- run: rustup set default-host ${{ matrix.platform.rust-target }}
|
||||
- name: Build
|
||||
- name: Build without default features
|
||||
run: cargo build --no-default-features --verbose
|
||||
- name: Build with default features
|
||||
run: cargo build --verbose
|
||||
- name: Install test dependencies
|
||||
run: |
|
||||
|
|
13
Cargo.toml
13
Cargo.toml
|
@ -19,14 +19,14 @@ travis-ci = { repository = "PyO3/pyo3", branch = "master" }
|
|||
appveyor = { repository = "fafhrd91/pyo3" }
|
||||
|
||||
[dependencies]
|
||||
indoc = "0.3.4"
|
||||
inventory = "0.1.4"
|
||||
indoc = { version = "0.3.4", optional = true }
|
||||
inventory = { version = "0.1.4", optional = true }
|
||||
libc = "0.2.62"
|
||||
num-bigint = { version = "0.2", optional = true }
|
||||
num-complex = { version = "0.2", optional = true }
|
||||
paste = "0.1.6"
|
||||
pyo3cls = { path = "pyo3cls", version = "=0.9.2" }
|
||||
unindent = "0.1.4"
|
||||
paste = { version = "0.1.6", optional = true }
|
||||
pyo3cls = { path = "pyo3cls", version = "=0.9.2", optional = true }
|
||||
unindent = { version = "0.1.4", optional = true }
|
||||
|
||||
[dev-dependencies]
|
||||
assert_approx_eq = "1.1.0"
|
||||
|
@ -36,7 +36,8 @@ trybuild = "1.0.23"
|
|||
version_check = "0.9.1"
|
||||
|
||||
[features]
|
||||
default = []
|
||||
default = ["macros"]
|
||||
macros = ["indoc", "inventory", "paste", "pyo3cls", "unindent"]
|
||||
|
||||
# this is no longer needed internally, but setuptools-rust assumes this feature
|
||||
python3 = []
|
||||
|
|
|
@ -138,6 +138,7 @@ impl PySetterDef {
|
|||
/// Allows arbitrary pymethod blocks to submit their methods, which are eventually
|
||||
/// collected by pyclass.
|
||||
#[doc(hidden)]
|
||||
#[cfg(feature = "macros")]
|
||||
pub trait PyMethodsInventory: inventory::Collect {
|
||||
/// Create a new instance
|
||||
fn new(methods: &'static [PyMethodDefType]) -> Self;
|
||||
|
@ -149,6 +150,7 @@ pub trait PyMethodsInventory: inventory::Collect {
|
|||
/// Implementation detail. Only to be used through the proc macros.
|
||||
/// For pyclass derived structs, this trait collects method from all impl blocks using inventory.
|
||||
#[doc(hidden)]
|
||||
#[cfg(feature = "macros")]
|
||||
pub trait PyMethodsImpl {
|
||||
/// Normal methods. Mainly defined by `#[pymethod]`.
|
||||
type Methods: PyMethodsInventory;
|
||||
|
@ -161,3 +163,11 @@ pub trait PyMethodsImpl {
|
|||
.collect()
|
||||
}
|
||||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
#[cfg(not(feature = "macros"))]
|
||||
pub trait PyMethodsImpl {
|
||||
fn py_methods() -> Vec<&'static PyMethodDefType> {
|
||||
Vec::new()
|
||||
}
|
||||
}
|
||||
|
|
22
src/lib.rs
22
src/lib.rs
|
@ -150,21 +150,18 @@ pub use crate::type_object::{type_flags, PyTypeInfo};
|
|||
// Since PyAny is as important as PyObject, we expose it to the top level.
|
||||
pub use crate::types::PyAny;
|
||||
|
||||
// Re-exported for wrap_function
|
||||
#[cfg(feature = "macros")]
|
||||
#[doc(hidden)]
|
||||
pub use paste;
|
||||
// Re-exported for py_run
|
||||
#[doc(hidden)]
|
||||
pub use indoc;
|
||||
// Re-exported for pymethods
|
||||
#[doc(hidden)]
|
||||
pub use inventory;
|
||||
pub use {
|
||||
indoc, // Re-exported for py_run
|
||||
inventory, // Re-exported for pymethods
|
||||
paste, // Re-exported for wrap_function
|
||||
unindent, // Re-exported for py_run
|
||||
};
|
||||
|
||||
// Re-exported for the `__wrap` functions
|
||||
#[doc(hidden)]
|
||||
pub use libc;
|
||||
// Re-exported for py_run
|
||||
#[doc(hidden)]
|
||||
pub use unindent;
|
||||
|
||||
pub mod buffer;
|
||||
#[doc(hidden)]
|
||||
|
@ -197,6 +194,7 @@ pub mod type_object;
|
|||
pub mod types;
|
||||
|
||||
/// The proc macros, which are also part of the prelude.
|
||||
#[cfg(feature = "macros")]
|
||||
pub mod proc_macro {
|
||||
pub use pyo3cls::pymodule;
|
||||
/// The proc macro attributes
|
||||
|
@ -278,6 +276,7 @@ macro_rules! wrap_pymodule {
|
|||
/// If you need to handle failures, please use [Python::run] directly.
|
||||
///
|
||||
#[macro_export]
|
||||
#[cfg(feature = "macros")]
|
||||
macro_rules! py_run {
|
||||
($py:expr, $($val:ident)+, $code:literal) => {{
|
||||
pyo3::py_run_impl!($py, $($val)+, pyo3::indoc::indoc!($code))
|
||||
|
@ -289,6 +288,7 @@ macro_rules! py_run {
|
|||
|
||||
#[macro_export]
|
||||
#[doc(hidden)]
|
||||
#[cfg(feature = "macros")]
|
||||
macro_rules! py_run_impl {
|
||||
($py:expr, $($val:ident)+, $code:expr) => {{
|
||||
use pyo3::types::IntoPyDict;
|
||||
|
|
|
@ -20,5 +20,5 @@ pub use crate::python::Python;
|
|||
pub use crate::{FromPy, FromPyObject, IntoPy, IntoPyPointer, PyTryFrom, PyTryInto, ToPyObject};
|
||||
// PyModule is only part of the prelude because we need it for the pymodule function
|
||||
pub use crate::types::{PyAny, PyModule};
|
||||
pub use pyo3cls::pymodule;
|
||||
pub use pyo3cls::{pyclass, pyfunction, pymethods, pyproto};
|
||||
#[cfg(feature = "macros")]
|
||||
pub use pyo3cls::{pyclass, pyfunction, pymethods, pymodule, pyproto};
|
||||
|
|
Loading…
Reference in New Issue