250 lines
7.4 KiB
C
250 lines
7.4 KiB
C
#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 PyPreConfig {
|
|
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 ---------------------------------------------- */
|
|
|
|
/* This structure is best documented in the Doc/c-api/init_config.rst file. */
|
|
typedef struct PyConfig {
|
|
int _config_init; /* _PyConfigInitEnum value */
|
|
|
|
int isolated;
|
|
int use_environment;
|
|
int dev_mode;
|
|
int install_signal_handlers;
|
|
int use_hash_seed;
|
|
unsigned long hash_seed;
|
|
int faulthandler;
|
|
int tracemalloc;
|
|
int import_time;
|
|
int show_ref_count;
|
|
int dump_refs;
|
|
int malloc_stats;
|
|
wchar_t *filesystem_encoding;
|
|
wchar_t *filesystem_errors;
|
|
wchar_t *pycache_prefix;
|
|
int parse_argv;
|
|
PyWideStringList orig_argv;
|
|
PyWideStringList argv;
|
|
PyWideStringList xoptions;
|
|
PyWideStringList warnoptions;
|
|
int site_import;
|
|
int bytes_warning;
|
|
int warn_default_encoding;
|
|
int inspect;
|
|
int interactive;
|
|
int optimization_level;
|
|
int parser_debug;
|
|
int write_bytecode;
|
|
int verbose;
|
|
int quiet;
|
|
int user_site_directory;
|
|
int configure_c_stdio;
|
|
int buffered_stdio;
|
|
wchar_t *stdio_encoding;
|
|
wchar_t *stdio_errors;
|
|
#ifdef MS_WINDOWS
|
|
int legacy_windows_stdio;
|
|
#endif
|
|
wchar_t *check_hash_pycs_mode;
|
|
|
|
/* --- Path configuration inputs ------------ */
|
|
int pathconfig_warnings;
|
|
wchar_t *program_name;
|
|
wchar_t *pythonpath_env;
|
|
wchar_t *home;
|
|
wchar_t *platlibdir;
|
|
|
|
/* --- Path configuration outputs ----------- */
|
|
int module_search_paths_set;
|
|
PyWideStringList module_search_paths;
|
|
wchar_t *executable;
|
|
wchar_t *base_executable;
|
|
wchar_t *prefix;
|
|
wchar_t *base_prefix;
|
|
wchar_t *exec_prefix;
|
|
wchar_t *base_exec_prefix;
|
|
|
|
/* --- Parameter only used by Py_Main() ---------- */
|
|
int skip_source_first_line;
|
|
wchar_t *run_command;
|
|
wchar_t *run_module;
|
|
wchar_t *run_filename;
|
|
|
|
/* --- Private fields ---------------------------- */
|
|
|
|
// Install importlib? If equals 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;
|
|
} 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 */
|