1 | /* --- PyStatus ----------------------------------------------- */ |
2 | |
3 | use crate::Py_ssize_t; |
4 | use libc::wchar_t; |
5 | use std::os::raw::{c_char, c_int, c_ulong}; |
6 | |
7 | #[repr (C)] |
8 | #[derive (Copy, Clone, Debug, PartialEq, Eq)] |
9 | pub enum _PyStatus_TYPE { |
10 | _PyStatus_TYPE_OK = 0, |
11 | _PyStatus_TYPE_ERROR = 1, |
12 | _PyStatus_TYPE_EXIT = 2, |
13 | } |
14 | |
15 | #[repr (C)] |
16 | #[derive (Copy, Clone)] |
17 | pub struct PyStatus { |
18 | pub _type: _PyStatus_TYPE, |
19 | pub func: *const c_char, |
20 | pub err_msg: *const c_char, |
21 | pub exitcode: c_int, |
22 | } |
23 | |
24 | extern "C" { |
25 | pub fn PyStatus_Ok() -> PyStatus; |
26 | pub fn PyStatus_Error(err_msg: *const c_char) -> PyStatus; |
27 | pub fn PyStatus_NoMemory() -> PyStatus; |
28 | pub fn PyStatus_Exit(exitcode: c_int) -> PyStatus; |
29 | pub fn PyStatus_IsError(err: PyStatus) -> c_int; |
30 | pub fn PyStatus_IsExit(err: PyStatus) -> c_int; |
31 | pub fn PyStatus_Exception(err: PyStatus) -> c_int; |
32 | } |
33 | |
34 | /* --- PyWideStringList ------------------------------------------------ */ |
35 | |
36 | #[repr (C)] |
37 | #[derive (Copy, Clone)] |
38 | pub struct PyWideStringList { |
39 | pub length: Py_ssize_t, |
40 | pub items: *mut *mut wchar_t, |
41 | } |
42 | |
43 | extern "C" { |
44 | pub fn PyWideStringList_Append(list: *mut PyWideStringList, item: *const wchar_t) -> PyStatus; |
45 | pub fn PyWideStringList_Insert( |
46 | list: *mut PyWideStringList, |
47 | index: Py_ssize_t, |
48 | item: *const wchar_t, |
49 | ) -> PyStatus; |
50 | } |
51 | |
52 | /* --- PyPreConfig ----------------------------------------------- */ |
53 | |
54 | #[repr (C)] |
55 | #[derive (Copy, Clone)] |
56 | pub struct PyPreConfig { |
57 | pub _config_init: c_int, |
58 | pub parse_argv: c_int, |
59 | pub isolated: c_int, |
60 | pub use_environment: c_int, |
61 | pub configure_locale: c_int, |
62 | pub coerce_c_locale: c_int, |
63 | pub coerce_c_locale_warn: c_int, |
64 | |
65 | #[cfg (windows)] |
66 | pub legacy_windows_fs_encoding: c_int, |
67 | |
68 | pub utf8_mode: c_int, |
69 | pub dev_mode: c_int, |
70 | pub allocator: c_int, |
71 | } |
72 | |
73 | extern "C" { |
74 | pub fn PyPreConfig_InitPythonConfig(config: *mut PyPreConfig); |
75 | pub fn PyPreConfig_InitIsolatedConfig(config: *mut PyPreConfig); |
76 | } |
77 | |
78 | /* --- PyConfig ---------------------------------------------- */ |
79 | |
80 | #[repr (C)] |
81 | #[derive (Copy, Clone)] |
82 | pub struct PyConfig { |
83 | pub _config_init: c_int, |
84 | pub isolated: c_int, |
85 | pub use_environment: c_int, |
86 | pub dev_mode: c_int, |
87 | pub install_signal_handlers: c_int, |
88 | pub use_hash_seed: c_int, |
89 | pub hash_seed: c_ulong, |
90 | pub faulthandler: c_int, |
91 | #[cfg (all(Py_3_9, not(Py_3_10)))] |
92 | pub _use_peg_parser: c_int, |
93 | pub tracemalloc: c_int, |
94 | #[cfg (Py_3_12)] |
95 | pub perf_profiling: c_int, |
96 | pub import_time: c_int, |
97 | #[cfg (Py_3_11)] |
98 | pub code_debug_ranges: c_int, |
99 | pub show_ref_count: c_int, |
100 | #[cfg (not(Py_3_9))] |
101 | pub show_alloc_count: c_int, |
102 | pub dump_refs: c_int, |
103 | #[cfg (Py_3_11)] |
104 | pub dump_refs_file: *mut wchar_t, |
105 | pub malloc_stats: c_int, |
106 | pub filesystem_encoding: *mut wchar_t, |
107 | pub filesystem_errors: *mut wchar_t, |
108 | pub pycache_prefix: *mut wchar_t, |
109 | pub parse_argv: c_int, |
110 | #[cfg (Py_3_10)] |
111 | pub orig_argv: PyWideStringList, |
112 | pub argv: PyWideStringList, |
113 | #[cfg (not(Py_3_10))] |
114 | pub program_name: *mut wchar_t, |
115 | pub xoptions: PyWideStringList, |
116 | pub warnoptions: PyWideStringList, |
117 | pub site_import: c_int, |
118 | pub bytes_warning: c_int, |
119 | #[cfg (Py_3_10)] |
120 | pub warn_default_encoding: c_int, |
121 | pub inspect: c_int, |
122 | pub interactive: c_int, |
123 | pub optimization_level: c_int, |
124 | pub parser_debug: c_int, |
125 | pub write_bytecode: c_int, |
126 | pub verbose: c_int, |
127 | pub quiet: c_int, |
128 | pub user_site_directory: c_int, |
129 | pub configure_c_stdio: c_int, |
130 | pub buffered_stdio: c_int, |
131 | pub stdio_encoding: *mut wchar_t, |
132 | pub stdio_errors: *mut wchar_t, |
133 | |
134 | #[cfg (windows)] |
135 | pub legacy_windows_stdio: c_int, |
136 | |
137 | pub check_hash_pycs_mode: *mut wchar_t, |
138 | #[cfg (Py_3_11)] |
139 | pub use_frozen_modules: c_int, |
140 | #[cfg (Py_3_11)] |
141 | pub safe_path: c_int, |
142 | #[cfg (Py_3_12)] |
143 | pub int_max_str_digits: c_int, |
144 | pub pathconfig_warnings: c_int, |
145 | #[cfg (Py_3_10)] |
146 | pub program_name: *mut wchar_t, |
147 | pub pythonpath_env: *mut wchar_t, |
148 | pub home: *mut wchar_t, |
149 | #[cfg (Py_3_10)] |
150 | pub platlibdir: *mut wchar_t, |
151 | |
152 | pub module_search_paths_set: c_int, |
153 | pub module_search_paths: PyWideStringList, |
154 | #[cfg (Py_3_11)] |
155 | pub stdlib_dir: *mut wchar_t, |
156 | pub executable: *mut wchar_t, |
157 | pub base_executable: *mut wchar_t, |
158 | pub prefix: *mut wchar_t, |
159 | pub base_prefix: *mut wchar_t, |
160 | pub exec_prefix: *mut wchar_t, |
161 | pub base_exec_prefix: *mut wchar_t, |
162 | #[cfg (all(Py_3_9, not(Py_3_10)))] |
163 | pub platlibdir: *mut wchar_t, |
164 | pub skip_source_first_line: c_int, |
165 | pub run_command: *mut wchar_t, |
166 | pub run_module: *mut wchar_t, |
167 | pub run_filename: *mut wchar_t, |
168 | pub _install_importlib: c_int, |
169 | pub _init_main: c_int, |
170 | #[cfg (all(Py_3_9, not(Py_3_12)))] |
171 | pub _isolated_interpreter: c_int, |
172 | #[cfg (Py_3_11)] |
173 | pub _is_python_build: c_int, |
174 | #[cfg (all(Py_3_9, not(Py_3_10)))] |
175 | pub _orig_argv: PyWideStringList, |
176 | } |
177 | |
178 | extern "C" { |
179 | pub fn PyConfig_InitPythonConfig(config: *mut PyConfig); |
180 | pub fn PyConfig_InitIsolatedConfig(config: *mut PyConfig); |
181 | pub fn PyConfig_Clear(config: *mut PyConfig); |
182 | pub fn PyConfig_SetString( |
183 | config: *mut PyConfig, |
184 | config_str: *mut *mut wchar_t, |
185 | str: *const wchar_t, |
186 | ) -> PyStatus; |
187 | pub fn PyConfig_SetBytesString( |
188 | config: *mut PyConfig, |
189 | config_str: *mut *mut wchar_t, |
190 | str: *const c_char, |
191 | ) -> PyStatus; |
192 | pub fn PyConfig_Read(config: *mut PyConfig) -> PyStatus; |
193 | pub fn PyConfig_SetBytesArgv( |
194 | config: *mut PyConfig, |
195 | argc: Py_ssize_t, |
196 | argv: *mut *const c_char, |
197 | ) -> PyStatus; |
198 | pub fn PyConfig_SetArgv( |
199 | config: *mut PyConfig, |
200 | argc: Py_ssize_t, |
201 | argv: *mut *const wchar_t, |
202 | ) -> PyStatus; |
203 | pub fn PyConfig_SetWideStringList( |
204 | config: *mut PyConfig, |
205 | list: *mut PyWideStringList, |
206 | length: Py_ssize_t, |
207 | items: *mut *mut wchar_t, |
208 | ) -> PyStatus; |
209 | } |
210 | |
211 | /* --- Helper functions --------------------------------------- */ |
212 | |
213 | extern "C" { |
214 | pub fn Py_GetArgcArgv(argc: *mut c_int, argv: *mut *mut *mut wchar_t); |
215 | } |
216 | |