python3_sys/
pylifecycle.rs

1// There are 2 pylifecycle.h in CPython. We currently only define the Py_LIMITED_API
2// symbols because other symbols exist in their legacy locations in other modules.
3
4#[cfg(Py_3_8)]
5#[cfg(not(Py_LIMITED_API))]
6use crate::initconfig::{PyConfig, PyPreConfig, PyStatus};
7#[cfg(Py_3_8)]
8#[cfg(not(Py_LIMITED_API))]
9use crate::pyport::Py_ssize_t;
10#[cfg(Py_3_8)]
11#[cfg(not(Py_LIMITED_API))]
12use libc::{c_char, c_int, c_void, wchar_t, FILE};
13
14// Symbols from Include/pylifecycle.h
15
16// TODO move these symbols from their legacy locations into this module.
17
18// Symbols from Include/cpython/pylifecycle.h
19
20#[cfg(Py_3_8)]
21#[cfg(not(Py_LIMITED_API))]
22#[cfg_attr(windows, link(name = "pythonXY"))]
23extern "C" {
24    #[cfg(Py_3_10)]
25    pub fn Py_FrozenMain(argc: c_int, argv: *mut *mut c_char) -> c_int;
26
27    // Py_SetStandardStreamEncoding: still in pythonrun.rs
28
29    pub fn Py_PreInitialize(src_config: *const PyPreConfig) -> PyStatus;
30    pub fn Py_PreInitializeFromBytesArgs(
31        src_config: *const PyPreConfig,
32        argc: Py_ssize_t,
33        argv: *mut *mut c_char,
34    ) -> PyStatus;
35    pub fn Py_PreInitializeFromArgs(
36        src_config: *const PyPreConfig,
37        argc: Py_ssize_t,
38        argv: *mut *mut wchar_t,
39    ) -> PyStatus;
40
41    pub fn _Py_IsCoreInitialized() -> c_int;
42
43    pub fn Py_InitializeFromConfig(config: *const PyConfig) -> PyStatus;
44    pub fn _Py_InitializeMain() -> PyStatus;
45    pub fn Py_RunMain() -> c_int;
46
47    pub fn Py_ExitStatusException(err: PyStatus) -> ();
48    #[cfg(not(Py_3_10))]
49    pub fn _Py_PyAtExit(
50        func: Option<extern "C" fn(obj: *mut crate::object::PyObject) -> ()>,
51        module: *mut crate::object::PyObject,
52    ) -> ();
53    pub fn _Py_RestoreSignals() -> ();
54    pub fn Py_FdIsInteractive(file: *mut FILE, filename: *const c_char) -> c_int;
55    pub fn _Py_SetProgramFullPath(path: *const wchar_t) -> ();
56    pub fn _Py_gitidentifier() -> *const c_char;
57    pub fn _Py_gitversion() -> *const c_char;
58    pub fn _Py_IsFinalizing() -> c_int;
59    pub fn _PyOS_URandom(buffer: *mut c_void, size: Py_ssize_t) -> c_int;
60    pub fn _PyOS_URandomNonblock(buffer: *mut c_void, size: Py_ssize_t) -> c_int;
61    pub fn _Py_CoerceLegacyLocale(warn: c_int) -> c_int;
62    pub fn _Py_LegacyLocaleDetected(warn: c_int) -> c_int;
63    pub fn _Py_SetLocaleFromEnv(category: c_int) -> *mut c_char;
64}