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}