17db96d56Sopenharmony_ci#ifndef Py_INTERNAL_CORECONFIG_H 27db96d56Sopenharmony_ci#define Py_INTERNAL_CORECONFIG_H 37db96d56Sopenharmony_ci#ifdef __cplusplus 47db96d56Sopenharmony_ciextern "C" { 57db96d56Sopenharmony_ci#endif 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci#ifndef Py_BUILD_CORE 87db96d56Sopenharmony_ci# error "this header requires Py_BUILD_CORE define" 97db96d56Sopenharmony_ci#endif 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci/* Forward declaration */ 127db96d56Sopenharmony_cistruct pyruntimestate; 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci/* --- PyStatus ----------------------------------------------- */ 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ci/* Almost all errors causing Python initialization to fail */ 177db96d56Sopenharmony_ci#ifdef _MSC_VER 187db96d56Sopenharmony_ci /* Visual Studio 2015 doesn't implement C99 __func__ in C */ 197db96d56Sopenharmony_ci# define _PyStatus_GET_FUNC() __FUNCTION__ 207db96d56Sopenharmony_ci#else 217db96d56Sopenharmony_ci# define _PyStatus_GET_FUNC() __func__ 227db96d56Sopenharmony_ci#endif 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ci#define _PyStatus_OK() \ 257db96d56Sopenharmony_ci (PyStatus){._type = _PyStatus_TYPE_OK,} 267db96d56Sopenharmony_ci /* other fields are set to 0 */ 277db96d56Sopenharmony_ci#define _PyStatus_ERR(ERR_MSG) \ 287db96d56Sopenharmony_ci (PyStatus){ \ 297db96d56Sopenharmony_ci ._type = _PyStatus_TYPE_ERROR, \ 307db96d56Sopenharmony_ci .func = _PyStatus_GET_FUNC(), \ 317db96d56Sopenharmony_ci .err_msg = (ERR_MSG)} 327db96d56Sopenharmony_ci /* other fields are set to 0 */ 337db96d56Sopenharmony_ci#define _PyStatus_NO_MEMORY() _PyStatus_ERR("memory allocation failed") 347db96d56Sopenharmony_ci#define _PyStatus_EXIT(EXITCODE) \ 357db96d56Sopenharmony_ci (PyStatus){ \ 367db96d56Sopenharmony_ci ._type = _PyStatus_TYPE_EXIT, \ 377db96d56Sopenharmony_ci .exitcode = (EXITCODE)} 387db96d56Sopenharmony_ci#define _PyStatus_IS_ERROR(err) \ 397db96d56Sopenharmony_ci (err._type == _PyStatus_TYPE_ERROR) 407db96d56Sopenharmony_ci#define _PyStatus_IS_EXIT(err) \ 417db96d56Sopenharmony_ci (err._type == _PyStatus_TYPE_EXIT) 427db96d56Sopenharmony_ci#define _PyStatus_EXCEPTION(err) \ 437db96d56Sopenharmony_ci (err._type != _PyStatus_TYPE_OK) 447db96d56Sopenharmony_ci#define _PyStatus_UPDATE_FUNC(err) \ 457db96d56Sopenharmony_ci do { err.func = _PyStatus_GET_FUNC(); } while (0) 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_ciPyObject* _PyErr_SetFromPyStatus(PyStatus status); 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_ci/* --- PyWideStringList ------------------------------------------------ */ 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ci#define _PyWideStringList_INIT (PyWideStringList){.length = 0, .items = NULL} 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_ci#ifndef NDEBUG 547db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyWideStringList_CheckConsistency(const PyWideStringList *list); 557db96d56Sopenharmony_ci#endif 567db96d56Sopenharmony_ciPyAPI_FUNC(void) _PyWideStringList_Clear(PyWideStringList *list); 577db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyWideStringList_Copy(PyWideStringList *list, 587db96d56Sopenharmony_ci const PyWideStringList *list2); 597db96d56Sopenharmony_ciPyAPI_FUNC(PyStatus) _PyWideStringList_Extend(PyWideStringList *list, 607db96d56Sopenharmony_ci const PyWideStringList *list2); 617db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) _PyWideStringList_AsList(const PyWideStringList *list); 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ci/* --- _PyArgv ---------------------------------------------------- */ 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_citypedef struct _PyArgv { 677db96d56Sopenharmony_ci Py_ssize_t argc; 687db96d56Sopenharmony_ci int use_bytes_argv; 697db96d56Sopenharmony_ci char * const *bytes_argv; 707db96d56Sopenharmony_ci wchar_t * const *wchar_argv; 717db96d56Sopenharmony_ci} _PyArgv; 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ciPyAPI_FUNC(PyStatus) _PyArgv_AsWstrList(const _PyArgv *args, 747db96d56Sopenharmony_ci PyWideStringList *list); 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci/* --- Helper functions ------------------------------------------- */ 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ciPyAPI_FUNC(int) _Py_str_to_int( 807db96d56Sopenharmony_ci const char *str, 817db96d56Sopenharmony_ci int *result); 827db96d56Sopenharmony_ciPyAPI_FUNC(const wchar_t*) _Py_get_xoption( 837db96d56Sopenharmony_ci const PyWideStringList *xoptions, 847db96d56Sopenharmony_ci const wchar_t *name); 857db96d56Sopenharmony_ciPyAPI_FUNC(const char*) _Py_GetEnv( 867db96d56Sopenharmony_ci int use_environment, 877db96d56Sopenharmony_ci const char *name); 887db96d56Sopenharmony_ciPyAPI_FUNC(void) _Py_get_env_flag( 897db96d56Sopenharmony_ci int use_environment, 907db96d56Sopenharmony_ci int *flag, 917db96d56Sopenharmony_ci const char *name); 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ci/* Py_GetArgcArgv() helper */ 947db96d56Sopenharmony_ciPyAPI_FUNC(void) _Py_ClearArgcArgv(void); 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ci 977db96d56Sopenharmony_ci/* --- _PyPreCmdline ------------------------------------------------- */ 987db96d56Sopenharmony_ci 997db96d56Sopenharmony_citypedef struct { 1007db96d56Sopenharmony_ci PyWideStringList argv; 1017db96d56Sopenharmony_ci PyWideStringList xoptions; /* "-X value" option */ 1027db96d56Sopenharmony_ci int isolated; /* -I option */ 1037db96d56Sopenharmony_ci int use_environment; /* -E option */ 1047db96d56Sopenharmony_ci int dev_mode; /* -X dev and PYTHONDEVMODE */ 1057db96d56Sopenharmony_ci int warn_default_encoding; /* -X warn_default_encoding and PYTHONWARNDEFAULTENCODING */ 1067db96d56Sopenharmony_ci} _PyPreCmdline; 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_ci#define _PyPreCmdline_INIT \ 1097db96d56Sopenharmony_ci (_PyPreCmdline){ \ 1107db96d56Sopenharmony_ci .use_environment = -1, \ 1117db96d56Sopenharmony_ci .isolated = -1, \ 1127db96d56Sopenharmony_ci .dev_mode = -1} 1137db96d56Sopenharmony_ci/* Note: _PyPreCmdline_INIT sets other fields to 0/NULL */ 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ciextern void _PyPreCmdline_Clear(_PyPreCmdline *cmdline); 1167db96d56Sopenharmony_ciextern PyStatus _PyPreCmdline_SetArgv(_PyPreCmdline *cmdline, 1177db96d56Sopenharmony_ci const _PyArgv *args); 1187db96d56Sopenharmony_ciextern PyStatus _PyPreCmdline_SetConfig( 1197db96d56Sopenharmony_ci const _PyPreCmdline *cmdline, 1207db96d56Sopenharmony_ci PyConfig *config); 1217db96d56Sopenharmony_ciextern PyStatus _PyPreCmdline_Read(_PyPreCmdline *cmdline, 1227db96d56Sopenharmony_ci const PyPreConfig *preconfig); 1237db96d56Sopenharmony_ci 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ci/* --- PyPreConfig ----------------------------------------------- */ 1267db96d56Sopenharmony_ci 1277db96d56Sopenharmony_ciPyAPI_FUNC(void) _PyPreConfig_InitCompatConfig(PyPreConfig *preconfig); 1287db96d56Sopenharmony_ciextern void _PyPreConfig_InitFromConfig( 1297db96d56Sopenharmony_ci PyPreConfig *preconfig, 1307db96d56Sopenharmony_ci const PyConfig *config); 1317db96d56Sopenharmony_ciextern PyStatus _PyPreConfig_InitFromPreConfig( 1327db96d56Sopenharmony_ci PyPreConfig *preconfig, 1337db96d56Sopenharmony_ci const PyPreConfig *config2); 1347db96d56Sopenharmony_ciextern PyObject* _PyPreConfig_AsDict(const PyPreConfig *preconfig); 1357db96d56Sopenharmony_ciextern void _PyPreConfig_GetConfig(PyPreConfig *preconfig, 1367db96d56Sopenharmony_ci const PyConfig *config); 1377db96d56Sopenharmony_ciextern PyStatus _PyPreConfig_Read(PyPreConfig *preconfig, 1387db96d56Sopenharmony_ci const _PyArgv *args); 1397db96d56Sopenharmony_ciextern PyStatus _PyPreConfig_Write(const PyPreConfig *preconfig); 1407db96d56Sopenharmony_ci 1417db96d56Sopenharmony_ci 1427db96d56Sopenharmony_ci/* --- PyConfig ---------------------------------------------- */ 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_citypedef enum { 1457db96d56Sopenharmony_ci /* Py_Initialize() API: backward compatibility with Python 3.6 and 3.7 */ 1467db96d56Sopenharmony_ci _PyConfig_INIT_COMPAT = 1, 1477db96d56Sopenharmony_ci _PyConfig_INIT_PYTHON = 2, 1487db96d56Sopenharmony_ci _PyConfig_INIT_ISOLATED = 3 1497db96d56Sopenharmony_ci} _PyConfigInitEnum; 1507db96d56Sopenharmony_ci 1517db96d56Sopenharmony_ciPyAPI_FUNC(void) _PyConfig_InitCompatConfig(PyConfig *config); 1527db96d56Sopenharmony_ciextern PyStatus _PyConfig_Copy( 1537db96d56Sopenharmony_ci PyConfig *config, 1547db96d56Sopenharmony_ci const PyConfig *config2); 1557db96d56Sopenharmony_ciextern PyStatus _PyConfig_InitPathConfig( 1567db96d56Sopenharmony_ci PyConfig *config, 1577db96d56Sopenharmony_ci int compute_path_config); 1587db96d56Sopenharmony_ciextern PyStatus _PyConfig_InitImportConfig(PyConfig *config); 1597db96d56Sopenharmony_ciextern PyStatus _PyConfig_Read(PyConfig *config, int compute_path_config); 1607db96d56Sopenharmony_ciextern PyStatus _PyConfig_Write(const PyConfig *config, 1617db96d56Sopenharmony_ci struct pyruntimestate *runtime); 1627db96d56Sopenharmony_ciextern PyStatus _PyConfig_SetPyArgv( 1637db96d56Sopenharmony_ci PyConfig *config, 1647db96d56Sopenharmony_ci const _PyArgv *args); 1657db96d56Sopenharmony_ci 1667db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) _PyConfig_AsDict(const PyConfig *config); 1677db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyConfig_FromDict(PyConfig *config, PyObject *dict); 1687db96d56Sopenharmony_ci 1697db96d56Sopenharmony_ciextern void _Py_DumpPathConfig(PyThreadState *tstate); 1707db96d56Sopenharmony_ci 1717db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) _Py_Get_Getpath_CodeObject(void); 1727db96d56Sopenharmony_ci 1737db96d56Sopenharmony_ciextern int _Py_global_config_int_max_str_digits; 1747db96d56Sopenharmony_ci 1757db96d56Sopenharmony_ci 1767db96d56Sopenharmony_ci/* --- Function used for testing ---------------------------------- */ 1777db96d56Sopenharmony_ci 1787db96d56Sopenharmony_ciPyAPI_FUNC(PyObject*) _Py_GetConfigsAsDict(void); 1797db96d56Sopenharmony_ci 1807db96d56Sopenharmony_ci#ifdef __cplusplus 1817db96d56Sopenharmony_ci} 1827db96d56Sopenharmony_ci#endif 1837db96d56Sopenharmony_ci#endif /* !Py_INTERNAL_CORECONFIG_H */ 184