python3_sys/
modsupport.rs1use libc::{c_char, c_int, c_long};
2
3#[cfg(Py_3_5)]
4use crate::methodobject::PyMethodDef;
5use crate::moduleobject::PyModuleDef;
6use crate::object::PyObject;
7#[cfg(Py_3_9)]
8use crate::object::PyTypeObject;
9use crate::pyport::Py_ssize_t;
10
11#[cfg_attr(windows, link(name = "pythonXY"))]
12extern "C" {
13 pub fn PyArg_Parse(arg1: *mut PyObject, arg2: *const c_char, ...) -> c_int;
14 pub fn PyArg_ParseTuple(arg1: *mut PyObject, arg2: *const c_char, ...) -> c_int;
15 pub fn PyArg_ParseTupleAndKeywords(
16 arg1: *mut PyObject,
17 arg2: *mut PyObject,
18 arg3: *const c_char,
19 arg4: *mut *mut c_char,
20 ...
21 ) -> c_int;
22 pub fn PyArg_ValidateKeywordArguments(arg1: *mut PyObject) -> c_int;
23 pub fn PyArg_UnpackTuple(
24 arg1: *mut PyObject,
25 arg2: *const c_char,
26 arg3: Py_ssize_t,
27 arg4: Py_ssize_t,
28 ...
29 ) -> c_int;
30 pub fn Py_BuildValue(arg1: *const c_char, ...) -> *mut PyObject;
31 ignore! {
32 pub fn _Py_BuildValue_SizeT(arg1: *const c_char, ...) -> *mut PyObject;
33 pub fn Py_VaBuildValue(arg1: *const c_char, arg2: va_list) -> *mut PyObject;
34 }
35 #[cfg(Py_3_10)]
36 pub fn PyModule_AddObjectRef(
37 module: *mut PyObject,
38 name: *const c_char,
39 value: *mut PyObject,
40 ) -> c_int;
41 pub fn PyModule_AddObject(
42 module: *mut PyObject,
43 name: *const c_char,
44 value: *mut PyObject,
45 ) -> c_int;
46 pub fn PyModule_AddIntConstant(arg1: *mut PyObject, arg2: *const c_char, arg3: c_long)
47 -> c_int;
48 pub fn PyModule_AddStringConstant(
49 arg1: *mut PyObject,
50 arg2: *const c_char,
51 arg3: *const c_char,
52 ) -> c_int;
53 #[cfg(Py_3_9)]
54 pub fn PyModule_AddType(module: *mut PyObject, ty: *mut PyTypeObject) -> c_int;
55 #[cfg(Py_3_5)]
56 pub fn PyModule_SetDocString(module: *mut PyObject, value: *const c_char) -> c_int;
57 #[cfg(Py_3_5)]
58 pub fn PyModule_AddFunctions(module: *mut PyObject, methods: *mut PyMethodDef) -> c_int;
59 #[cfg(Py_3_5)]
60 pub fn PyModule_ExecDef(module: *mut PyObject, def: *mut PyModuleDef) -> c_int;
61}
62
63pub const Py_CLEANUP_SUPPORTED: i32 = 0x20000;
64
65pub const PYTHON_API_VERSION: i32 = 1013;
66pub const PYTHON_ABI_VERSION: i32 = 3;
67
68#[cfg_attr(windows, link(name = "pythonXY"))]
69extern "C" {
70 #[cfg(not(py_sys_config = "Py_TRACE_REFS"))]
71 pub fn PyModule_Create2(module: *mut PyModuleDef, apiver: c_int) -> *mut PyObject;
72
73 #[cfg(py_sys_config = "Py_TRACE_REFS")]
74 fn PyModule_Create2TraceRefs(module: *mut PyModuleDef, apiver: c_int) -> *mut PyObject;
75
76 #[cfg(not(py_sys_config = "Py_TRACE_REFS"))]
77 #[cfg(Py_3_5)]
78 pub fn PyModule_FromDefAndSpec2(
79 def: *mut PyModuleDef,
80 spec: *mut PyObject,
81 module_api_version: c_int,
82 ) -> *mut PyObject;
83
84 #[cfg(py_sys_config = "Py_TRACE_REFS")]
85 #[cfg(Py_3_5)]
86 fn PyModule_FromDefAndSpec2TraceRefs(
87 def: *mut PyModuleDef,
88 spec: *mut PyObject,
89 module_api_version: c_int,
90 ) -> *mut PyObject;
91}
92
93#[cfg(py_sys_config = "Py_TRACE_REFS")]
94#[inline]
95pub unsafe fn PyModule_Create2(module: *mut PyModuleDef, apiver: c_int) -> *mut PyObject {
96 PyModule_Create2TraceRefs(module, apiver)
97}
98
99#[cfg(py_sys_config = "Py_TRACE_REFS")]
100#[cfg(Py_3_5)]
101#[inline]
102pub unsafe fn PyModule_FromDefAndSpec2(
103 def: *mut PyModuleDef,
104 spec: *mut PyObject,
105 module_api_version: c_int,
106) -> *mut PyObject {
107 PyModule_FromDefAndSpec2TraceRefs(def, spec, module_api_version)
108}
109
110#[inline]
111pub unsafe fn PyModule_Create(module: *mut PyModuleDef) -> *mut PyObject {
112 PyModule_Create2(
113 module,
114 if cfg!(Py_LIMITED_API) {
115 PYTHON_ABI_VERSION
116 } else {
117 PYTHON_API_VERSION
118 },
119 )
120}
121
122#[inline]
123#[cfg(Py_3_5)]
124pub unsafe fn PyModule_FromDefAndSpec(def: *mut PyModuleDef, spec: *mut PyObject) -> *mut PyObject {
125 PyModule_FromDefAndSpec2(
126 def,
127 spec,
128 if cfg!(Py_LIMITED_API) {
129 PYTHON_ABI_VERSION
130 } else {
131 PYTHON_API_VERSION
132 },
133 )
134}
135
136#[cfg(all(not(Py_LIMITED_API), not(Py_3_12)))]
137#[cfg_attr(windows, link(name = "pythonXY"))]
138extern "C" {
139 pub static mut _Py_PackageContext: *const c_char;
140}