blob: 05f17dc73f08ce0df36fc9978d4b4009bb38de8b [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
Nick Coghland6009512014-11-20 21:39:37 +100010#ifndef Py_LIMITED_API
Victor Stinnerf7e5b562017-11-15 15:48:08 -080011typedef struct {
12 const char *prefix;
13 const char *msg;
14 int user_err;
15} _PyInitError;
16
17/* Almost all errors causing Python initialization to fail */
18#ifdef _MSC_VER
19 /* Visual Studio 2015 doesn't implement C99 __func__ in C */
20# define _Py_INIT_GET_FUNC() __FUNCTION__
21#else
22# define _Py_INIT_GET_FUNC() __func__
23#endif
24
25#define _Py_INIT_OK() \
26 (_PyInitError){.prefix = NULL, .msg = NULL, .user_err = 0}
27#define _Py_INIT_ERR(MSG) \
28 (_PyInitError){.prefix = _Py_INIT_GET_FUNC(), .msg = (MSG), .user_err = 0}
29/* Error that can be fixed by the user like invalid input parameter.
30 Don't abort() the process on such error. */
31#define _Py_INIT_USER_ERR(MSG) \
32 (_PyInitError){.prefix = _Py_INIT_GET_FUNC(), .msg = (MSG), .user_err = 1}
Victor Stinner46972b72017-11-24 22:55:40 +010033#define _Py_INIT_NO_MEMORY() _Py_INIT_USER_ERR("memory allocation failed")
Victor Stinnerf7e5b562017-11-15 15:48:08 -080034#define _Py_INIT_FAILED(err) \
35 (err.msg != NULL)
36
Victor Stinner0327bde2017-11-23 17:03:20 +010037#endif
38
39
Serhiy Storchaka4ae06c52017-12-12 13:55:04 +020040PyAPI_FUNC(void) Py_SetProgramName(const wchar_t *);
Victor Stinner0327bde2017-11-23 17:03:20 +010041PyAPI_FUNC(wchar_t *) Py_GetProgramName(void);
42
Serhiy Storchaka4ae06c52017-12-12 13:55:04 +020043PyAPI_FUNC(void) Py_SetPythonHome(const wchar_t *);
Victor Stinner0327bde2017-11-23 17:03:20 +010044PyAPI_FUNC(wchar_t *) Py_GetPythonHome(void);
Victor Stinner0327bde2017-11-23 17:03:20 +010045
46#ifndef Py_LIMITED_API
Steve Dowere8510492018-11-17 20:42:08 -080047PyAPI_FUNC(void) _Py_SetProgramFullPath(const wchar_t *);
48
Victor Stinner0327bde2017-11-23 17:03:20 +010049/* Only used by applications that embed the interpreter and need to
50 * override the standard encoding determination mechanism
51 */
52PyAPI_FUNC(int) Py_SetStandardStreamEncoding(const char *encoding,
53 const char *errors);
54
Eric Snow1abcf672017-05-23 21:46:51 -070055/* PEP 432 Multi-phase initialization API (Private while provisional!) */
Victor Stinner0c90d6f2018-08-05 12:31:59 +020056PyAPI_FUNC(_PyInitError) _Py_InitializeCore(
57 PyInterpreterState **interp_p,
58 const _PyCoreConfig *config);
Eric Snow1abcf672017-05-23 21:46:51 -070059PyAPI_FUNC(int) _Py_IsCoreInitialized(void);
Victor Stinner0c90d6f2018-08-05 12:31:59 +020060PyAPI_FUNC(_PyInitError) _Py_InitializeFromConfig(
61 const _PyCoreConfig *config);
62#ifdef Py_BUILD_CORE
63PyAPI_FUNC(void) _Py_Initialize_ReadEnvVarsNoAlloc(void);
64#endif
Victor Stinner46972b72017-11-24 22:55:40 +010065
Victor Stinner35c28d52018-11-14 02:01:52 +010066PyAPI_FUNC(PyObject *) _Py_GetGlobalVariablesAsDict(void);
67
Victor Stinnerb5fd9ad2017-12-14 02:20:52 +010068PyAPI_FUNC(_PyInitError) _PyCoreConfig_Read(_PyCoreConfig *);
69PyAPI_FUNC(void) _PyCoreConfig_Clear(_PyCoreConfig *);
Victor Stinnerda273412017-12-15 01:46:02 +010070PyAPI_FUNC(int) _PyCoreConfig_Copy(
71 _PyCoreConfig *config,
72 const _PyCoreConfig *config2);
Victor Stinner35c28d52018-11-14 02:01:52 +010073PyAPI_FUNC(PyObject *) _PyCoreConfig_AsDict(const _PyCoreConfig *config);
Victor Stinner0c90d6f2018-08-05 12:31:59 +020074PyAPI_FUNC(void) _PyCoreConfig_SetGlobalConfig(
75 const _PyCoreConfig *config);
76
Victor Stinnerb5fd9ad2017-12-14 02:20:52 +010077
Victor Stinnerc4bca952017-12-19 23:48:17 +010078PyAPI_FUNC(_PyInitError) _PyMainInterpreterConfig_Read(
79 _PyMainInterpreterConfig *config,
80 const _PyCoreConfig *core_config);
Victor Stinner46972b72017-11-24 22:55:40 +010081PyAPI_FUNC(void) _PyMainInterpreterConfig_Clear(_PyMainInterpreterConfig *);
Victor Stinnerda273412017-12-15 01:46:02 +010082PyAPI_FUNC(int) _PyMainInterpreterConfig_Copy(
83 _PyMainInterpreterConfig *config,
84 const _PyMainInterpreterConfig *config2);
Victor Stinner9ee1d422018-11-14 18:58:01 +010085/* Used by _testcapi.get_main_config() */
Victor Stinner35c28d52018-11-14 02:01:52 +010086PyAPI_FUNC(PyObject*) _PyMainInterpreterConfig_AsDict(
87 const _PyMainInterpreterConfig *config);
Victor Stinner46972b72017-11-24 22:55:40 +010088
Victor Stinner0c90d6f2018-08-05 12:31:59 +020089PyAPI_FUNC(_PyInitError) _Py_InitializeMainInterpreter(
90 PyInterpreterState *interp,
91 const _PyMainInterpreterConfig *config);
92#endif /* !defined(Py_LIMITED_API) */
93
Nick Coghland6009512014-11-20 21:39:37 +100094
Eric Snow1abcf672017-05-23 21:46:51 -070095/* Initialization and finalization */
Nick Coghland6009512014-11-20 21:39:37 +100096PyAPI_FUNC(void) Py_Initialize(void);
97PyAPI_FUNC(void) Py_InitializeEx(int);
98#ifndef Py_LIMITED_API
Victor Stinnerf7e5b562017-11-15 15:48:08 -080099PyAPI_FUNC(void) _Py_FatalInitError(_PyInitError err) _Py_NO_RETURN;
Nick Coghland6009512014-11-20 21:39:37 +1000100#endif
101PyAPI_FUNC(void) Py_Finalize(void);
Miss Islington (bot)d1e71752018-12-20 13:39:35 -0800102#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000103PyAPI_FUNC(int) Py_FinalizeEx(void);
Miss Islington (bot)d1e71752018-12-20 13:39:35 -0800104#endif
Nick Coghland6009512014-11-20 21:39:37 +1000105PyAPI_FUNC(int) Py_IsInitialized(void);
Eric Snow1abcf672017-05-23 21:46:51 -0700106
107/* Subinterpreter support */
Nick Coghland6009512014-11-20 21:39:37 +1000108PyAPI_FUNC(PyThreadState *) Py_NewInterpreter(void);
109PyAPI_FUNC(void) Py_EndInterpreter(PyThreadState *);
110
111
112/* Py_PyAtExit is for the atexit module, Py_AtExit is for low-level
113 * exit functions.
114 */
115#ifndef Py_LIMITED_API
Marcel Plch776407f2017-12-20 11:17:58 +0100116PyAPI_FUNC(void) _Py_PyAtExit(void (*func)(PyObject *), PyObject *);
Nick Coghland6009512014-11-20 21:39:37 +1000117#endif
118PyAPI_FUNC(int) Py_AtExit(void (*func)(void));
119
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800120PyAPI_FUNC(void) Py_Exit(int) _Py_NO_RETURN;
Nick Coghland6009512014-11-20 21:39:37 +1000121
122/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. */
123#ifndef Py_LIMITED_API
124PyAPI_FUNC(void) _Py_RestoreSignals(void);
125
126PyAPI_FUNC(int) Py_FdIsInteractive(FILE *, const char *);
127#endif
128
129/* Bootstrap __main__ (defined in Modules/main.c) */
130PyAPI_FUNC(int) Py_Main(int argc, wchar_t **argv);
Victor Stinner94540602017-12-16 04:54:22 +0100131#ifdef Py_BUILD_CORE
132PyAPI_FUNC(int) _Py_UnixMain(int argc, char **argv);
133#endif
Nick Coghland6009512014-11-20 21:39:37 +1000134
135/* In getpath.c */
136PyAPI_FUNC(wchar_t *) Py_GetProgramFullPath(void);
137PyAPI_FUNC(wchar_t *) Py_GetPrefix(void);
138PyAPI_FUNC(wchar_t *) Py_GetExecPrefix(void);
139PyAPI_FUNC(wchar_t *) Py_GetPath(void);
Victor Stinnerd4341102017-11-23 00:12:09 +0100140#ifdef Py_BUILD_CORE
Victor Stinnerb5fd9ad2017-12-14 02:20:52 +0100141PyAPI_FUNC(_PyInitError) _PyPathConfig_Init(const _PyCoreConfig *core_config);
Victor Stinner11a247d2017-12-13 21:05:57 +0100142PyAPI_FUNC(PyObject*) _PyPathConfig_ComputeArgv0(int argc, wchar_t **argv);
Victor Stinner9bee3292017-12-21 16:49:13 +0100143PyAPI_FUNC(int) _Py_FindEnvConfigValue(
144 FILE *env_file,
145 const wchar_t *key,
146 wchar_t *value,
147 size_t value_size);
Victor Stinnerd4341102017-11-23 00:12:09 +0100148#endif
Nick Coghland6009512014-11-20 21:39:37 +1000149PyAPI_FUNC(void) Py_SetPath(const wchar_t *);
150#ifdef MS_WINDOWS
Victor Stinner31a83932017-12-04 13:39:15 +0100151int _Py_CheckPython3(void);
Nick Coghland6009512014-11-20 21:39:37 +1000152#endif
153
154/* In their own files */
155PyAPI_FUNC(const char *) Py_GetVersion(void);
156PyAPI_FUNC(const char *) Py_GetPlatform(void);
157PyAPI_FUNC(const char *) Py_GetCopyright(void);
158PyAPI_FUNC(const char *) Py_GetCompiler(void);
159PyAPI_FUNC(const char *) Py_GetBuildInfo(void);
160#ifndef Py_LIMITED_API
Ned Deily5c4b0d02017-03-04 00:19:55 -0500161PyAPI_FUNC(const char *) _Py_gitidentifier(void);
162PyAPI_FUNC(const char *) _Py_gitversion(void);
Nick Coghland6009512014-11-20 21:39:37 +1000163#endif
164
165/* Internal -- various one-time initializations */
166#ifndef Py_LIMITED_API
167PyAPI_FUNC(PyObject *) _PyBuiltin_Init(void);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800168PyAPI_FUNC(_PyInitError) _PySys_BeginInit(PyObject **sysmod);
Victor Stinner41264f12017-12-15 02:05:29 +0100169PyAPI_FUNC(int) _PySys_EndInit(PyObject *sysdict, _PyMainInterpreterConfig *config);
Victor Stinner672b6ba2017-12-06 17:25:50 +0100170PyAPI_FUNC(_PyInitError) _PyImport_Init(PyInterpreterState *interp);
Nick Coghland6009512014-11-20 21:39:37 +1000171PyAPI_FUNC(void) _PyExc_Init(PyObject * bltinmod);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800172PyAPI_FUNC(_PyInitError) _PyImportHooks_Init(void);
Nick Coghland6009512014-11-20 21:39:37 +1000173PyAPI_FUNC(int) _PyFrame_Init(void);
174PyAPI_FUNC(int) _PyFloat_Init(void);
175PyAPI_FUNC(int) PyByteArray_Init(void);
Victor Stinner358e5e12017-12-15 00:51:22 +0100176PyAPI_FUNC(_PyInitError) _Py_HashRandomization_Init(const _PyCoreConfig *);
177#endif
178#ifdef Py_BUILD_CORE
179PyAPI_FUNC(int) _Py_ReadHashSeed(
180 const char *seed_text,
181 int *use_hash_seed,
182 unsigned long *hash_seed);
Nick Coghland6009512014-11-20 21:39:37 +1000183#endif
184
185/* Various internal finalizers */
Victor Stinner92a3c6f2017-12-06 18:12:59 +0100186
187#ifdef Py_BUILD_CORE
Nick Coghland6009512014-11-20 21:39:37 +1000188PyAPI_FUNC(void) _PyExc_Fini(void);
189PyAPI_FUNC(void) _PyImport_Fini(void);
Victor Stinner92a3c6f2017-12-06 18:12:59 +0100190PyAPI_FUNC(void) _PyImport_Fini2(void);
191PyAPI_FUNC(void) _PyGC_DumpShutdownStats(void);
192PyAPI_FUNC(void) _PyGC_Fini(void);
193PyAPI_FUNC(void) _PyType_Fini(void);
194PyAPI_FUNC(void) _Py_HashRandomization_Fini(void);
195#endif /* Py_BUILD_CORE */
196
197#ifndef Py_LIMITED_API
Nick Coghland6009512014-11-20 21:39:37 +1000198PyAPI_FUNC(void) PyMethod_Fini(void);
199PyAPI_FUNC(void) PyFrame_Fini(void);
200PyAPI_FUNC(void) PyCFunction_Fini(void);
201PyAPI_FUNC(void) PyDict_Fini(void);
202PyAPI_FUNC(void) PyTuple_Fini(void);
203PyAPI_FUNC(void) PyList_Fini(void);
204PyAPI_FUNC(void) PySet_Fini(void);
205PyAPI_FUNC(void) PyBytes_Fini(void);
206PyAPI_FUNC(void) PyByteArray_Fini(void);
207PyAPI_FUNC(void) PyFloat_Fini(void);
208PyAPI_FUNC(void) PyOS_FiniInterrupts(void);
Nick Coghland6009512014-11-20 21:39:37 +1000209PyAPI_FUNC(void) PySlice_Fini(void);
Yury Selivanoveb636452016-09-08 22:01:51 -0700210PyAPI_FUNC(void) PyAsyncGen_Fini(void);
Nick Coghland6009512014-11-20 21:39:37 +1000211
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600212PyAPI_FUNC(int) _Py_IsFinalizing(void);
Victor Stinner92a3c6f2017-12-06 18:12:59 +0100213#endif /* !Py_LIMITED_API */
Nick Coghland6009512014-11-20 21:39:37 +1000214
215/* Signals */
216typedef void (*PyOS_sighandler_t)(int);
217PyAPI_FUNC(PyOS_sighandler_t) PyOS_getsig(int);
218PyAPI_FUNC(PyOS_sighandler_t) PyOS_setsig(int, PyOS_sighandler_t);
219
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300220#ifndef Py_LIMITED_API
Nick Coghland6009512014-11-20 21:39:37 +1000221/* Random */
Victor Stinnere66987e2016-09-06 16:33:52 -0700222PyAPI_FUNC(int) _PyOS_URandom(void *buffer, Py_ssize_t size);
223PyAPI_FUNC(int) _PyOS_URandomNonblock(void *buffer, Py_ssize_t size);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300224#endif /* !Py_LIMITED_API */
Nick Coghland6009512014-11-20 21:39:37 +1000225
Erik Bray031c4bf2017-10-27 11:46:03 +0200226/* Legacy locale support */
227#ifndef Py_LIMITED_API
Victor Stinner94540602017-12-16 04:54:22 +0100228PyAPI_FUNC(void) _Py_CoerceLegacyLocale(const _PyCoreConfig *config);
Erik Bray031c4bf2017-10-27 11:46:03 +0200229PyAPI_FUNC(int) _Py_LegacyLocaleDetected(void);
xdegaye1588be62017-11-12 12:45:59 +0100230PyAPI_FUNC(char *) _Py_SetLocaleFromEnv(int category);
Erik Bray031c4bf2017-10-27 11:46:03 +0200231#endif
232
Nick Coghland6009512014-11-20 21:39:37 +1000233#ifdef __cplusplus
234}
235#endif
236#endif /* !Py_PYLIFECYCLE_H */