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