| 1 | #ifndef Py_PYCORECONFIG_H |
| 2 | #define Py_PYCORECONFIG_H |
| 3 | #ifndef Py_LIMITED_API |
| 4 | #ifdef __cplusplus |
| 5 | extern "C" { |
| 6 | #endif |
| 7 | |
| 8 | /* --- PyStatus ----------------------------------------------- */ |
| 9 | |
| 10 | typedef struct { |
| 11 | enum { |
| 12 | _PyStatus_TYPE_OK=0, |
| 13 | _PyStatus_TYPE_ERROR=1, |
| 14 | _PyStatus_TYPE_EXIT=2 |
| 15 | } _type; |
| 16 | const char *func; |
| 17 | const char *err_msg; |
| 18 | int exitcode; |
| 19 | } PyStatus; |
| 20 | |
| 21 | PyAPI_FUNC(PyStatus) PyStatus_Ok(void); |
| 22 | PyAPI_FUNC(PyStatus) PyStatus_Error(const char *err_msg); |
| 23 | PyAPI_FUNC(PyStatus) PyStatus_NoMemory(void); |
| 24 | PyAPI_FUNC(PyStatus) PyStatus_Exit(int exitcode); |
| 25 | PyAPI_FUNC(int) PyStatus_IsError(PyStatus err); |
| 26 | PyAPI_FUNC(int) PyStatus_IsExit(PyStatus err); |
| 27 | PyAPI_FUNC(int) PyStatus_Exception(PyStatus err); |
| 28 | |
| 29 | /* --- PyWideStringList ------------------------------------------------ */ |
| 30 | |
| 31 | typedef struct { |
| 32 | /* If length is greater than zero, items must be non-NULL |
| 33 | and all items strings must be non-NULL */ |
| 34 | Py_ssize_t length; |
| 35 | wchar_t **items; |
| 36 | } PyWideStringList; |
| 37 | |
| 38 | PyAPI_FUNC(PyStatus) PyWideStringList_Append(PyWideStringList *list, |
| 39 | const wchar_t *item); |
| 40 | PyAPI_FUNC(PyStatus) PyWideStringList_Insert(PyWideStringList *list, |
| 41 | Py_ssize_t index, |
| 42 | const wchar_t *item); |
| 43 | |
| 44 | |
| 45 | /* --- PyPreConfig ----------------------------------------------- */ |
| 46 | |
| 47 | typedef struct PyPreConfig { |
| 48 | int _config_init; /* _PyConfigInitEnum value */ |
| 49 | |
| 50 | /* Parse Py_PreInitializeFromBytesArgs() arguments? |
| 51 | See PyConfig.parse_argv */ |
| 52 | int parse_argv; |
| 53 | |
| 54 | /* If greater than 0, enable isolated mode: sys.path contains |
| 55 | neither the script's directory nor the user's site-packages directory. |
| 56 | |
| 57 | Set to 1 by the -I command line option. If set to -1 (default), inherit |
| 58 | Py_IsolatedFlag value. */ |
| 59 | int isolated; |
| 60 | |
| 61 | /* If greater than 0: use environment variables. |
| 62 | Set to 0 by -E command line option. If set to -1 (default), it is |
| 63 | set to !Py_IgnoreEnvironmentFlag. */ |
| 64 | int use_environment; |
| 65 | |
| 66 | /* Set the LC_CTYPE locale to the user preferred locale? If equals to 0, |
| 67 | set coerce_c_locale and coerce_c_locale_warn to 0. */ |
| 68 | int configure_locale; |
| 69 | |
| 70 | /* Coerce the LC_CTYPE locale if it's equal to "C"? (PEP 538) |
| 71 | |
| 72 | Set to 0 by PYTHONCOERCECLOCALE=0. Set to 1 by PYTHONCOERCECLOCALE=1. |
| 73 | Set to 2 if the user preferred LC_CTYPE locale is "C". |
| 74 | |
| 75 | If it is equal to 1, LC_CTYPE locale is read to decide if it should be |
| 76 | coerced or not (ex: PYTHONCOERCECLOCALE=1). Internally, it is set to 2 |
| 77 | if the LC_CTYPE locale must be coerced. |
| 78 | |
| 79 | Disable by default (set to 0). Set it to -1 to let Python decide if it |
| 80 | should be enabled or not. */ |
| 81 | int coerce_c_locale; |
| 82 | |
| 83 | /* Emit a warning if the LC_CTYPE locale is coerced? |
| 84 | |
| 85 | Set to 1 by PYTHONCOERCECLOCALE=warn. |
| 86 | |
| 87 | Disable by default (set to 0). Set it to -1 to let Python decide if it |
| 88 | should be enabled or not. */ |
| 89 | int coerce_c_locale_warn; |
| 90 | |
| 91 | #ifdef MS_WINDOWS |
| 92 | /* If greater than 1, use the "mbcs" encoding instead of the UTF-8 |
| 93 | encoding for the filesystem encoding. |
| 94 | |
| 95 | Set to 1 if the PYTHONLEGACYWINDOWSFSENCODING environment variable is |
| 96 | set to a non-empty string. If set to -1 (default), inherit |
| 97 | Py_LegacyWindowsFSEncodingFlag value. |
| 98 | |
| 99 | See PEP 529 for more details. */ |
| 100 | int legacy_windows_fs_encoding; |
| 101 | #endif |
| 102 | |
| 103 | /* Enable UTF-8 mode? (PEP 540) |
| 104 | |
| 105 | Disabled by default (equals to 0). |
| 106 | |
| 107 | Set to 1 by "-X utf8" and "-X utf8=1" command line options. |
| 108 | Set to 1 by PYTHONUTF8=1 environment variable. |
| 109 | |
| 110 | Set to 0 by "-X utf8=0" and PYTHONUTF8=0. |
| 111 | |
| 112 | If equals to -1, it is set to 1 if the LC_CTYPE locale is "C" or |
| 113 | "POSIX", otherwise it is set to 0. Inherit Py_UTF8Mode value value. */ |
| 114 | int utf8_mode; |
| 115 | |
| 116 | /* If non-zero, enable the Python Development Mode. |
| 117 | |
| 118 | Set to 1 by the -X dev command line option. Set by the PYTHONDEVMODE |
| 119 | environment variable. */ |
| 120 | int dev_mode; |
| 121 | |
| 122 | /* Memory allocator: PYTHONMALLOC env var. |
| 123 | See PyMemAllocatorName for valid values. */ |
| 124 | int allocator; |
| 125 | } PyPreConfig; |
| 126 | |
| 127 | PyAPI_FUNC(void) PyPreConfig_InitPythonConfig(PyPreConfig *config); |
| 128 | PyAPI_FUNC(void) PyPreConfig_InitIsolatedConfig(PyPreConfig *config); |
| 129 | |
| 130 | |
| 131 | /* --- PyConfig ---------------------------------------------- */ |
| 132 | |
| 133 | /* This structure is best documented in the Doc/c-api/init_config.rst file. */ |
| 134 | typedef struct PyConfig { |
| 135 | int _config_init; /* _PyConfigInitEnum value */ |
| 136 | |
| 137 | int isolated; |
| 138 | int use_environment; |
| 139 | int dev_mode; |
| 140 | int install_signal_handlers; |
| 141 | int use_hash_seed; |
| 142 | unsigned long hash_seed; |
| 143 | int faulthandler; |
| 144 | int tracemalloc; |
| 145 | int import_time; |
| 146 | int show_ref_count; |
| 147 | int dump_refs; |
| 148 | int malloc_stats; |
| 149 | wchar_t *filesystem_encoding; |
| 150 | wchar_t *filesystem_errors; |
| 151 | wchar_t *pycache_prefix; |
| 152 | int parse_argv; |
| 153 | PyWideStringList orig_argv; |
| 154 | PyWideStringList argv; |
| 155 | PyWideStringList xoptions; |
| 156 | PyWideStringList warnoptions; |
| 157 | int site_import; |
| 158 | int bytes_warning; |
| 159 | int warn_default_encoding; |
| 160 | int inspect; |
| 161 | int interactive; |
| 162 | int optimization_level; |
| 163 | int parser_debug; |
| 164 | int write_bytecode; |
| 165 | int verbose; |
| 166 | int quiet; |
| 167 | int user_site_directory; |
| 168 | int configure_c_stdio; |
| 169 | int buffered_stdio; |
| 170 | wchar_t *stdio_encoding; |
| 171 | wchar_t *stdio_errors; |
| 172 | #ifdef MS_WINDOWS |
| 173 | int legacy_windows_stdio; |
| 174 | #endif |
| 175 | wchar_t *check_hash_pycs_mode; |
| 176 | |
| 177 | /* --- Path configuration inputs ------------ */ |
| 178 | int pathconfig_warnings; |
| 179 | wchar_t *program_name; |
| 180 | wchar_t *pythonpath_env; |
| 181 | wchar_t *home; |
| 182 | wchar_t *platlibdir; |
| 183 | |
| 184 | /* --- Path configuration outputs ----------- */ |
| 185 | int module_search_paths_set; |
| 186 | PyWideStringList module_search_paths; |
| 187 | wchar_t *executable; |
| 188 | wchar_t *base_executable; |
| 189 | wchar_t *prefix; |
| 190 | wchar_t *base_prefix; |
| 191 | wchar_t *exec_prefix; |
| 192 | wchar_t *base_exec_prefix; |
| 193 | |
| 194 | /* --- Parameter only used by Py_Main() ---------- */ |
| 195 | int skip_source_first_line; |
| 196 | wchar_t *run_command; |
| 197 | wchar_t *run_module; |
| 198 | wchar_t *run_filename; |
| 199 | |
| 200 | /* --- Private fields ---------------------------- */ |
| 201 | |
| 202 | // Install importlib? If equals to 0, importlib is not initialized at all. |
| 203 | // Needed by freeze_importlib. |
| 204 | int _install_importlib; |
| 205 | |
| 206 | // If equal to 0, stop Python initialization before the "main" phase. |
| 207 | int _init_main; |
| 208 | |
| 209 | // If non-zero, disallow threads, subprocesses, and fork. |
| 210 | // Default: 0. |
| 211 | int _isolated_interpreter; |
| 212 | } PyConfig; |
| 213 | |
| 214 | PyAPI_FUNC(void) PyConfig_InitPythonConfig(PyConfig *config); |
| 215 | PyAPI_FUNC(void) PyConfig_InitIsolatedConfig(PyConfig *config); |
| 216 | PyAPI_FUNC(void) PyConfig_Clear(PyConfig *); |
| 217 | PyAPI_FUNC(PyStatus) PyConfig_SetString( |
| 218 | PyConfig *config, |
| 219 | wchar_t **config_str, |
| 220 | const wchar_t *str); |
| 221 | PyAPI_FUNC(PyStatus) PyConfig_SetBytesString( |
| 222 | PyConfig *config, |
| 223 | wchar_t **config_str, |
| 224 | const char *str); |
| 225 | PyAPI_FUNC(PyStatus) PyConfig_Read(PyConfig *config); |
| 226 | PyAPI_FUNC(PyStatus) PyConfig_SetBytesArgv( |
| 227 | PyConfig *config, |
| 228 | Py_ssize_t argc, |
| 229 | char * const *argv); |
| 230 | PyAPI_FUNC(PyStatus) PyConfig_SetArgv(PyConfig *config, |
| 231 | Py_ssize_t argc, |
| 232 | wchar_t * const *argv); |
| 233 | PyAPI_FUNC(PyStatus) PyConfig_SetWideStringList(PyConfig *config, |
| 234 | PyWideStringList *list, |
| 235 | Py_ssize_t length, wchar_t **items); |
| 236 | |
| 237 | |
| 238 | /* --- Helper functions --------------------------------------- */ |
| 239 | |
| 240 | /* Get the original command line arguments, before Python modified them. |
| 241 | |
| 242 | See also PyConfig.orig_argv. */ |
| 243 | PyAPI_FUNC(void) Py_GetArgcArgv(int *argc, wchar_t ***argv); |
| 244 | |
| 245 | #ifdef __cplusplus |
| 246 | } |
| 247 | #endif |
| 248 | #endif /* !Py_LIMITED_API */ |
| 249 | #endif /* !Py_PYCORECONFIG_H */ |
| 250 | |