python3_sys/
import.rs

1use libc::{c_char, c_int, c_long, c_uchar};
2
3use crate::object::PyObject;
4
5#[cfg_attr(windows, link(name = "pythonXY"))]
6extern "C" {
7    pub fn PyImport_GetMagicNumber() -> c_long;
8    pub fn PyImport_GetMagicTag() -> *const c_char;
9    pub fn PyImport_ExecCodeModule(name: *const c_char, co: *mut PyObject) -> *mut PyObject;
10    pub fn PyImport_ExecCodeModuleEx(
11        name: *const c_char,
12        co: *mut PyObject,
13        pathname: *const c_char,
14    ) -> *mut PyObject;
15    pub fn PyImport_ExecCodeModuleWithPathnames(
16        name: *const c_char,
17        co: *mut PyObject,
18        pathname: *const c_char,
19        cpathname: *const c_char,
20    ) -> *mut PyObject;
21    pub fn PyImport_ExecCodeModuleObject(
22        name: *mut PyObject,
23        co: *mut PyObject,
24        pathname: *mut PyObject,
25        cpathname: *mut PyObject,
26    ) -> *mut PyObject;
27    pub fn PyImport_GetModuleDict() -> *mut PyObject;
28    #[cfg(Py_3_7)]
29    pub fn PyImport_GetModule(name: *mut PyObject) -> *mut PyObject;
30    pub fn PyImport_AddModuleObject(name: *mut PyObject) -> *mut PyObject;
31    pub fn PyImport_AddModule(name: *const c_char) -> *mut PyObject;
32    pub fn PyImport_ImportModule(name: *const c_char) -> *mut PyObject;
33    pub fn PyImport_ImportModuleNoBlock(name: *const c_char) -> *mut PyObject;
34    pub fn PyImport_ImportModuleLevel(
35        name: *const c_char,
36        globals: *mut PyObject,
37        locals: *mut PyObject,
38        fromlist: *mut PyObject,
39        level: c_int,
40    ) -> *mut PyObject;
41    pub fn PyImport_ImportModuleLevelObject(
42        name: *mut PyObject,
43        globals: *mut PyObject,
44        locals: *mut PyObject,
45        fromlist: *mut PyObject,
46        level: c_int,
47    ) -> *mut PyObject;
48}
49
50#[inline]
51pub unsafe fn PyImport_ImportModuleEx(
52    name: *const c_char,
53    globals: *mut PyObject,
54    locals: *mut PyObject,
55    fromlist: *mut PyObject,
56) -> *mut PyObject {
57    PyImport_ImportModuleLevel(name, globals, locals, fromlist, 0)
58}
59
60#[cfg_attr(windows, link(name = "pythonXY"))]
61extern "C" {
62    pub fn PyImport_GetImporter(path: *mut PyObject) -> *mut PyObject;
63    pub fn PyImport_Import(name: *mut PyObject) -> *mut PyObject;
64    pub fn PyImport_ReloadModule(m: *mut PyObject) -> *mut PyObject;
65    #[cfg(not(Py_3_9))]
66    pub fn PyImport_Cleanup() -> ();
67    pub fn PyImport_ImportFrozenModuleObject(name: *mut PyObject) -> c_int;
68    pub fn PyImport_ImportFrozenModule(name: *const c_char) -> c_int;
69
70    pub fn PyImport_AppendInittab(
71        name: *const c_char,
72        initfunc: Option<unsafe extern "C" fn() -> *mut PyObject>,
73    ) -> c_int;
74}
75
76#[repr(C)]
77#[derive(Copy, Clone)]
78#[cfg(not(Py_LIMITED_API))]
79pub struct _inittab {
80    pub name: *mut c_char,
81    pub initfunc: Option<unsafe extern "C" fn()>,
82}
83
84#[repr(C)]
85#[derive(Copy, Clone)]
86#[cfg(not(Py_LIMITED_API))]
87pub struct _frozen {
88    pub name: *const c_char,
89    pub code: *const c_uchar,
90    pub size: c_int,
91    #[cfg(Py_3_11)]
92    pub is_package: c_int,
93    #[cfg(Py_3_11)]
94    pub get_code: Option<unsafe extern "C" fn() -> *mut PyObject>,
95}
96
97#[cfg(not(Py_LIMITED_API))]
98#[cfg_attr(windows, link(name = "pythonXY"))]
99extern "C" {
100    pub static mut PyImport_FrozenModules: *const _frozen;
101    pub static mut PyImport_Inittab: *mut _inittab;
102
103    pub fn PyImport_ExtendInittab(newtab: *const _inittab) -> c_int;
104
105    #[cfg(not(Py_3_7))]
106    pub fn _PyImport_FindBuiltin(name: *const c_char) -> *mut PyObject;
107    #[cfg(all(Py_3_7, not(Py_3_9)))]
108    pub fn _PyImport_FindBuiltin(name: *const c_char, modules: *mut PyObject) -> *mut PyObject;
109
110    #[cfg(not(Py_3_11))]
111    pub fn _PyImport_FindExtensionObject(
112        name: *mut PyObject,
113        filename: *mut PyObject,
114    ) -> *mut PyObject;
115
116    #[cfg(all(Py_3_7, not(Py_3_9)))]
117    pub fn _PyImport_FindExtensionObjectEx(
118        name: *mut PyObject,
119        filename: *mut PyObject,
120        modules: *mut PyObject,
121    ) -> *mut PyObject;
122
123    #[cfg(not(Py_3_7))]
124    pub fn _PyImport_FixupBuiltin(module: *mut PyObject, name: *const c_char) -> c_int;
125    #[cfg(Py_3_7)]
126    pub fn _PyImport_FixupBuiltin(
127        module: *mut PyObject,
128        name: *const c_char,
129        modules: *mut PyObject,
130    ) -> c_int;
131
132    #[cfg(not(Py_3_7))]
133    pub fn _PyImport_FixupExtensionObject(
134        module: *mut PyObject,
135        name: *mut PyObject,
136        filename: *mut PyObject,
137    ) -> c_int;
138    #[cfg(Py_3_7)]
139    pub fn _PyImport_FixupExtensionObject(
140        module: *mut PyObject,
141        name: *mut PyObject,
142        filename: *mut PyObject,
143        modules: *mut PyObject,
144    ) -> c_int;
145}