blob: a75b77cc73372c572820309b1587530282ef59ee [file] [log] [blame]
Nick Coghland6009512014-11-20 21:39:37 +10001
2/* Interfaces to configure, query, create & destroy the Python runtime */
3
4#ifndef Py_PYLIFECYCLE_H
5#define Py_PYLIFECYCLE_H
6#ifdef __cplusplus
7extern "C" {
8#endif
9
10PyAPI_FUNC(void) Py_SetProgramName(wchar_t *);
11PyAPI_FUNC(wchar_t *) Py_GetProgramName(void);
12
13PyAPI_FUNC(void) Py_SetPythonHome(wchar_t *);
14PyAPI_FUNC(wchar_t *) Py_GetPythonHome(void);
15
16#ifndef Py_LIMITED_API
17/* Only used by applications that embed the interpreter and need to
18 * override the standard encoding determination mechanism
19 */
20PyAPI_FUNC(int) Py_SetStandardStreamEncoding(const char *encoding,
21 const char *errors);
Eric Snow1abcf672017-05-23 21:46:51 -070022
Victor Stinnerf7e5b562017-11-15 15:48:08 -080023typedef struct {
24 const char *prefix;
25 const char *msg;
26 int user_err;
27} _PyInitError;
28
29/* Almost all errors causing Python initialization to fail */
30#ifdef _MSC_VER
31 /* Visual Studio 2015 doesn't implement C99 __func__ in C */
32# define _Py_INIT_GET_FUNC() __FUNCTION__
33#else
34# define _Py_INIT_GET_FUNC() __func__
35#endif
36
37#define _Py_INIT_OK() \
38 (_PyInitError){.prefix = NULL, .msg = NULL, .user_err = 0}
39#define _Py_INIT_ERR(MSG) \
40 (_PyInitError){.prefix = _Py_INIT_GET_FUNC(), .msg = (MSG), .user_err = 0}
41/* Error that can be fixed by the user like invalid input parameter.
42 Don't abort() the process on such error. */
43#define _Py_INIT_USER_ERR(MSG) \
44 (_PyInitError){.prefix = _Py_INIT_GET_FUNC(), .msg = (MSG), .user_err = 1}
45#define _Py_INIT_FAILED(err) \
46 (err.msg != NULL)
47
Eric Snow1abcf672017-05-23 21:46:51 -070048/* PEP 432 Multi-phase initialization API (Private while provisional!) */
Victor Stinnerf7e5b562017-11-15 15:48:08 -080049PyAPI_FUNC(_PyInitError) _Py_InitializeCore(const _PyCoreConfig *);
Eric Snow1abcf672017-05-23 21:46:51 -070050PyAPI_FUNC(int) _Py_IsCoreInitialized(void);
Victor Stinnerf7e5b562017-11-15 15:48:08 -080051PyAPI_FUNC(_PyInitError) _Py_ReadMainInterpreterConfig(_PyMainInterpreterConfig *);
52PyAPI_FUNC(_PyInitError) _Py_InitializeMainInterpreter(const _PyMainInterpreterConfig *);
Nick Coghland6009512014-11-20 21:39:37 +100053#endif
54
Eric Snow1abcf672017-05-23 21:46:51 -070055/* Initialization and finalization */
Nick Coghland6009512014-11-20 21:39:37 +100056PyAPI_FUNC(void) Py_Initialize(void);
57PyAPI_FUNC(void) Py_InitializeEx(int);
58#ifndef Py_LIMITED_API
Victor Stinnerf7e5b562017-11-15 15:48:08 -080059PyAPI_FUNC(_PyInitError) _Py_InitializeEx_Private(int, int);
60PyAPI_FUNC(void) _Py_FatalInitError(_PyInitError err) _Py_NO_RETURN;
Nick Coghland6009512014-11-20 21:39:37 +100061#endif
62PyAPI_FUNC(void) Py_Finalize(void);
Martin Panterb4ce1fc2015-11-30 03:18:29 +000063PyAPI_FUNC(int) Py_FinalizeEx(void);
Nick Coghland6009512014-11-20 21:39:37 +100064PyAPI_FUNC(int) Py_IsInitialized(void);
Eric Snow1abcf672017-05-23 21:46:51 -070065
66/* Subinterpreter support */
Nick Coghland6009512014-11-20 21:39:37 +100067PyAPI_FUNC(PyThreadState *) Py_NewInterpreter(void);
68PyAPI_FUNC(void) Py_EndInterpreter(PyThreadState *);
69
70
71/* Py_PyAtExit is for the atexit module, Py_AtExit is for low-level
72 * exit functions.
73 */
74#ifndef Py_LIMITED_API
75PyAPI_FUNC(void) _Py_PyAtExit(void (*func)(void));
76#endif
77PyAPI_FUNC(int) Py_AtExit(void (*func)(void));
78
Victor Stinnerf7e5b562017-11-15 15:48:08 -080079PyAPI_FUNC(void) Py_Exit(int) _Py_NO_RETURN;
Nick Coghland6009512014-11-20 21:39:37 +100080
81/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. */
82#ifndef Py_LIMITED_API
83PyAPI_FUNC(void) _Py_RestoreSignals(void);
84
85PyAPI_FUNC(int) Py_FdIsInteractive(FILE *, const char *);
86#endif
87
88/* Bootstrap __main__ (defined in Modules/main.c) */
89PyAPI_FUNC(int) Py_Main(int argc, wchar_t **argv);
90
91/* In getpath.c */
92PyAPI_FUNC(wchar_t *) Py_GetProgramFullPath(void);
93PyAPI_FUNC(wchar_t *) Py_GetPrefix(void);
94PyAPI_FUNC(wchar_t *) Py_GetExecPrefix(void);
95PyAPI_FUNC(wchar_t *) Py_GetPath(void);
96PyAPI_FUNC(void) Py_SetPath(const wchar_t *);
97#ifdef MS_WINDOWS
98int _Py_CheckPython3();
99#endif
100
101/* In their own files */
102PyAPI_FUNC(const char *) Py_GetVersion(void);
103PyAPI_FUNC(const char *) Py_GetPlatform(void);
104PyAPI_FUNC(const char *) Py_GetCopyright(void);
105PyAPI_FUNC(const char *) Py_GetCompiler(void);
106PyAPI_FUNC(const char *) Py_GetBuildInfo(void);
107#ifndef Py_LIMITED_API
Ned Deily5c4b0d02017-03-04 00:19:55 -0500108PyAPI_FUNC(const char *) _Py_gitidentifier(void);
109PyAPI_FUNC(const char *) _Py_gitversion(void);
Nick Coghland6009512014-11-20 21:39:37 +1000110#endif
111
112/* Internal -- various one-time initializations */
113#ifndef Py_LIMITED_API
114PyAPI_FUNC(PyObject *) _PyBuiltin_Init(void);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800115PyAPI_FUNC(_PyInitError) _PySys_BeginInit(PyObject **sysmod);
Eric Snow6b4be192017-05-22 21:36:03 -0700116PyAPI_FUNC(int) _PySys_EndInit(PyObject *sysdict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800117PyAPI_FUNC(_PyInitError) _PyImport_Init(void);
Nick Coghland6009512014-11-20 21:39:37 +1000118PyAPI_FUNC(void) _PyExc_Init(PyObject * bltinmod);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800119PyAPI_FUNC(_PyInitError) _PyImportHooks_Init(void);
Nick Coghland6009512014-11-20 21:39:37 +1000120PyAPI_FUNC(int) _PyFrame_Init(void);
121PyAPI_FUNC(int) _PyFloat_Init(void);
122PyAPI_FUNC(int) PyByteArray_Init(void);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800123PyAPI_FUNC(_PyInitError) _Py_HashRandomization_Init(_PyCoreConfig *core_config);
Nick Coghland6009512014-11-20 21:39:37 +1000124#endif
125
126/* Various internal finalizers */
127#ifndef Py_LIMITED_API
128PyAPI_FUNC(void) _PyExc_Fini(void);
129PyAPI_FUNC(void) _PyImport_Fini(void);
130PyAPI_FUNC(void) PyMethod_Fini(void);
131PyAPI_FUNC(void) PyFrame_Fini(void);
132PyAPI_FUNC(void) PyCFunction_Fini(void);
133PyAPI_FUNC(void) PyDict_Fini(void);
134PyAPI_FUNC(void) PyTuple_Fini(void);
135PyAPI_FUNC(void) PyList_Fini(void);
136PyAPI_FUNC(void) PySet_Fini(void);
137PyAPI_FUNC(void) PyBytes_Fini(void);
138PyAPI_FUNC(void) PyByteArray_Fini(void);
139PyAPI_FUNC(void) PyFloat_Fini(void);
140PyAPI_FUNC(void) PyOS_FiniInterrupts(void);
141PyAPI_FUNC(void) _PyGC_DumpShutdownStats(void);
142PyAPI_FUNC(void) _PyGC_Fini(void);
143PyAPI_FUNC(void) PySlice_Fini(void);
144PyAPI_FUNC(void) _PyType_Fini(void);
Eric Snow6b4be192017-05-22 21:36:03 -0700145PyAPI_FUNC(void) _Py_HashRandomization_Fini(void);
Yury Selivanoveb636452016-09-08 22:01:51 -0700146PyAPI_FUNC(void) PyAsyncGen_Fini(void);
Nick Coghland6009512014-11-20 21:39:37 +1000147
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600148PyAPI_FUNC(int) _Py_IsFinalizing(void);
Nick Coghland6009512014-11-20 21:39:37 +1000149#endif
150
151/* Signals */
152typedef void (*PyOS_sighandler_t)(int);
153PyAPI_FUNC(PyOS_sighandler_t) PyOS_getsig(int);
154PyAPI_FUNC(PyOS_sighandler_t) PyOS_setsig(int, PyOS_sighandler_t);
155
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300156#ifndef Py_LIMITED_API
Nick Coghland6009512014-11-20 21:39:37 +1000157/* Random */
Victor Stinnere66987e2016-09-06 16:33:52 -0700158PyAPI_FUNC(int) _PyOS_URandom(void *buffer, Py_ssize_t size);
159PyAPI_FUNC(int) _PyOS_URandomNonblock(void *buffer, Py_ssize_t size);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300160#endif /* !Py_LIMITED_API */
Nick Coghland6009512014-11-20 21:39:37 +1000161
Erik Bray031c4bf2017-10-27 11:46:03 +0200162/* Legacy locale support */
163#ifndef Py_LIMITED_API
164PyAPI_FUNC(void) _Py_CoerceLegacyLocale(void);
165PyAPI_FUNC(int) _Py_LegacyLocaleDetected(void);
xdegaye1588be62017-11-12 12:45:59 +0100166PyAPI_FUNC(char *) _Py_SetLocaleFromEnv(int category);
Erik Bray031c4bf2017-10-27 11:46:03 +0200167#endif
168
Nick Coghland6009512014-11-20 21:39:37 +1000169#ifdef __cplusplus
170}
171#endif
172#endif /* !Py_PYLIFECYCLE_H */