1use crate::object::PyObject;
2use std::os::raw::{c_char, c_int, c_long};
3
4extern "C" {
5 pub fn PyImport_GetMagicNumber() -> c_long;
6 pub fn PyImport_GetMagicTag() -> *const c_char;
7 #[cfg_attr(PyPy, link_name = "PyPyImport_ExecCodeModule")]
8 pub fn PyImport_ExecCodeModule(name: *const c_char, co: *mut PyObject) -> *mut PyObject;
9 #[cfg_attr(PyPy, link_name = "PyPyImport_ExecCodeModuleEx")]
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 #[cfg_attr(PyPy, link_name = "PyPyImport_GetModuleDict")]
28 pub fn PyImport_GetModuleDict() -> *mut PyObject;
29 pub fn PyImport_AddModuleObject(name: *mut PyObject) -> *mut PyObject;
31 #[cfg_attr(PyPy, link_name = "PyPyImport_AddModule")]
32 pub fn PyImport_AddModule(name: *const c_char) -> *mut PyObject;
33 #[cfg(Py_3_13)]
34 #[cfg_attr(PyPy, link_name = "PyPyImport_AddModuleRef")]
35 pub fn PyImport_AddModuleRef(name: *const c_char) -> *mut PyObject;
36 #[cfg_attr(PyPy, link_name = "PyPyImport_ImportModule")]
37 pub fn PyImport_ImportModule(name: *const c_char) -> *mut PyObject;
38 #[cfg_attr(PyPy, link_name = "PyPyImport_ImportModuleNoBlock")]
39 pub fn PyImport_ImportModuleNoBlock(name: *const c_char) -> *mut PyObject;
40 #[cfg_attr(PyPy, link_name = "PyPyImport_ImportModuleLevel")]
41 pub fn PyImport_ImportModuleLevel(
42 name: *const c_char,
43 globals: *mut PyObject,
44 locals: *mut PyObject,
45 fromlist: *mut PyObject,
46 level: c_int,
47 ) -> *mut PyObject;
48 #[cfg_attr(PyPy, link_name = "PyPyImport_ImportModuleLevelObject")]
49 pub fn PyImport_ImportModuleLevelObject(
50 name: *mut PyObject,
51 globals: *mut PyObject,
52 locals: *mut PyObject,
53 fromlist: *mut PyObject,
54 level: c_int,
55 ) -> *mut PyObject;
56}
57
58#[inline]
59pub unsafe fn PyImport_ImportModuleEx(
60 name: *const c_char,
61 globals: *mut PyObject,
62 locals: *mut PyObject,
63 fromlist: *mut PyObject,
64) -> *mut PyObject {
65 PyImport_ImportModuleLevel(name, globals, locals, fromlist, 0)
66}
67
68extern "C" {
69 pub fn PyImport_GetImporter(path: *mut PyObject) -> *mut PyObject;
70 #[cfg_attr(PyPy, link_name = "PyPyImport_Import")]
71 pub fn PyImport_Import(name: *mut PyObject) -> *mut PyObject;
72 #[cfg_attr(PyPy, link_name = "PyPyImport_ReloadModule")]
73 pub fn PyImport_ReloadModule(m: *mut PyObject) -> *mut PyObject;
74 #[cfg(not(Py_3_9))]
75 #[deprecated(note = "Removed in Python 3.9 as it was \"For internal use only\".")]
76 pub fn PyImport_Cleanup();
77 pub fn PyImport_ImportFrozenModuleObject(name: *mut PyObject) -> c_int;
78 pub fn PyImport_ImportFrozenModule(name: *const c_char) -> c_int;
79
80 pub fn PyImport_AppendInittab(
81 name: *const c_char,
82 initfunc: Option<unsafe extern "C" fn() -> *mut PyObject>,
83 ) -> c_int;
84}