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