pylifecycle.h 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. /* Interfaces to configure, query, create & destroy the Python runtime */
  2. #ifndef Py_PYLIFECYCLE_H
  3. #define Py_PYLIFECYCLE_H
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. #ifndef Py_LIMITED_API
  8. typedef struct {
  9. const char *prefix;
  10. const char *msg;
  11. int user_err;
  12. } _PyInitError;
  13. /* Almost all errors causing Python initialization to fail */
  14. #ifdef _MSC_VER
  15. /* Visual Studio 2015 doesn't implement C99 __func__ in C */
  16. # define _Py_INIT_GET_FUNC() __FUNCTION__
  17. #else
  18. # define _Py_INIT_GET_FUNC() __func__
  19. #endif
  20. #define _Py_INIT_OK() \
  21. (_PyInitError){.prefix = NULL, .msg = NULL, .user_err = 0}
  22. #define _Py_INIT_ERR(MSG) \
  23. (_PyInitError){.prefix = _Py_INIT_GET_FUNC(), .msg = (MSG), .user_err = 0}
  24. /* Error that can be fixed by the user like invalid input parameter.
  25. Don't abort() the process on such error. */
  26. #define _Py_INIT_USER_ERR(MSG) \
  27. (_PyInitError){.prefix = _Py_INIT_GET_FUNC(), .msg = (MSG), .user_err = 1}
  28. #define _Py_INIT_NO_MEMORY() _Py_INIT_USER_ERR("memory allocation failed")
  29. #define _Py_INIT_FAILED(err) \
  30. (err.msg != NULL)
  31. #endif
  32. PyAPI_FUNC(void) Py_SetProgramName(const wchar_t *);
  33. PyAPI_FUNC(wchar_t *) Py_GetProgramName(void);
  34. PyAPI_FUNC(void) Py_SetPythonHome(const wchar_t *);
  35. PyAPI_FUNC(wchar_t *) Py_GetPythonHome(void);
  36. #ifndef Py_LIMITED_API
  37. PyAPI_FUNC(void) _Py_SetProgramFullPath(const wchar_t *);
  38. /* Only used by applications that embed the interpreter and need to
  39. * override the standard encoding determination mechanism
  40. */
  41. PyAPI_FUNC(int) Py_SetStandardStreamEncoding(const char *encoding,
  42. const char *errors);
  43. /* PEP 432 Multi-phase initialization API (Private while provisional!) */
  44. PyAPI_FUNC(_PyInitError) _Py_InitializeCore(
  45. PyInterpreterState **interp_p,
  46. const _PyCoreConfig *config);
  47. PyAPI_FUNC(int) _Py_IsCoreInitialized(void);
  48. PyAPI_FUNC(_PyInitError) _Py_InitializeFromConfig(
  49. const _PyCoreConfig *config);
  50. #ifdef Py_BUILD_CORE
  51. PyAPI_FUNC(void) _Py_Initialize_ReadEnvVarsNoAlloc(void);
  52. #endif
  53. PyAPI_FUNC(PyObject *) _Py_GetGlobalVariablesAsDict(void);
  54. PyAPI_FUNC(_PyInitError) _PyCoreConfig_Read(_PyCoreConfig *);
  55. PyAPI_FUNC(void) _PyCoreConfig_Clear(_PyCoreConfig *);
  56. PyAPI_FUNC(int) _PyCoreConfig_Copy(
  57. _PyCoreConfig *config,
  58. const _PyCoreConfig *config2);
  59. PyAPI_FUNC(PyObject *) _PyCoreConfig_AsDict(const _PyCoreConfig *config);
  60. PyAPI_FUNC(void) _PyCoreConfig_SetGlobalConfig(
  61. const _PyCoreConfig *config);
  62. PyAPI_FUNC(_PyInitError) _PyMainInterpreterConfig_Read(
  63. _PyMainInterpreterConfig *config,
  64. const _PyCoreConfig *core_config);
  65. PyAPI_FUNC(void) _PyMainInterpreterConfig_Clear(_PyMainInterpreterConfig *);
  66. PyAPI_FUNC(int) _PyMainInterpreterConfig_Copy(
  67. _PyMainInterpreterConfig *config,
  68. const _PyMainInterpreterConfig *config2);
  69. /* Used by _testcapi.get_main_config() */
  70. PyAPI_FUNC(PyObject*) _PyMainInterpreterConfig_AsDict(
  71. const _PyMainInterpreterConfig *config);
  72. PyAPI_FUNC(_PyInitError) _Py_InitializeMainInterpreter(
  73. PyInterpreterState *interp,
  74. const _PyMainInterpreterConfig *config);
  75. #endif /* !defined(Py_LIMITED_API) */
  76. /* Initialization and finalization */
  77. PyAPI_FUNC(void) Py_Initialize(void);
  78. PyAPI_FUNC(void) Py_InitializeEx(int);
  79. #ifndef Py_LIMITED_API
  80. PyAPI_FUNC(void) _Py_FatalInitError(_PyInitError err) _Py_NO_RETURN;
  81. #endif
  82. PyAPI_FUNC(void) Py_Finalize(void);
  83. #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
  84. PyAPI_FUNC(int) Py_FinalizeEx(void);
  85. #endif
  86. PyAPI_FUNC(int) Py_IsInitialized(void);
  87. /* Subinterpreter support */
  88. PyAPI_FUNC(PyThreadState *) Py_NewInterpreter(void);
  89. PyAPI_FUNC(void) Py_EndInterpreter(PyThreadState *);
  90. /* Py_PyAtExit is for the atexit module, Py_AtExit is for low-level
  91. * exit functions.
  92. */
  93. #ifndef Py_LIMITED_API
  94. PyAPI_FUNC(void) _Py_PyAtExit(void (*func)(PyObject *), PyObject *);
  95. #endif
  96. PyAPI_FUNC(int) Py_AtExit(void (*func)(void));
  97. PyAPI_FUNC(void) Py_Exit(int) _Py_NO_RETURN;
  98. /* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. */
  99. #ifndef Py_LIMITED_API
  100. PyAPI_FUNC(void) _Py_RestoreSignals(void);
  101. PyAPI_FUNC(int) Py_FdIsInteractive(FILE *, const char *);
  102. #endif
  103. /* Bootstrap __main__ (defined in Modules/main.c) */
  104. PyAPI_FUNC(int) Py_Main(int argc, wchar_t **argv);
  105. #ifdef Py_BUILD_CORE
  106. PyAPI_FUNC(int) _Py_UnixMain(int argc, char **argv);
  107. #endif
  108. /* In getpath.c */
  109. PyAPI_FUNC(wchar_t *) Py_GetProgramFullPath(void);
  110. PyAPI_FUNC(wchar_t *) Py_GetPrefix(void);
  111. PyAPI_FUNC(wchar_t *) Py_GetExecPrefix(void);
  112. PyAPI_FUNC(wchar_t *) Py_GetPath(void);
  113. #ifdef Py_BUILD_CORE
  114. PyAPI_FUNC(_PyInitError) _PyPathConfig_Init(const _PyCoreConfig *core_config);
  115. PyAPI_FUNC(int) _PyPathConfig_ComputeArgv0(
  116. int argc, wchar_t **argv,
  117. PyObject **argv0_p);
  118. PyAPI_FUNC(int) _Py_FindEnvConfigValue(
  119. FILE *env_file,
  120. const wchar_t *key,
  121. wchar_t *value,
  122. size_t value_size);
  123. #endif
  124. PyAPI_FUNC(void) Py_SetPath(const wchar_t *);
  125. #ifdef MS_WINDOWS
  126. int _Py_CheckPython3(void);
  127. #endif
  128. /* In their own files */
  129. PyAPI_FUNC(const char *) Py_GetVersion(void);
  130. PyAPI_FUNC(const char *) Py_GetPlatform(void);
  131. PyAPI_FUNC(const char *) Py_GetCopyright(void);
  132. PyAPI_FUNC(const char *) Py_GetCompiler(void);
  133. PyAPI_FUNC(const char *) Py_GetBuildInfo(void);
  134. #ifndef Py_LIMITED_API
  135. PyAPI_FUNC(const char *) _Py_gitidentifier(void);
  136. PyAPI_FUNC(const char *) _Py_gitversion(void);
  137. #endif
  138. /* Internal -- various one-time initializations */
  139. #ifndef Py_LIMITED_API
  140. PyAPI_FUNC(PyObject *) _PyBuiltin_Init(void);
  141. PyAPI_FUNC(_PyInitError) _PySys_BeginInit(PyObject **sysmod);
  142. PyAPI_FUNC(int) _PySys_EndInit(PyObject *sysdict, _PyMainInterpreterConfig *config);
  143. PyAPI_FUNC(_PyInitError) _PyImport_Init(PyInterpreterState *interp);
  144. PyAPI_FUNC(void) _PyExc_Init(PyObject * bltinmod);
  145. PyAPI_FUNC(_PyInitError) _PyImportHooks_Init(void);
  146. PyAPI_FUNC(int) _PyFrame_Init(void);
  147. PyAPI_FUNC(int) _PyFloat_Init(void);
  148. PyAPI_FUNC(int) PyByteArray_Init(void);
  149. PyAPI_FUNC(_PyInitError) _Py_HashRandomization_Init(const _PyCoreConfig *);
  150. #endif
  151. #ifdef Py_BUILD_CORE
  152. PyAPI_FUNC(int) _Py_ReadHashSeed(
  153. const char *seed_text,
  154. int *use_hash_seed,
  155. unsigned long *hash_seed);
  156. #endif
  157. /* Various internal finalizers */
  158. #ifdef Py_BUILD_CORE
  159. PyAPI_FUNC(void) _PyExc_Fini(void);
  160. PyAPI_FUNC(void) _PyImport_Fini(void);
  161. PyAPI_FUNC(void) _PyImport_Fini2(void);
  162. PyAPI_FUNC(void) _PyGC_DumpShutdownStats(void);
  163. PyAPI_FUNC(void) _PyGC_Fini(void);
  164. PyAPI_FUNC(void) _PyType_Fini(void);
  165. PyAPI_FUNC(void) _Py_HashRandomization_Fini(void);
  166. #endif /* Py_BUILD_CORE */
  167. #ifndef Py_LIMITED_API
  168. PyAPI_FUNC(void) PyMethod_Fini(void);
  169. PyAPI_FUNC(void) PyFrame_Fini(void);
  170. PyAPI_FUNC(void) PyCFunction_Fini(void);
  171. PyAPI_FUNC(void) PyDict_Fini(void);
  172. PyAPI_FUNC(void) PyTuple_Fini(void);
  173. PyAPI_FUNC(void) PyList_Fini(void);
  174. PyAPI_FUNC(void) PySet_Fini(void);
  175. PyAPI_FUNC(void) PyBytes_Fini(void);
  176. PyAPI_FUNC(void) PyByteArray_Fini(void);
  177. PyAPI_FUNC(void) PyFloat_Fini(void);
  178. PyAPI_FUNC(void) PyOS_FiniInterrupts(void);
  179. PyAPI_FUNC(void) PySlice_Fini(void);
  180. PyAPI_FUNC(void) PyAsyncGen_Fini(void);
  181. PyAPI_FUNC(int) _Py_IsFinalizing(void);
  182. #endif /* !Py_LIMITED_API */
  183. /* Signals */
  184. typedef void (*PyOS_sighandler_t)(int);
  185. PyAPI_FUNC(PyOS_sighandler_t) PyOS_getsig(int);
  186. PyAPI_FUNC(PyOS_sighandler_t) PyOS_setsig(int, PyOS_sighandler_t);
  187. #ifndef Py_LIMITED_API
  188. /* Random */
  189. PyAPI_FUNC(int) _PyOS_URandom(void *buffer, Py_ssize_t size);
  190. PyAPI_FUNC(int) _PyOS_URandomNonblock(void *buffer, Py_ssize_t size);
  191. #endif /* !Py_LIMITED_API */
  192. /* Legacy locale support */
  193. #ifndef Py_LIMITED_API
  194. PyAPI_FUNC(void) _Py_CoerceLegacyLocale(const _PyCoreConfig *config);
  195. PyAPI_FUNC(int) _Py_LegacyLocaleDetected(void);
  196. PyAPI_FUNC(char *) _Py_SetLocaleFromEnv(int category);
  197. #endif
  198. #ifdef __cplusplus
  199. }
  200. #endif
  201. #endif /* !Py_PYLIFECYCLE_H */