123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462 |
- #ifndef Py_PYCORECONFIG_H
- #define Py_PYCORECONFIG_H
- #ifndef Py_LIMITED_API
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* --- 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;
- #ifdef MS_WINDOWS
- /* 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;
- #endif
- /* 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;
- #ifdef MS_WINDOWS
- /* 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;
- #endif
- /* 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);
- #ifdef __cplusplus
- }
- #endif
- #endif /* !Py_LIMITED_API */
- #endif /* !Py_PYCORECONFIG_H */
|