| extern "C" { | |
| /* --- PyStatus ----------------------------------------------- */ | |
| typedef struct { | |
| enum { | |
| _PyStatus_TYPE_OK=0, | |
| _PyStatus_TYPE_ERROR=1, | |
| _PyStatus_TYPE_EXIT=2 | |
| } _type; | |
| const char *func; | |
| const char *err_msg; | |
| int exitcode; | |
| } PyStatus; | |
| PyAPI_FUNC(PyStatus) PyStatus_Ok(void); | |
| PyAPI_FUNC(PyStatus) PyStatus_Error(const char *err_msg); | |
| PyAPI_FUNC(PyStatus) PyStatus_NoMemory(void); | |
| PyAPI_FUNC(PyStatus) PyStatus_Exit(int exitcode); | |
| PyAPI_FUNC(int) PyStatus_IsError(PyStatus err); | |
| PyAPI_FUNC(int) PyStatus_IsExit(PyStatus err); | |
| PyAPI_FUNC(int) PyStatus_Exception(PyStatus err); | |
| /* --- PyWideStringList ------------------------------------------------ */ | |
| typedef struct { | |
| /* If length is greater than zero, items must be non-NULL | |
| and all items strings must be non-NULL */ | |
| Py_ssize_t length; | |
| wchar_t **items; | |
| } PyWideStringList; | |
| PyAPI_FUNC(PyStatus) PyWideStringList_Append(PyWideStringList *list, | |
| const wchar_t *item); | |
| PyAPI_FUNC(PyStatus) PyWideStringList_Insert(PyWideStringList *list, | |
| Py_ssize_t index, | |
| const wchar_t *item); | |
| /* --- PyPreConfig ----------------------------------------------- */ | |
| typedef struct { | |
| int _config_init; /* _PyConfigInitEnum value */ | |
| /* Parse Py_PreInitializeFromBytesArgs() arguments? | |
| See PyConfig.parse_argv */ | |
| int parse_argv; | |
| /* If greater than 0, enable isolated mode: sys.path contains | |
| neither the script's directory nor the user's site-packages directory. | |
| Set to 1 by the -I command line option. If set to -1 (default), inherit | |
| Py_IsolatedFlag value. */ | |
| int isolated; | |
| /* If greater than 0: use environment variables. | |
| Set to 0 by -E command line option. If set to -1 (default), it is | |
| set to !Py_IgnoreEnvironmentFlag. */ | |
| int use_environment; | |
| /* Set the LC_CTYPE locale to the user preferred locale? If equals to 0, | |
| set coerce_c_locale and coerce_c_locale_warn to 0. */ | |
| int configure_locale; | |
| /* Coerce the LC_CTYPE locale if it's equal to "C"? (PEP 538) | |
| Set to 0 by PYTHONCOERCECLOCALE=0. Set to 1 by PYTHONCOERCECLOCALE=1. | |
| Set to 2 if the user preferred LC_CTYPE locale is "C". | |
| If it is equal to 1, LC_CTYPE locale is read to decide if it should be | |
| coerced or not (ex: PYTHONCOERCECLOCALE=1). Internally, it is set to 2 | |
| if the LC_CTYPE locale must be coerced. | |
| Disable by default (set to 0). Set it to -1 to let Python decide if it | |
| should be enabled or not. */ | |
| int coerce_c_locale; | |
| /* Emit a warning if the LC_CTYPE locale is coerced? | |
| Set to 1 by PYTHONCOERCECLOCALE=warn. | |
| Disable by default (set to 0). Set it to -1 to let Python decide if it | |
| should be enabled or not. */ | |
| int coerce_c_locale_warn; | |
| /* If greater than 1, use the "mbcs" encoding instead of the UTF-8 | |
| encoding for the filesystem encoding. | |
| Set to 1 if the PYTHONLEGACYWINDOWSFSENCODING environment variable is | |
| set to a non-empty string. If set to -1 (default), inherit | |
| Py_LegacyWindowsFSEncodingFlag value. | |
| See PEP 529 for more details. */ | |
| int legacy_windows_fs_encoding; | |
| /* Enable UTF-8 mode? (PEP 540) | |
| Disabled by default (equals to 0). | |
| Set to 1 by "-X utf8" and "-X utf8=1" command line options. | |
| Set to 1 by PYTHONUTF8=1 environment variable. | |
| Set to 0 by "-X utf8=0" and PYTHONUTF8=0. | |
| If equals to -1, it is set to 1 if the LC_CTYPE locale is "C" or | |
| "POSIX", otherwise it is set to 0. Inherit Py_UTF8Mode value value. */ | |
| int utf8_mode; | |
| /* If non-zero, enable the Python Development Mode. | |
| Set to 1 by the -X dev command line option. Set by the PYTHONDEVMODE | |
| environment variable. */ | |
| int dev_mode; | |
| /* Memory allocator: PYTHONMALLOC env var. | |
| See PyMemAllocatorName for valid values. */ | |
| int allocator; | |
| } PyPreConfig; | |
| PyAPI_FUNC(void) PyPreConfig_InitPythonConfig(PyPreConfig *config); | |
| PyAPI_FUNC(void) PyPreConfig_InitIsolatedConfig(PyPreConfig *config); | |
| /* --- PyConfig ---------------------------------------------- */ | |
| typedef struct { | |
| int _config_init; /* _PyConfigInitEnum value */ | |
| int isolated; /* Isolated mode? see PyPreConfig.isolated */ | |
| int use_environment; /* Use environment variables? see PyPreConfig.use_environment */ | |
| int dev_mode; /* Python Development Mode? See PyPreConfig.dev_mode */ | |
| /* Install signal handlers? Yes by default. */ | |
| int install_signal_handlers; | |
| int use_hash_seed; /* PYTHONHASHSEED=x */ | |
| unsigned long hash_seed; | |
| /* Enable faulthandler? | |
| Set to 1 by -X faulthandler and PYTHONFAULTHANDLER. -1 means unset. */ | |
| int faulthandler; | |
| /* Enable PEG parser? | |
| 1 by default, set to 0 by -X oldparser and PYTHONOLDPARSER */ | |
| int _use_peg_parser; | |
| /* Enable tracemalloc? | |
| Set by -X tracemalloc=N and PYTHONTRACEMALLOC. -1 means unset */ | |
| int tracemalloc; | |
| int import_time; /* PYTHONPROFILEIMPORTTIME, -X importtime */ | |
| int show_ref_count; /* -X showrefcount */ | |
| int dump_refs; /* PYTHONDUMPREFS */ | |
| int malloc_stats; /* PYTHONMALLOCSTATS */ | |
| /* Python filesystem encoding and error handler: | |
| sys.getfilesystemencoding() and sys.getfilesystemencodeerrors(). | |
| Default encoding and error handler: | |
| * if Py_SetStandardStreamEncoding() has been called: they have the | |
| highest priority; | |
| * PYTHONIOENCODING environment variable; | |
| * The UTF-8 Mode uses UTF-8/surrogateescape; | |
| * If Python forces the usage of the ASCII encoding (ex: C locale | |
| or POSIX locale on FreeBSD or HP-UX), use ASCII/surrogateescape; | |
| * locale encoding: ANSI code page on Windows, UTF-8 on Android and | |
| VxWorks, LC_CTYPE locale encoding on other platforms; | |
| * On Windows, "surrogateescape" error handler; | |
| * "surrogateescape" error handler if the LC_CTYPE locale is "C" or "POSIX"; | |
| * "surrogateescape" error handler if the LC_CTYPE locale has been coerced | |
| (PEP 538); | |
| * "strict" error handler. | |
| Supported error handlers: "strict", "surrogateescape" and | |
| "surrogatepass". The surrogatepass error handler is only supported | |
| if Py_DecodeLocale() and Py_EncodeLocale() use directly the UTF-8 codec; | |
| it's only used on Windows. | |
| initfsencoding() updates the encoding to the Python codec name. | |
| For example, "ANSI_X3.4-1968" is replaced with "ascii". | |
| On Windows, sys._enablelegacywindowsfsencoding() sets the | |
| encoding/errors to mbcs/replace at runtime. | |
| See Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors. | |
| */ | |
| wchar_t *filesystem_encoding; | |
| wchar_t *filesystem_errors; | |
| wchar_t *pycache_prefix; /* PYTHONPYCACHEPREFIX, -X pycache_prefix=PATH */ | |
| int parse_argv; /* Parse argv command line arguments? */ | |
| /* Command line arguments (sys.argv). | |
| Set parse_argv to 1 to parse argv as Python command line arguments | |
| and then strip Python arguments from argv. | |
| If argv is empty, an empty string is added to ensure that sys.argv | |
| always exists and is never empty. */ | |
| PyWideStringList argv; | |
| /* Program name: | |
| - If Py_SetProgramName() was called, use its value. | |
| - On macOS, use PYTHONEXECUTABLE environment variable if set. | |
| - If WITH_NEXT_FRAMEWORK macro is defined, use __PYVENV_LAUNCHER__ | |
| environment variable is set. | |
| - Use argv[0] if available and non-empty. | |
| - Use "python" on Windows, or "python3 on other platforms. */ | |
| wchar_t *program_name; | |
| PyWideStringList xoptions; /* Command line -X options */ | |
| /* Warnings options: lowest to highest priority. warnings.filters | |
| is built in the reverse order (highest to lowest priority). */ | |
| PyWideStringList warnoptions; | |
| /* If equal to zero, disable the import of the module site and the | |
| site-dependent manipulations of sys.path that it entails. Also disable | |
| these manipulations if site is explicitly imported later (call | |
| site.main() if you want them to be triggered). | |
| Set to 0 by the -S command line option. If set to -1 (default), it is | |
| set to !Py_NoSiteFlag. */ | |
| int site_import; | |
| /* Bytes warnings: | |
| * If equal to 1, issue a warning when comparing bytes or bytearray with | |
| str or bytes with int. | |
| * If equal or greater to 2, issue an error. | |
| Incremented by the -b command line option. If set to -1 (default), inherit | |
| Py_BytesWarningFlag value. */ | |
| int bytes_warning; | |
| /* If greater than 0, enable inspect: when a script is passed as first | |
| argument or the -c option is used, enter interactive mode after | |
| executing the script or the command, even when sys.stdin does not appear | |
| to be a terminal. | |
| Incremented by the -i command line option. Set to 1 if the PYTHONINSPECT | |
| environment variable is non-empty. If set to -1 (default), inherit | |
| Py_InspectFlag value. */ | |
| int inspect; | |
| /* If greater than 0: enable the interactive mode (REPL). | |
| Incremented by the -i command line option. If set to -1 (default), | |
| inherit Py_InteractiveFlag value. */ | |
| int interactive; | |
| /* Optimization level. | |
| Incremented by the -O command line option. Set by the PYTHONOPTIMIZE | |
| environment variable. If set to -1 (default), inherit Py_OptimizeFlag | |
| value. */ | |
| int optimization_level; | |
| /* If greater than 0, enable the debug mode: turn on parser debugging | |
| output (for expert only, depending on compilation options). | |
| Incremented by the -d command line option. Set by the PYTHONDEBUG | |
| environment variable. If set to -1 (default), inherit Py_DebugFlag | |
| value. */ | |
| int parser_debug; | |
| /* If equal to 0, Python won't try to write ``.pyc`` files on the | |
| import of source modules. | |
| Set to 0 by the -B command line option and the PYTHONDONTWRITEBYTECODE | |
| environment variable. If set to -1 (default), it is set to | |
| !Py_DontWriteBytecodeFlag. */ | |
| int write_bytecode; | |
| /* If greater than 0, enable the verbose mode: print a message each time a | |
| module is initialized, showing the place (filename or built-in module) | |
| from which it is loaded. | |
| If greater or equal to 2, print a message for each file that is checked | |
| for when searching for a module. Also provides information on module | |
| cleanup at exit. | |
| Incremented by the -v option. Set by the PYTHONVERBOSE environment | |
| variable. If set to -1 (default), inherit Py_VerboseFlag value. */ | |
| int verbose; | |
| /* If greater than 0, enable the quiet mode: Don't display the copyright | |
| and version messages even in interactive mode. | |
| Incremented by the -q option. If set to -1 (default), inherit | |
| Py_QuietFlag value. */ | |
| int quiet; | |
| /* If greater than 0, don't add the user site-packages directory to | |
| sys.path. | |
| Set to 0 by the -s and -I command line options , and the PYTHONNOUSERSITE | |
| environment variable. If set to -1 (default), it is set to | |
| !Py_NoUserSiteDirectory. */ | |
| int user_site_directory; | |
| /* If non-zero, configure C standard steams (stdio, stdout, | |
| stderr): | |
| - Set O_BINARY mode on Windows. | |
| - If buffered_stdio is equal to zero, make streams unbuffered. | |
| Otherwise, enable streams buffering if interactive is non-zero. */ | |
| int configure_c_stdio; | |
| /* If equal to 0, enable unbuffered mode: force the stdout and stderr | |
| streams to be unbuffered. | |
| Set to 0 by the -u option. Set by the PYTHONUNBUFFERED environment | |
| variable. | |
| If set to -1 (default), it is set to !Py_UnbufferedStdioFlag. */ | |
| int buffered_stdio; | |
| /* Encoding of sys.stdin, sys.stdout and sys.stderr. | |
| Value set from PYTHONIOENCODING environment variable and | |
| Py_SetStandardStreamEncoding() function. | |
| See also 'stdio_errors' attribute. */ | |
| wchar_t *stdio_encoding; | |
| /* Error handler of sys.stdin and sys.stdout. | |
| Value set from PYTHONIOENCODING environment variable and | |
| Py_SetStandardStreamEncoding() function. | |
| See also 'stdio_encoding' attribute. */ | |
| wchar_t *stdio_errors; | |
| /* If greater than zero, use io.FileIO instead of WindowsConsoleIO for sys | |
| standard streams. | |
| Set to 1 if the PYTHONLEGACYWINDOWSSTDIO environment variable is set to | |
| a non-empty string. If set to -1 (default), inherit | |
| Py_LegacyWindowsStdioFlag value. | |
| See PEP 528 for more details. */ | |
| int legacy_windows_stdio; | |
| /* Value of the --check-hash-based-pycs command line option: | |
| - "default" means the 'check_source' flag in hash-based pycs | |
| determines invalidation | |
| - "always" causes the interpreter to hash the source file for | |
| invalidation regardless of value of 'check_source' bit | |
| - "never" causes the interpreter to always assume hash-based pycs are | |
| valid | |
| The default value is "default". | |
| See PEP 552 "Deterministic pycs" for more details. */ | |
| wchar_t *check_hash_pycs_mode; | |
| /* --- Path configuration inputs ------------ */ | |
| /* If greater than 0, suppress _PyPathConfig_Calculate() warnings on Unix. | |
| The parameter has no effect on Windows. | |
| If set to -1 (default), inherit !Py_FrozenFlag value. */ | |
| int pathconfig_warnings; | |
| wchar_t *pythonpath_env; /* PYTHONPATH environment variable */ | |
| wchar_t *home; /* PYTHONHOME environment variable, | |
| see also Py_SetPythonHome(). */ | |
| /* --- Path configuration outputs ----------- */ | |
| int module_search_paths_set; /* If non-zero, use module_search_paths */ | |
| PyWideStringList module_search_paths; /* sys.path paths. Computed if | |
| module_search_paths_set is equal | |
| to zero. */ | |
| wchar_t *executable; /* sys.executable */ | |
| wchar_t *base_executable; /* sys._base_executable */ | |
| wchar_t *prefix; /* sys.prefix */ | |
| wchar_t *base_prefix; /* sys.base_prefix */ | |
| wchar_t *exec_prefix; /* sys.exec_prefix */ | |
| wchar_t *base_exec_prefix; /* sys.base_exec_prefix */ | |
| wchar_t *platlibdir; /* sys.platlibdir */ | |
| /* --- Parameter only used by Py_Main() ---------- */ | |
| /* Skip the first line of the source ('run_filename' parameter), allowing use of non-Unix forms of | |
| "#!cmd". This is intended for a DOS specific hack only. | |
| Set by the -x command line option. */ | |
| int skip_source_first_line; | |
| wchar_t *run_command; /* -c command line argument */ | |
| wchar_t *run_module; /* -m command line argument */ | |
| wchar_t *run_filename; /* Trailing command line argument without -c or -m */ | |
| /* --- Private fields ---------------------------- */ | |
| /* Install importlib? If set to 0, importlib is not initialized at all. | |
| Needed by freeze_importlib. */ | |
| int _install_importlib; | |
| /* If equal to 0, stop Python initialization before the "main" phase */ | |
| int _init_main; | |
| /* If non-zero, disallow threads, subprocesses, and fork. | |
| Default: 0. */ | |
| int _isolated_interpreter; | |
| /* Original command line arguments. If _orig_argv is empty and _argv is | |
| not equal to [''], PyConfig_Read() copies the configuration 'argv' list | |
| into '_orig_argv' list before modifying 'argv' list (if parse_argv | |
| is non-zero). | |
| _PyConfig_Write() initializes Py_GetArgcArgv() to this list. */ | |
| PyWideStringList _orig_argv; | |
| } PyConfig; | |
| PyAPI_FUNC(void) PyConfig_InitPythonConfig(PyConfig *config); | |
| PyAPI_FUNC(void) PyConfig_InitIsolatedConfig(PyConfig *config); | |
| PyAPI_FUNC(void) PyConfig_Clear(PyConfig *); | |
| PyAPI_FUNC(PyStatus) PyConfig_SetString( | |
| PyConfig *config, | |
| wchar_t **config_str, | |
| const wchar_t *str); | |
| PyAPI_FUNC(PyStatus) PyConfig_SetBytesString( | |
| PyConfig *config, | |
| wchar_t **config_str, | |
| const char *str); | |
| PyAPI_FUNC(PyStatus) PyConfig_Read(PyConfig *config); | |
| PyAPI_FUNC(PyStatus) PyConfig_SetBytesArgv( | |
| PyConfig *config, | |
| Py_ssize_t argc, | |
| char * const *argv); | |
| PyAPI_FUNC(PyStatus) PyConfig_SetArgv(PyConfig *config, | |
| Py_ssize_t argc, | |
| wchar_t * const *argv); | |
| PyAPI_FUNC(PyStatus) PyConfig_SetWideStringList(PyConfig *config, | |
| PyWideStringList *list, | |
| Py_ssize_t length, wchar_t **items); | |
| /* --- Helper functions --------------------------------------- */ | |
| /* Get the original command line arguments, before Python modified them. | |
| See also PyConfig._orig_argv. */ | |
| PyAPI_FUNC(void) Py_GetArgcArgv(int *argc, wchar_t ***argv); | |
| } | |