17db96d56Sopenharmony_ci#ifndef Py_PYCORECONFIG_H
27db96d56Sopenharmony_ci#define Py_PYCORECONFIG_H
37db96d56Sopenharmony_ci#ifndef Py_LIMITED_API
47db96d56Sopenharmony_ci#ifdef __cplusplus
57db96d56Sopenharmony_ciextern "C" {
67db96d56Sopenharmony_ci#endif
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ci/* --- PyStatus ----------------------------------------------- */
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_citypedef struct {
117db96d56Sopenharmony_ci    enum {
127db96d56Sopenharmony_ci        _PyStatus_TYPE_OK=0,
137db96d56Sopenharmony_ci        _PyStatus_TYPE_ERROR=1,
147db96d56Sopenharmony_ci        _PyStatus_TYPE_EXIT=2
157db96d56Sopenharmony_ci    } _type;
167db96d56Sopenharmony_ci    const char *func;
177db96d56Sopenharmony_ci    const char *err_msg;
187db96d56Sopenharmony_ci    int exitcode;
197db96d56Sopenharmony_ci} PyStatus;
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ciPyAPI_FUNC(PyStatus) PyStatus_Ok(void);
227db96d56Sopenharmony_ciPyAPI_FUNC(PyStatus) PyStatus_Error(const char *err_msg);
237db96d56Sopenharmony_ciPyAPI_FUNC(PyStatus) PyStatus_NoMemory(void);
247db96d56Sopenharmony_ciPyAPI_FUNC(PyStatus) PyStatus_Exit(int exitcode);
257db96d56Sopenharmony_ciPyAPI_FUNC(int) PyStatus_IsError(PyStatus err);
267db96d56Sopenharmony_ciPyAPI_FUNC(int) PyStatus_IsExit(PyStatus err);
277db96d56Sopenharmony_ciPyAPI_FUNC(int) PyStatus_Exception(PyStatus err);
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci/* --- PyWideStringList ------------------------------------------------ */
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_citypedef struct {
327db96d56Sopenharmony_ci    /* If length is greater than zero, items must be non-NULL
337db96d56Sopenharmony_ci       and all items strings must be non-NULL */
347db96d56Sopenharmony_ci    Py_ssize_t length;
357db96d56Sopenharmony_ci    wchar_t **items;
367db96d56Sopenharmony_ci} PyWideStringList;
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ciPyAPI_FUNC(PyStatus) PyWideStringList_Append(PyWideStringList *list,
397db96d56Sopenharmony_ci    const wchar_t *item);
407db96d56Sopenharmony_ciPyAPI_FUNC(PyStatus) PyWideStringList_Insert(PyWideStringList *list,
417db96d56Sopenharmony_ci    Py_ssize_t index,
427db96d56Sopenharmony_ci    const wchar_t *item);
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci/* --- PyPreConfig ----------------------------------------------- */
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_citypedef struct PyPreConfig {
487db96d56Sopenharmony_ci    int _config_init;     /* _PyConfigInitEnum value */
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ci    /* Parse Py_PreInitializeFromBytesArgs() arguments?
517db96d56Sopenharmony_ci       See PyConfig.parse_argv */
527db96d56Sopenharmony_ci    int parse_argv;
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci    /* If greater than 0, enable isolated mode: sys.path contains
557db96d56Sopenharmony_ci       neither the script's directory nor the user's site-packages directory.
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_ci       Set to 1 by the -I command line option. If set to -1 (default), inherit
587db96d56Sopenharmony_ci       Py_IsolatedFlag value. */
597db96d56Sopenharmony_ci    int isolated;
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ci    /* If greater than 0: use environment variables.
627db96d56Sopenharmony_ci       Set to 0 by -E command line option. If set to -1 (default), it is
637db96d56Sopenharmony_ci       set to !Py_IgnoreEnvironmentFlag. */
647db96d56Sopenharmony_ci    int use_environment;
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci    /* Set the LC_CTYPE locale to the user preferred locale? If equals to 0,
677db96d56Sopenharmony_ci       set coerce_c_locale and coerce_c_locale_warn to 0. */
687db96d56Sopenharmony_ci    int configure_locale;
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci    /* Coerce the LC_CTYPE locale if it's equal to "C"? (PEP 538)
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci       Set to 0 by PYTHONCOERCECLOCALE=0. Set to 1 by PYTHONCOERCECLOCALE=1.
737db96d56Sopenharmony_ci       Set to 2 if the user preferred LC_CTYPE locale is "C".
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci       If it is equal to 1, LC_CTYPE locale is read to decide if it should be
767db96d56Sopenharmony_ci       coerced or not (ex: PYTHONCOERCECLOCALE=1). Internally, it is set to 2
777db96d56Sopenharmony_ci       if the LC_CTYPE locale must be coerced.
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ci       Disable by default (set to 0). Set it to -1 to let Python decide if it
807db96d56Sopenharmony_ci       should be enabled or not. */
817db96d56Sopenharmony_ci    int coerce_c_locale;
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci    /* Emit a warning if the LC_CTYPE locale is coerced?
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ci       Set to 1 by PYTHONCOERCECLOCALE=warn.
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci       Disable by default (set to 0). Set it to -1 to let Python decide if it
887db96d56Sopenharmony_ci       should be enabled or not. */
897db96d56Sopenharmony_ci    int coerce_c_locale_warn;
907db96d56Sopenharmony_ci
917db96d56Sopenharmony_ci#ifdef MS_WINDOWS
927db96d56Sopenharmony_ci    /* If greater than 1, use the "mbcs" encoding instead of the UTF-8
937db96d56Sopenharmony_ci       encoding for the filesystem encoding.
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci       Set to 1 if the PYTHONLEGACYWINDOWSFSENCODING environment variable is
967db96d56Sopenharmony_ci       set to a non-empty string. If set to -1 (default), inherit
977db96d56Sopenharmony_ci       Py_LegacyWindowsFSEncodingFlag value.
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci       See PEP 529 for more details. */
1007db96d56Sopenharmony_ci    int legacy_windows_fs_encoding;
1017db96d56Sopenharmony_ci#endif
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ci    /* Enable UTF-8 mode? (PEP 540)
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ci       Disabled by default (equals to 0).
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci       Set to 1 by "-X utf8" and "-X utf8=1" command line options.
1087db96d56Sopenharmony_ci       Set to 1 by PYTHONUTF8=1 environment variable.
1097db96d56Sopenharmony_ci
1107db96d56Sopenharmony_ci       Set to 0 by "-X utf8=0" and PYTHONUTF8=0.
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci       If equals to -1, it is set to 1 if the LC_CTYPE locale is "C" or
1137db96d56Sopenharmony_ci       "POSIX", otherwise it is set to 0. Inherit Py_UTF8Mode value value. */
1147db96d56Sopenharmony_ci    int utf8_mode;
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_ci    /* If non-zero, enable the Python Development Mode.
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci       Set to 1 by the -X dev command line option. Set by the PYTHONDEVMODE
1197db96d56Sopenharmony_ci       environment variable. */
1207db96d56Sopenharmony_ci    int dev_mode;
1217db96d56Sopenharmony_ci
1227db96d56Sopenharmony_ci    /* Memory allocator: PYTHONMALLOC env var.
1237db96d56Sopenharmony_ci       See PyMemAllocatorName for valid values. */
1247db96d56Sopenharmony_ci    int allocator;
1257db96d56Sopenharmony_ci} PyPreConfig;
1267db96d56Sopenharmony_ci
1277db96d56Sopenharmony_ciPyAPI_FUNC(void) PyPreConfig_InitPythonConfig(PyPreConfig *config);
1287db96d56Sopenharmony_ciPyAPI_FUNC(void) PyPreConfig_InitIsolatedConfig(PyPreConfig *config);
1297db96d56Sopenharmony_ci
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ci/* --- PyConfig ---------------------------------------------- */
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci/* This structure is best documented in the Doc/c-api/init_config.rst file. */
1347db96d56Sopenharmony_citypedef struct PyConfig {
1357db96d56Sopenharmony_ci    int _config_init;     /* _PyConfigInitEnum value */
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci    int isolated;
1387db96d56Sopenharmony_ci    int use_environment;
1397db96d56Sopenharmony_ci    int dev_mode;
1407db96d56Sopenharmony_ci    int install_signal_handlers;
1417db96d56Sopenharmony_ci    int use_hash_seed;
1427db96d56Sopenharmony_ci    unsigned long hash_seed;
1437db96d56Sopenharmony_ci    int faulthandler;
1447db96d56Sopenharmony_ci    int tracemalloc;
1457db96d56Sopenharmony_ci    int import_time;
1467db96d56Sopenharmony_ci    int code_debug_ranges;
1477db96d56Sopenharmony_ci    int show_ref_count;
1487db96d56Sopenharmony_ci    int dump_refs;
1497db96d56Sopenharmony_ci    wchar_t *dump_refs_file;
1507db96d56Sopenharmony_ci    int malloc_stats;
1517db96d56Sopenharmony_ci    wchar_t *filesystem_encoding;
1527db96d56Sopenharmony_ci    wchar_t *filesystem_errors;
1537db96d56Sopenharmony_ci    wchar_t *pycache_prefix;
1547db96d56Sopenharmony_ci    int parse_argv;
1557db96d56Sopenharmony_ci    PyWideStringList orig_argv;
1567db96d56Sopenharmony_ci    PyWideStringList argv;
1577db96d56Sopenharmony_ci    PyWideStringList xoptions;
1587db96d56Sopenharmony_ci    PyWideStringList warnoptions;
1597db96d56Sopenharmony_ci    int site_import;
1607db96d56Sopenharmony_ci    int bytes_warning;
1617db96d56Sopenharmony_ci    int warn_default_encoding;
1627db96d56Sopenharmony_ci    int inspect;
1637db96d56Sopenharmony_ci    int interactive;
1647db96d56Sopenharmony_ci    int optimization_level;
1657db96d56Sopenharmony_ci    int parser_debug;
1667db96d56Sopenharmony_ci    int write_bytecode;
1677db96d56Sopenharmony_ci    int verbose;
1687db96d56Sopenharmony_ci    int quiet;
1697db96d56Sopenharmony_ci    int user_site_directory;
1707db96d56Sopenharmony_ci    int configure_c_stdio;
1717db96d56Sopenharmony_ci    int buffered_stdio;
1727db96d56Sopenharmony_ci    wchar_t *stdio_encoding;
1737db96d56Sopenharmony_ci    wchar_t *stdio_errors;
1747db96d56Sopenharmony_ci#ifdef MS_WINDOWS
1757db96d56Sopenharmony_ci    int legacy_windows_stdio;
1767db96d56Sopenharmony_ci#endif
1777db96d56Sopenharmony_ci    wchar_t *check_hash_pycs_mode;
1787db96d56Sopenharmony_ci    int use_frozen_modules;
1797db96d56Sopenharmony_ci    int safe_path;
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci    /* --- Path configuration inputs ------------ */
1827db96d56Sopenharmony_ci    int pathconfig_warnings;
1837db96d56Sopenharmony_ci    wchar_t *program_name;
1847db96d56Sopenharmony_ci    wchar_t *pythonpath_env;
1857db96d56Sopenharmony_ci    wchar_t *home;
1867db96d56Sopenharmony_ci    wchar_t *platlibdir;
1877db96d56Sopenharmony_ci
1887db96d56Sopenharmony_ci    /* --- Path configuration outputs ----------- */
1897db96d56Sopenharmony_ci    int module_search_paths_set;
1907db96d56Sopenharmony_ci    PyWideStringList module_search_paths;
1917db96d56Sopenharmony_ci    wchar_t *stdlib_dir;
1927db96d56Sopenharmony_ci    wchar_t *executable;
1937db96d56Sopenharmony_ci    wchar_t *base_executable;
1947db96d56Sopenharmony_ci    wchar_t *prefix;
1957db96d56Sopenharmony_ci    wchar_t *base_prefix;
1967db96d56Sopenharmony_ci    wchar_t *exec_prefix;
1977db96d56Sopenharmony_ci    wchar_t *base_exec_prefix;
1987db96d56Sopenharmony_ci
1997db96d56Sopenharmony_ci    /* --- Parameter only used by Py_Main() ---------- */
2007db96d56Sopenharmony_ci    int skip_source_first_line;
2017db96d56Sopenharmony_ci    wchar_t *run_command;
2027db96d56Sopenharmony_ci    wchar_t *run_module;
2037db96d56Sopenharmony_ci    wchar_t *run_filename;
2047db96d56Sopenharmony_ci
2057db96d56Sopenharmony_ci    /* --- Private fields ---------------------------- */
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci    // Install importlib? If equals to 0, importlib is not initialized at all.
2087db96d56Sopenharmony_ci    // Needed by freeze_importlib.
2097db96d56Sopenharmony_ci    int _install_importlib;
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ci    // If equal to 0, stop Python initialization before the "main" phase.
2127db96d56Sopenharmony_ci    int _init_main;
2137db96d56Sopenharmony_ci
2147db96d56Sopenharmony_ci    // If non-zero, disallow threads, subprocesses, and fork.
2157db96d56Sopenharmony_ci    // Default: 0.
2167db96d56Sopenharmony_ci    int _isolated_interpreter;
2177db96d56Sopenharmony_ci
2187db96d56Sopenharmony_ci    // If non-zero, we believe we're running from a source tree.
2197db96d56Sopenharmony_ci    int _is_python_build;
2207db96d56Sopenharmony_ci} PyConfig;
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ciPyAPI_FUNC(void) PyConfig_InitPythonConfig(PyConfig *config);
2237db96d56Sopenharmony_ciPyAPI_FUNC(void) PyConfig_InitIsolatedConfig(PyConfig *config);
2247db96d56Sopenharmony_ciPyAPI_FUNC(void) PyConfig_Clear(PyConfig *);
2257db96d56Sopenharmony_ciPyAPI_FUNC(PyStatus) PyConfig_SetString(
2267db96d56Sopenharmony_ci    PyConfig *config,
2277db96d56Sopenharmony_ci    wchar_t **config_str,
2287db96d56Sopenharmony_ci    const wchar_t *str);
2297db96d56Sopenharmony_ciPyAPI_FUNC(PyStatus) PyConfig_SetBytesString(
2307db96d56Sopenharmony_ci    PyConfig *config,
2317db96d56Sopenharmony_ci    wchar_t **config_str,
2327db96d56Sopenharmony_ci    const char *str);
2337db96d56Sopenharmony_ciPyAPI_FUNC(PyStatus) PyConfig_Read(PyConfig *config);
2347db96d56Sopenharmony_ciPyAPI_FUNC(PyStatus) PyConfig_SetBytesArgv(
2357db96d56Sopenharmony_ci    PyConfig *config,
2367db96d56Sopenharmony_ci    Py_ssize_t argc,
2377db96d56Sopenharmony_ci    char * const *argv);
2387db96d56Sopenharmony_ciPyAPI_FUNC(PyStatus) PyConfig_SetArgv(PyConfig *config,
2397db96d56Sopenharmony_ci    Py_ssize_t argc,
2407db96d56Sopenharmony_ci    wchar_t * const *argv);
2417db96d56Sopenharmony_ciPyAPI_FUNC(PyStatus) PyConfig_SetWideStringList(PyConfig *config,
2427db96d56Sopenharmony_ci    PyWideStringList *list,
2437db96d56Sopenharmony_ci    Py_ssize_t length, wchar_t **items);
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ci
2467db96d56Sopenharmony_ci/* --- Helper functions --------------------------------------- */
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci/* Get the original command line arguments, before Python modified them.
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_ci   See also PyConfig.orig_argv. */
2517db96d56Sopenharmony_ciPyAPI_FUNC(void) Py_GetArgcArgv(int *argc, wchar_t ***argv);
2527db96d56Sopenharmony_ci
2537db96d56Sopenharmony_ci#ifdef __cplusplus
2547db96d56Sopenharmony_ci}
2557db96d56Sopenharmony_ci#endif
2567db96d56Sopenharmony_ci#endif /* !Py_LIMITED_API */
2577db96d56Sopenharmony_ci#endif /* !Py_PYCORECONFIG_H */
258