• Home
  • Raw
  • Download

Lines Matching +full:- +full:- +full:config

30 /* --- PyConfig spec ---------------------------------------------- */
138 /* --- Command line options --------------------------------------- */
142 "usage: %ls [option] ... [-c cmd | -m mod | file | -] [arg] ...\n";
148 -b : issue warnings about converting bytes/bytearray to str and comparing\n\
149 bytes/bytearray with str or bytes with int. (-bb: issue errors)\n\
150 -B : don't write .pyc files on import; also PYTHONDONTWRITEBYTECODE=x\n\
151 -c cmd : program passed in as string (terminates option list)\n\
152 -d : turn on parser debugging output (for experts only, only works on\n\
154 -E : ignore PYTHON* environment variables (such as PYTHONPATH)\n\
155 -h : print this help message and exit (also -? or --help)\n\
156 -i : inspect interactively after running script; forces a prompt even\n\
158 -I : isolate Python from the user's environment (implies -E and -s)\n\
159 -m mod : run library module as a script (terminates option list)\n\
160 -O : remove assert and __debug__-dependent statements; add .opt-1 before\n\
162 -OO : do -O changes and also discard docstrings; add .opt-2 before\n\
164 -P : don't prepend a potentially unsafe path to sys.path; also\n\
166 -q : don't print version and copyright messages on interactive startup\n\
167 -s : don't add user site directory to sys.path; also PYTHONNOUSERSITE=x\n\
168 -S : don't imply 'import site' on initialization\n\
169 -u : force the stdout and stderr streams to be unbuffered;\n\
171 -v : verbose (trace import statements); also PYTHONVERBOSE=x\n\
173 -V : print the Python version number and exit (also --version)\n\
175 -W arg : warning control; arg is action:message:category:module:lineno\n\
177 -x : skip first line of source, allowing use of non-Unix forms of #!cmd\n\
178 -X opt : set implementation-specific option\n\
179 --check-hash-based-pycs always|default|never:\n\
180 control how Python invalidates hash-based .pyc files\n\
181 --help-env: print help about Python environment variables and exit\n\
182 --help-xoptions: print help about implementation-specific -X options and exit\n\
183 --help-all: print complete help information and exit\n\
187 - : program read from stdin (default; interactive mode if a tty)\n\
192 The following implementation-specific options are available:\n\
193 -X cpu_count=N: override the return value of os.cpu_count();\n\
194 -X cpu_count=default cancels overriding; also PYTHON_CPU_COUNT\n\
195 -X dev : enable Python Development Mode; also PYTHONDEVMODE\n\
196 -X faulthandler: dump the Python traceback on fatal errors;\n\
198 -X frozen_modules=[on|off]: whether to use frozen modules; the default is \"on\"\n\
203 "-X gil=[0|1]: enable (1) or disable (0) the GIL; also PYTHON_GIL\n"
206 -X importtime: show how long each import takes; also PYTHONPROFILEIMPORTTIME\n\
207 -X int_max_str_digits=N: limit the size of int<->str conversions;\n\
209 -X no_debug_ranges: don't include extra location information in code objects;\n\
211 -X perf: support the Linux \"perf\" profiler; also PYTHONPERFSUPPORT=1\n\
214 "-X presite=MOD: import this module before site; also PYTHON_PRESITE\n"
217 -X pycache_prefix=PATH: write .pyc files to a parallel tree instead of to the\n\
221 "-X pystats: enable pystats collection at startup; also PYTHONSTATS\n"
224 -X showrefcount: output the total reference count and number of used\n\
227 -X tracemalloc[=N]: trace Python memory allocations; N sets a traceback limit\n\
229 -X utf8[=0|1]: enable (1) or disable (0) UTF-8 mode; also PYTHONUTF8\n\
230 -X warn_default_encoding: enable opt-in EncodingWarning for 'encoding=None';\n\
234 /* Envvars that don't have equivalent command-line options are listed first */
238 "PYTHONPATH : '%lc'-separated list of directories prefixed to the\n"
264 "These variables have equivalent command-line options (see --help for details):\n"
265 "PYTHON_CPU_COUNT: override the return value of os.cpu_count() (-X cpu_count)\n"
266 "PYTHONDEBUG : enable parser debug mode (-d)\n"
267 "PYTHONDEVMODE : enable Python Development Mode (-X dev)\n"
268 "PYTHONDONTWRITEBYTECODE: don't write .pyc files (-B)\n"
269 "PYTHONFAULTHANDLER: dump the Python traceback on fatal errors (-X faulthandler)\n"
272 " (-X frozen_modules)\n"
274 "PYTHON_GIL : when set to 0, disables the GIL (-X gil)\n"
276 "PYTHONINSPECT : inspect interactively after running script (-i)\n"
277 "PYTHONINTMAXSTRDIGITS: limit the size of int<->str conversions;\n"
278 " 0 disables the limit (-X int_max_str_digits=N)\n"
280 " (-X no_debug_ranges)\n"
281 "PYTHONNOUSERSITE: disable user site directory (-s)\n"
282 "PYTHONOPTIMIZE : enable level 1 optimizations (-O)\n"
283 "PYTHONPERFSUPPORT: support the Linux \"perf\" profiler (-X perf)\n"
285 "PYTHON_PRESITE: import this module before site (-X presite)\n"
287 "PYTHONPROFILEIMPORTTIME: show how long each import takes (-X importtime)\n"
289 " (-X pycache_prefix)\n"
292 "PYTHONSTATS : turns on statistics gathering (-X pystats)\n"
294 "PYTHONTRACEMALLOC: trace Python memory allocations (-X tracemalloc)\n"
295 "PYTHONUNBUFFERED: disable stdout/stderr buffering (-u)\n"
296 "PYTHONUTF8 : control the UTF-8 mode (-X utf8)\n"
297 "PYTHONVERBOSE : trace import statements (-v)\n"
298 "PYTHONWARNDEFAULTENCODING: enable opt-in EncodingWarning for 'encoding=None'\n"
299 " (-X warn_default_encoding)\n"
300 "PYTHONWARNINGS : warning control (-W)\n"
310 /* --- Global configuration variables ----------------------------- */
312 /* UTF-8 mode (PEP 540): if equals to 1, use the UTF-8 encoding, and change
326 int Py_NoUserSiteDirectory = 0; /* for -s and site.py */
328 int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */
329 int Py_IsolatedFlag = 0; /* for -I, isolate from user's env */
331 int Py_LegacyWindowsFSEncodingFlag = 0; /* Uses mbcs instead of utf-8 */
422 /* --- PyStatus ----------------------------------------------- */
481 /* --- PyWideStringList ------------------------------------------------ */
487 assert(list->length >= 0); in _PyWideStringList_CheckConsistency()
488 if (list->length != 0) { in _PyWideStringList_CheckConsistency()
489 assert(list->items != NULL); in _PyWideStringList_CheckConsistency()
491 for (Py_ssize_t i = 0; i < list->length; i++) { in _PyWideStringList_CheckConsistency()
492 assert(list->items[i] != NULL); in _PyWideStringList_CheckConsistency()
503 for (Py_ssize_t i=0; i < list->length; i++) { in _PyWideStringList_Clear()
504 PyMem_RawFree(list->items[i]); in _PyWideStringList_Clear()
506 PyMem_RawFree(list->items); in _PyWideStringList_Clear()
507 list->length = 0; in _PyWideStringList_Clear()
508 list->items = NULL; in _PyWideStringList_Clear()
518 if (list2->length == 0) { in _PyWideStringList_Copy()
525 size_t size = list2->length * sizeof(list2->items[0]); in _PyWideStringList_Copy()
528 return -1; in _PyWideStringList_Copy()
531 for (Py_ssize_t i=0; i < list2->length; i++) { in _PyWideStringList_Copy()
532 wchar_t *item = _PyMem_RawWcsdup(list2->items[i]); in _PyWideStringList_Copy()
535 return -1; in _PyWideStringList_Copy()
551 Py_ssize_t len = list->length; in PyWideStringList_Insert()
568 size_t size = (len + 1) * sizeof(list->items[0]); in PyWideStringList_Insert()
569 wchar_t **items2 = (wchar_t **)PyMem_RawRealloc(list->items, size); in PyWideStringList_Insert()
578 (len - index) * sizeof(items2[0])); in PyWideStringList_Insert()
582 list->items = items2; in PyWideStringList_Insert()
583 list->length++; in PyWideStringList_Insert()
591 return PyWideStringList_Insert(list, list->length, item); in PyWideStringList_Append()
598 for (Py_ssize_t i = 0; i < list2->length; i++) { in _PyWideStringList_Extend()
599 PyStatus status = PyWideStringList_Append(list, list2->items[i]); in _PyWideStringList_Extend()
611 for (Py_ssize_t i = 0; i < list->length; i++) { in _PyWideStringList_Find()
612 if (wcscmp(list->items[i], item) == 0) { in _PyWideStringList_Find()
625 PyObject *pylist = PyList_New(list->length); in _PyWideStringList_AsList()
630 for (Py_ssize_t i = 0; i < list->length; i++) { in _PyWideStringList_AsList()
631 PyObject *item = PyUnicode_FromWideChar(list->items[i], -1); in _PyWideStringList_AsList()
642 /* --- Py_GetArgcArgv() ------------------------------------------- */
683 /* --- PyConfig ---------------------------------------------- */
690 config_check_consistency(const PyConfig *config) in config_check_consistency() argument
692 /* Check config consistency */ in config_check_consistency()
693 assert(config->isolated >= 0); in config_check_consistency()
694 assert(config->use_environment >= 0); in config_check_consistency()
695 assert(config->dev_mode >= 0); in config_check_consistency()
696 assert(config->install_signal_handlers >= 0); in config_check_consistency()
697 assert(config->use_hash_seed >= 0); in config_check_consistency()
698 assert(config->hash_seed <= MAX_HASH_SEED); in config_check_consistency()
699 assert(config->faulthandler >= 0); in config_check_consistency()
700 assert(config->tracemalloc >= 0); in config_check_consistency()
701 assert(config->import_time >= 0); in config_check_consistency()
702 assert(config->code_debug_ranges >= 0); in config_check_consistency()
703 assert(config->show_ref_count >= 0); in config_check_consistency()
704 assert(config->dump_refs >= 0); in config_check_consistency()
705 assert(config->malloc_stats >= 0); in config_check_consistency()
706 assert(config->site_import >= 0); in config_check_consistency()
707 assert(config->bytes_warning >= 0); in config_check_consistency()
708 assert(config->warn_default_encoding >= 0); in config_check_consistency()
709 assert(config->inspect >= 0); in config_check_consistency()
710 assert(config->interactive >= 0); in config_check_consistency()
711 assert(config->optimization_level >= 0); in config_check_consistency()
712 assert(config->parser_debug >= 0); in config_check_consistency()
713 assert(config->write_bytecode >= 0); in config_check_consistency()
714 assert(config->verbose >= 0); in config_check_consistency()
715 assert(config->quiet >= 0); in config_check_consistency()
716 assert(config->user_site_directory >= 0); in config_check_consistency()
717 assert(config->parse_argv >= 0); in config_check_consistency()
718 assert(config->configure_c_stdio >= 0); in config_check_consistency()
719 assert(config->buffered_stdio >= 0); in config_check_consistency()
720 assert(_PyWideStringList_CheckConsistency(&config->orig_argv)); in config_check_consistency()
721 assert(_PyWideStringList_CheckConsistency(&config->argv)); in config_check_consistency()
722 /* sys.argv must be non-empty: empty argv is replaced with [''] */ in config_check_consistency()
723 assert(config->argv.length >= 1); in config_check_consistency()
724 assert(_PyWideStringList_CheckConsistency(&config->xoptions)); in config_check_consistency()
725 assert(_PyWideStringList_CheckConsistency(&config->warnoptions)); in config_check_consistency()
726 assert(_PyWideStringList_CheckConsistency(&config->module_search_paths)); in config_check_consistency()
727 assert(config->module_search_paths_set >= 0); in config_check_consistency()
728 assert(config->filesystem_encoding != NULL); in config_check_consistency()
729 assert(config->filesystem_errors != NULL); in config_check_consistency()
730 assert(config->stdio_encoding != NULL); in config_check_consistency()
731 assert(config->stdio_errors != NULL); in config_check_consistency()
733 assert(config->legacy_windows_stdio >= 0); in config_check_consistency()
735 /* -c and -m options are exclusive */ in config_check_consistency()
736 assert(!(config->run_command != NULL && config->run_module != NULL)); in config_check_consistency()
737 assert(config->check_hash_pycs_mode != NULL); in config_check_consistency()
738 assert(config->_install_importlib >= 0); in config_check_consistency()
739 assert(config->pathconfig_warnings >= 0); in config_check_consistency()
740 assert(config->_is_python_build >= 0); in config_check_consistency()
741 assert(config->safe_path >= 0); in config_check_consistency()
742 assert(config->int_max_str_digits >= 0); in config_check_consistency()
743 // cpu_count can be -1 if the user doesn't override it. in config_check_consistency()
744 assert(config->cpu_count != 0); in config_check_consistency()
745 // config->use_frozen_modules is initialized later in config_check_consistency()
748 assert(config->_pystats >= 0); in config_check_consistency()
755 /* Free memory allocated in config, but don't clear all attributes */
757 PyConfig_Clear(PyConfig *config) in PyConfig_Clear() argument
765 CLEAR(config->pycache_prefix); in PyConfig_Clear()
766 CLEAR(config->pythonpath_env); in PyConfig_Clear()
767 CLEAR(config->home); in PyConfig_Clear()
768 CLEAR(config->program_name); in PyConfig_Clear()
770 _PyWideStringList_Clear(&config->argv); in PyConfig_Clear()
771 _PyWideStringList_Clear(&config->warnoptions); in PyConfig_Clear()
772 _PyWideStringList_Clear(&config->xoptions); in PyConfig_Clear()
773 _PyWideStringList_Clear(&config->module_search_paths); in PyConfig_Clear()
774 config->module_search_paths_set = 0; in PyConfig_Clear()
775 CLEAR(config->stdlib_dir); in PyConfig_Clear()
777 CLEAR(config->executable); in PyConfig_Clear()
778 CLEAR(config->base_executable); in PyConfig_Clear()
779 CLEAR(config->prefix); in PyConfig_Clear()
780 CLEAR(config->base_prefix); in PyConfig_Clear()
781 CLEAR(config->exec_prefix); in PyConfig_Clear()
782 CLEAR(config->base_exec_prefix); in PyConfig_Clear()
783 CLEAR(config->platlibdir); in PyConfig_Clear()
784 CLEAR(config->sys_path_0); in PyConfig_Clear()
786 CLEAR(config->filesystem_encoding); in PyConfig_Clear()
787 CLEAR(config->filesystem_errors); in PyConfig_Clear()
788 CLEAR(config->stdio_encoding); in PyConfig_Clear()
789 CLEAR(config->stdio_errors); in PyConfig_Clear()
790 CLEAR(config->run_command); in PyConfig_Clear()
791 CLEAR(config->run_module); in PyConfig_Clear()
792 CLEAR(config->run_filename); in PyConfig_Clear()
793 CLEAR(config->check_hash_pycs_mode); in PyConfig_Clear()
795 CLEAR(config->run_presite); in PyConfig_Clear()
798 _PyWideStringList_Clear(&config->orig_argv); in PyConfig_Clear()
804 _PyConfig_InitCompatConfig(PyConfig *config) in _PyConfig_InitCompatConfig() argument
806 memset(config, 0, sizeof(*config)); in _PyConfig_InitCompatConfig()
808 config->_config_init = (int)_PyConfig_INIT_COMPAT; in _PyConfig_InitCompatConfig()
809 config->isolated = -1; in _PyConfig_InitCompatConfig()
810 config->use_environment = -1; in _PyConfig_InitCompatConfig()
811 config->dev_mode = -1; in _PyConfig_InitCompatConfig()
812 config->install_signal_handlers = 1; in _PyConfig_InitCompatConfig()
813 config->use_hash_seed = -1; in _PyConfig_InitCompatConfig()
814 config->faulthandler = -1; in _PyConfig_InitCompatConfig()
815 config->tracemalloc = -1; in _PyConfig_InitCompatConfig()
816 config->perf_profiling = -1; in _PyConfig_InitCompatConfig()
817 config->module_search_paths_set = 0; in _PyConfig_InitCompatConfig()
818 config->parse_argv = 0; in _PyConfig_InitCompatConfig()
819 config->site_import = -1; in _PyConfig_InitCompatConfig()
820 config->bytes_warning = -1; in _PyConfig_InitCompatConfig()
821 config->warn_default_encoding = 0; in _PyConfig_InitCompatConfig()
822 config->inspect = -1; in _PyConfig_InitCompatConfig()
823 config->interactive = -1; in _PyConfig_InitCompatConfig()
824 config->optimization_level = -1; in _PyConfig_InitCompatConfig()
825 config->parser_debug= -1; in _PyConfig_InitCompatConfig()
826 config->write_bytecode = -1; in _PyConfig_InitCompatConfig()
827 config->verbose = -1; in _PyConfig_InitCompatConfig()
828 config->quiet = -1; in _PyConfig_InitCompatConfig()
829 config->user_site_directory = -1; in _PyConfig_InitCompatConfig()
830 config->configure_c_stdio = 0; in _PyConfig_InitCompatConfig()
831 config->buffered_stdio = -1; in _PyConfig_InitCompatConfig()
832 config->_install_importlib = 1; in _PyConfig_InitCompatConfig()
833 config->check_hash_pycs_mode = NULL; in _PyConfig_InitCompatConfig()
834 config->pathconfig_warnings = -1; in _PyConfig_InitCompatConfig()
835 config->_init_main = 1; in _PyConfig_InitCompatConfig()
837 config->legacy_windows_stdio = -1; in _PyConfig_InitCompatConfig()
840 config->use_frozen_modules = 0; in _PyConfig_InitCompatConfig()
842 config->use_frozen_modules = 1; in _PyConfig_InitCompatConfig()
844 config->safe_path = 0; in _PyConfig_InitCompatConfig()
845 config->int_max_str_digits = -1; in _PyConfig_InitCompatConfig()
846 config->_is_python_build = 0; in _PyConfig_InitCompatConfig()
847 config->code_debug_ranges = 1; in _PyConfig_InitCompatConfig()
848 config->cpu_count = -1; in _PyConfig_InitCompatConfig()
850 config->enable_gil = _PyConfig_GIL_DEFAULT; in _PyConfig_InitCompatConfig()
856 config_init_defaults(PyConfig *config) in config_init_defaults() argument
858 _PyConfig_InitCompatConfig(config); in config_init_defaults()
860 config->isolated = 0; in config_init_defaults()
861 config->use_environment = 1; in config_init_defaults()
862 config->site_import = 1; in config_init_defaults()
863 config->bytes_warning = 0; in config_init_defaults()
864 config->inspect = 0; in config_init_defaults()
865 config->interactive = 0; in config_init_defaults()
866 config->optimization_level = 0; in config_init_defaults()
867 config->parser_debug= 0; in config_init_defaults()
868 config->write_bytecode = 1; in config_init_defaults()
869 config->verbose = 0; in config_init_defaults()
870 config->quiet = 0; in config_init_defaults()
871 config->user_site_directory = 1; in config_init_defaults()
872 config->buffered_stdio = 1; in config_init_defaults()
873 config->pathconfig_warnings = 1; in config_init_defaults()
875 config->legacy_windows_stdio = 0; in config_init_defaults()
881 PyConfig_InitPythonConfig(PyConfig *config) in PyConfig_InitPythonConfig() argument
883 config_init_defaults(config); in PyConfig_InitPythonConfig()
885 config->_config_init = (int)_PyConfig_INIT_PYTHON; in PyConfig_InitPythonConfig()
886 config->configure_c_stdio = 1; in PyConfig_InitPythonConfig()
887 config->parse_argv = 1; in PyConfig_InitPythonConfig()
892 PyConfig_InitIsolatedConfig(PyConfig *config) in PyConfig_InitIsolatedConfig() argument
894 config_init_defaults(config); in PyConfig_InitIsolatedConfig()
896 config->_config_init = (int)_PyConfig_INIT_ISOLATED; in PyConfig_InitIsolatedConfig()
897 config->isolated = 1; in PyConfig_InitIsolatedConfig()
898 config->use_environment = 0; in PyConfig_InitIsolatedConfig()
899 config->user_site_directory = 0; in PyConfig_InitIsolatedConfig()
900 config->dev_mode = 0; in PyConfig_InitIsolatedConfig()
901 config->install_signal_handlers = 0; in PyConfig_InitIsolatedConfig()
902 config->use_hash_seed = 0; in PyConfig_InitIsolatedConfig()
903 config->faulthandler = 0; in PyConfig_InitIsolatedConfig()
904 config->tracemalloc = 0; in PyConfig_InitIsolatedConfig()
905 config->perf_profiling = 0; in PyConfig_InitIsolatedConfig()
906 config->int_max_str_digits = _PY_LONG_DEFAULT_MAX_STR_DIGITS; in PyConfig_InitIsolatedConfig()
907 config->safe_path = 1; in PyConfig_InitIsolatedConfig()
908 config->pathconfig_warnings = 0; in PyConfig_InitIsolatedConfig()
910 config->legacy_windows_stdio = 0; in PyConfig_InitIsolatedConfig()
917 PyConfig_SetString(PyConfig *config, wchar_t **config_str, const wchar_t *str) in PyConfig_SetString() argument
919 PyStatus status = _Py_PreInitializeFromConfig(config, NULL); in PyConfig_SetString()
941 config_set_bytes_string(PyConfig *config, wchar_t **config_str, in config_set_bytes_string() argument
944 PyStatus status = _Py_PreInitializeFromConfig(config, NULL); in config_set_bytes_string()
954 if (len == (size_t)-2) { in config_set_bytes_string()
971 #define CONFIG_SET_BYTES_STR(config, config_str, str, NAME) \ argument
972 config_set_bytes_string(config, config_str, str, "cannot decode " NAME)
976 Pre-initialize Python if needed to ensure that encodings are properly
979 PyConfig_SetBytesString(PyConfig *config, wchar_t **config_str, in PyConfig_SetBytesString() argument
982 return CONFIG_SET_BYTES_STR(config, config_str, str, "string"); in PyConfig_SetBytesString()
987 _PyConfig_Copy(PyConfig *config, const PyConfig *config2) in _PyConfig_Copy() argument
989 PyConfig_Clear(config); in _PyConfig_Copy()
993 for (; spec->name != NULL; spec++) { in _PyConfig_Copy()
994 char *member = (char *)config + spec->offset; in _PyConfig_Copy()
995 char *member2 = (char *)config2 + spec->offset; in _PyConfig_Copy()
996 switch (spec->type) { in _PyConfig_Copy()
1013 status = PyConfig_SetString(config, (wchar_t**)member, str); in _PyConfig_Copy()
1036 _PyConfig_AsDict(const PyConfig *config) in _PyConfig_AsDict() argument
1044 for (; spec->name != NULL; spec++) { in _PyConfig_AsDict()
1045 char *member = (char *)config + spec->offset; in _PyConfig_AsDict()
1047 switch (spec->type) { in _PyConfig_AsDict()
1072 obj = PyUnicode_FromWideChar(wstr, -1); in _PyConfig_AsDict()
1093 int res = PyDict_SetItemString(dict, spec->name, obj); in _PyConfig_AsDict()
1107 PyErr_Format(PyExc_ValueError, "invalid config value: %s", name); in config_dict_invalid_value()
1116 return -1; in config_dict_get_int()
1120 if (value == -1 && PyErr_Occurred()) { in config_dict_get_int()
1127 return -1; in config_dict_get_int()
1139 return -1; in config_dict_get_ulong()
1143 if (value == (unsigned long)-1 && PyErr_Occurred()) { in config_dict_get_ulong()
1150 return -1; in config_dict_get_ulong()
1158 config_dict_get_wstr(PyObject *dict, const char *name, PyConfig *config, in config_dict_get_wstr() argument
1163 return -1; in config_dict_get_wstr()
1168 status = PyConfig_SetString(config, result, NULL); in config_dict_get_wstr()
1179 status = PyConfig_SetString(config, result, wstr); in config_dict_get_wstr()
1191 return -1; in config_dict_get_wstr()
1196 config_dict_get_wstrlist(PyObject *dict, const char *name, PyConfig *config, in config_dict_get_wstrlist() argument
1201 return -1; in config_dict_get_wstrlist()
1207 return -1; in config_dict_get_wstrlist()
1245 return -1; in config_dict_get_wstrlist()
1250 _PyConfig_FromDict(PyConfig *config, PyObject *dict) in _PyConfig_FromDict() argument
1254 return -1; in _PyConfig_FromDict()
1258 for (; spec->name != NULL; spec++) { in _PyConfig_FromDict()
1259 char *member = (char *)config + spec->offset; in _PyConfig_FromDict()
1260 switch (spec->type) { in _PyConfig_FromDict()
1266 if (config_dict_get_int(dict, spec->name, &value) < 0) { in _PyConfig_FromDict()
1267 return -1; in _PyConfig_FromDict()
1269 if (spec->type == PyConfig_MEMBER_BOOL in _PyConfig_FromDict()
1270 || spec->type == PyConfig_MEMBER_UINT) in _PyConfig_FromDict()
1273 config_dict_invalid_value(spec->name); in _PyConfig_FromDict()
1274 return -1; in _PyConfig_FromDict()
1282 if (config_dict_get_ulong(dict, spec->name, in _PyConfig_FromDict()
1284 return -1; in _PyConfig_FromDict()
1291 if (config_dict_get_wstr(dict, spec->name, config, wstr) < 0) { in _PyConfig_FromDict()
1292 return -1; in _PyConfig_FromDict()
1295 config_dict_invalid_value(spec->name); in _PyConfig_FromDict()
1296 return -1; in _PyConfig_FromDict()
1303 if (config_dict_get_wstr(dict, spec->name, config, wstr) < 0) { in _PyConfig_FromDict()
1304 return -1; in _PyConfig_FromDict()
1310 if (config_dict_get_wstrlist(dict, spec->name, config, in _PyConfig_FromDict()
1312 return -1; in _PyConfig_FromDict()
1321 if (!(config->_config_init == _PyConfig_INIT_COMPAT in _PyConfig_FromDict()
1322 || config->_config_init == _PyConfig_INIT_PYTHON in _PyConfig_FromDict()
1323 || config->_config_init == _PyConfig_INIT_ISOLATED)) in _PyConfig_FromDict()
1326 return -1; in _PyConfig_FromDict()
1329 if (config->hash_seed > MAX_HASH_SEED) { in _PyConfig_FromDict()
1331 return -1; in _PyConfig_FromDict()
1338 config_get_env(const PyConfig *config, const char *name) in config_get_env() argument
1340 return _Py_GetEnv(config->use_environment, name); in config_get_env()
1346 Return -1 on memory allocation failure. Return -2 on decoding error. */
1348 config_get_env_dup(PyConfig *config, in config_get_env_dup() argument
1354 assert(config->use_environment >= 0); in config_get_env_dup()
1356 if (!config->use_environment) { in config_get_env_dup()
1368 return PyConfig_SetString(config, dest, var); in config_get_env_dup()
1376 return config_set_bytes_string(config, dest, var, decode_err_msg); in config_get_env_dup()
1381 #define CONFIG_GET_ENV_DUP(CONFIG, DEST, WNAME, NAME) \ argument
1382 config_get_env_dup(CONFIG, DEST, WNAME, NAME, "cannot decode " NAME)
1386 config_get_global_vars(PyConfig *config) in config_get_global_vars() argument
1390 if (config->_config_init != _PyConfig_INIT_COMPAT) { in config_get_global_vars()
1396 if (config->ATTR == -1) { \ in config_get_global_vars()
1397 config->ATTR = VALUE; \ in config_get_global_vars()
1400 if (config->ATTR == -1) { \ in config_get_global_vars()
1401 config->ATTR = !(VALUE); \ in config_get_global_vars()
1429 /* Set Py_xxx global configuration variables from 'config' configuration. */
1431 config_set_global_vars(const PyConfig *config) in config_set_global_vars() argument
1436 if (config->ATTR != -1) { \ in config_set_global_vars()
1437 VAR = config->ATTR; \ in config_set_global_vars()
1440 if (config->ATTR != -1) { \ in config_set_global_vars()
1441 VAR = !config->ATTR; \ in config_set_global_vars()
1463 /* Random or non-zero hash seed */ in config_set_global_vars()
1464 Py_HashRandomizationFlag = (config->use_hash_seed == 0 || in config_set_global_vars()
1465 config->hash_seed != 0); in config_set_global_vars()
1474 config_get_xoption(const PyConfig *config, wchar_t *name) in config_get_xoption() argument
1476 return _Py_get_xoption(&config->xoptions, name); in config_get_xoption()
1480 config_get_xoption_value(const PyConfig *config, wchar_t *name) in config_get_xoption_value() argument
1482 const wchar_t *xoption = config_get_xoption(config, name); in config_get_xoption_value()
1492 config_init_hash_seed(PyConfig *config) in config_init_hash_seed() argument
1497 const char *seed_text = config_get_env(config, "PYTHONHASHSEED"); in config_init_hash_seed()
1513 config->use_hash_seed = 1; in config_init_hash_seed()
1514 config->hash_seed = seed; in config_init_hash_seed()
1518 config->use_hash_seed = 0; in config_init_hash_seed()
1519 config->hash_seed = 0; in config_init_hash_seed()
1532 return -1; in config_wstr_to_int()
1535 return -1; in config_wstr_to_int()
1543 config_read_gil(PyConfig *config, size_t len, wchar_t first_char) in config_read_gil() argument
1547 config->enable_gil = _PyConfig_GIL_DISABLE; in config_read_gil()
1554 config->enable_gil = _PyConfig_GIL_ENABLE; in config_read_gil()
1560 return _PyStatus_ERR("PYTHON_GIL / -X gil must be \"0\" or \"1\""); in config_read_gil()
1566 config_read_env_vars(PyConfig *config) in config_read_env_vars() argument
1569 int use_env = config->use_environment; in config_read_env_vars()
1572 _Py_get_env_flag(use_env, &config->parser_debug, "PYTHONDEBUG"); in config_read_env_vars()
1573 _Py_get_env_flag(use_env, &config->verbose, "PYTHONVERBOSE"); in config_read_env_vars()
1574 _Py_get_env_flag(use_env, &config->optimization_level, "PYTHONOPTIMIZE"); in config_read_env_vars()
1575 _Py_get_env_flag(use_env, &config->inspect, "PYTHONINSPECT"); in config_read_env_vars()
1580 config->write_bytecode = 0; in config_read_env_vars()
1586 config->user_site_directory = 0; in config_read_env_vars()
1592 config->buffered_stdio = 0; in config_read_env_vars()
1596 _Py_get_env_flag(use_env, &config->legacy_windows_stdio, in config_read_env_vars()
1600 if (config_get_env(config, "PYTHONDUMPREFS")) { in config_read_env_vars()
1601 config->dump_refs = 1; in config_read_env_vars()
1603 if (config_get_env(config, "PYTHONMALLOCSTATS")) { in config_read_env_vars()
1604 config->malloc_stats = 1; in config_read_env_vars()
1607 if (config->dump_refs_file == NULL) { in config_read_env_vars()
1608 status = CONFIG_GET_ENV_DUP(config, &config->dump_refs_file, in config_read_env_vars()
1615 if (config->pythonpath_env == NULL) { in config_read_env_vars()
1616 status = CONFIG_GET_ENV_DUP(config, &config->pythonpath_env, in config_read_env_vars()
1623 if(config->platlibdir == NULL) { in config_read_env_vars()
1624 status = CONFIG_GET_ENV_DUP(config, &config->platlibdir, in config_read_env_vars()
1631 if (config->use_hash_seed < 0) { in config_read_env_vars()
1632 status = config_init_hash_seed(config); in config_read_env_vars()
1638 if (config_get_env(config, "PYTHONSAFEPATH")) { in config_read_env_vars()
1639 config->safe_path = 1; in config_read_env_vars()
1642 const char *gil = config_get_env(config, "PYTHON_GIL"); in config_read_env_vars()
1645 status = config_read_gil(config, len, gil[0]); in config_read_env_vars()
1655 config_init_cpu_count(PyConfig *config) in config_init_cpu_count() argument
1657 const char *env = config_get_env(config, "PYTHON_CPU_COUNT"); in config_init_cpu_count()
1659 int cpu_count = -1; in config_init_cpu_count()
1661 cpu_count = -1; in config_init_cpu_count()
1666 config->cpu_count = cpu_count; in config_init_cpu_count()
1669 const wchar_t *xoption = config_get_xoption(config, L"cpu_count"); in config_init_cpu_count()
1671 int cpu_count = -1; in config_init_cpu_count()
1675 cpu_count = -1; in config_init_cpu_count()
1684 config->cpu_count = cpu_count; in config_init_cpu_count()
1689 return _PyStatus_ERR("-X cpu_count=n option: n is missing or an invalid number, " in config_init_cpu_count()
1694 config_init_perf_profiling(PyConfig *config) in config_init_perf_profiling() argument
1697 const char *env = config_get_env(config, "PYTHONPERFSUPPORT"); in config_init_perf_profiling()
1703 config->perf_profiling = 1; in config_init_perf_profiling()
1706 const wchar_t *xoption = config_get_xoption(config, L"perf"); in config_init_perf_profiling()
1708 config->perf_profiling = 1; in config_init_perf_profiling()
1710 env = config_get_env(config, "PYTHON_PERF_JIT_SUPPORT"); in config_init_perf_profiling()
1716 config->perf_profiling = 2; in config_init_perf_profiling()
1719 xoption = config_get_xoption(config, L"perf_jit"); in config_init_perf_profiling()
1721 config->perf_profiling = 2; in config_init_perf_profiling()
1729 config_init_tracemalloc(PyConfig *config) in config_init_tracemalloc() argument
1734 const char *env = config_get_env(config, "PYTHONTRACEMALLOC"); in config_init_tracemalloc()
1745 config->tracemalloc = nframe; in config_init_tracemalloc()
1748 const wchar_t *xoption = config_get_xoption(config, L"tracemalloc"); in config_init_tracemalloc()
1759 return _PyStatus_ERR("-X tracemalloc=NFRAME: " in config_init_tracemalloc()
1764 /* -X tracemalloc behaves as -X tracemalloc=1 */ in config_init_tracemalloc()
1767 config->tracemalloc = nframe; in config_init_tracemalloc()
1773 config_init_int_max_str_digits(PyConfig *config) in config_init_int_max_str_digits() argument
1777 const char *env = config_get_env(config, "PYTHONINTMAXSTRDIGITS"); in config_init_int_max_str_digits()
1791 config->int_max_str_digits = maxdigits; in config_init_int_max_str_digits()
1794 const wchar_t *xoption = config_get_xoption(config, L"int_max_str_digits"); in config_init_int_max_str_digits()
1805 "-X int_max_str_digits: invalid limit; must be >= " in config_init_int_max_str_digits()
1811 config->int_max_str_digits = maxdigits; in config_init_int_max_str_digits()
1813 if (config->int_max_str_digits < 0) { in config_init_int_max_str_digits()
1814 config->int_max_str_digits = _PY_LONG_DEFAULT_MAX_STR_DIGITS; in config_init_int_max_str_digits()
1820 config_init_pycache_prefix(PyConfig *config) in config_init_pycache_prefix() argument
1822 assert(config->pycache_prefix == NULL); in config_init_pycache_prefix()
1824 const wchar_t *xoption = config_get_xoption(config, L"pycache_prefix"); in config_init_pycache_prefix()
1828 config->pycache_prefix = _PyMem_RawWcsdup(sep + 1); in config_init_pycache_prefix()
1829 if (config->pycache_prefix == NULL) { in config_init_pycache_prefix()
1835 // if "-X pycache_prefix=" option is used in config_init_pycache_prefix()
1836 config->pycache_prefix = NULL; in config_init_pycache_prefix()
1841 return CONFIG_GET_ENV_DUP(config, &config->pycache_prefix, in config_init_pycache_prefix()
1849 config_init_run_presite(PyConfig *config) in config_init_run_presite() argument
1851 assert(config->run_presite == NULL); in config_init_run_presite()
1853 const wchar_t *xoption = config_get_xoption(config, L"presite"); in config_init_run_presite()
1857 config->run_presite = _PyMem_RawWcsdup(sep + 1); in config_init_run_presite()
1858 if (config->run_presite == NULL) { in config_init_run_presite()
1864 // if "-X presite=" option is used in config_init_run_presite()
1865 config->run_presite = NULL; in config_init_run_presite()
1870 return CONFIG_GET_ENV_DUP(config, &config->run_presite, in config_init_run_presite()
1878 config_read_complex_options(PyConfig *config) in config_read_complex_options() argument
1880 /* More complex options configured by env var and -X option */ in config_read_complex_options()
1881 if (config->faulthandler < 0) { in config_read_complex_options()
1882 if (config_get_env(config, "PYTHONFAULTHANDLER") in config_read_complex_options()
1883 || config_get_xoption(config, L"faulthandler")) { in config_read_complex_options()
1884 config->faulthandler = 1; in config_read_complex_options()
1887 if (config_get_env(config, "PYTHONPROFILEIMPORTTIME") in config_read_complex_options()
1888 || config_get_xoption(config, L"importtime")) { in config_read_complex_options()
1889 config->import_time = 1; in config_read_complex_options()
1892 if (config_get_env(config, "PYTHONNODEBUGRANGES") in config_read_complex_options()
1893 || config_get_xoption(config, L"no_debug_ranges")) { in config_read_complex_options()
1894 config->code_debug_ranges = 0; in config_read_complex_options()
1898 if (config->tracemalloc < 0) { in config_read_complex_options()
1899 status = config_init_tracemalloc(config); in config_read_complex_options()
1905 if (config->perf_profiling < 0) { in config_read_complex_options()
1906 status = config_init_perf_profiling(config); in config_read_complex_options()
1912 if (config->int_max_str_digits < 0) { in config_read_complex_options()
1913 status = config_init_int_max_str_digits(config); in config_read_complex_options()
1919 if (config->cpu_count < 0) { in config_read_complex_options()
1920 status = config_init_cpu_count(config); in config_read_complex_options()
1926 if (config->pycache_prefix == NULL) { in config_read_complex_options()
1927 status = config_init_pycache_prefix(config); in config_read_complex_options()
1934 if (config->run_presite == NULL) { in config_read_complex_options()
1935 status = config_init_run_presite(config); in config_read_complex_options()
1949 if (preconfig->utf8_mode) { in config_get_stdio_errors()
1950 /* UTF-8 Mode uses UTF-8/surrogateescape */ in config_get_stdio_errors()
1980 config_get_locale_encoding(PyConfig *config, const PyPreConfig *preconfig, in config_get_locale_encoding() argument
1984 if (preconfig->utf8_mode) { in config_get_locale_encoding()
1985 encoding = _PyMem_RawWcsdup(L"utf-8"); in config_get_locale_encoding()
1993 PyStatus status = PyConfig_SetString(config, locale_encoding, encoding); in config_get_locale_encoding()
2000 config_init_stdio_encoding(PyConfig *config, in config_init_stdio_encoding() argument
2006 if (config->stdio_encoding != NULL && config->stdio_errors != NULL) { in config_init_stdio_encoding()
2011 const char *opt = config_get_env(config, "PYTHONIOENCODING"); in config_init_stdio_encoding()
2029 if (config->stdio_encoding == NULL) { in config_init_stdio_encoding()
2030 status = CONFIG_SET_BYTES_STR(config, &config->stdio_encoding, in config_init_stdio_encoding()
2048 if (config->stdio_errors == NULL && errors != NULL) { in config_init_stdio_encoding()
2049 status = CONFIG_SET_BYTES_STR(config, &config->stdio_errors, in config_init_stdio_encoding()
2062 if (config->stdio_encoding == NULL) { in config_init_stdio_encoding()
2063 status = config_get_locale_encoding(config, preconfig, in config_init_stdio_encoding()
2064 &config->stdio_encoding); in config_init_stdio_encoding()
2069 if (config->stdio_errors == NULL) { in config_init_stdio_encoding()
2073 status = PyConfig_SetString(config, &config->stdio_errors, errors); in config_init_stdio_encoding()
2085 config_get_fs_encoding(PyConfig *config, const PyPreConfig *preconfig, in config_get_fs_encoding() argument
2089 return PyConfig_SetString(config, fs_encoding, L"utf-8"); in config_get_fs_encoding()
2092 if (preconfig->legacy_windows_fs_encoding) { in config_get_fs_encoding()
2097 // Windows defaults to utf-8/surrogatepass (PEP 529) in config_get_fs_encoding()
2098 encoding = L"utf-8"; in config_get_fs_encoding()
2100 return PyConfig_SetString(config, fs_encoding, encoding); in config_get_fs_encoding()
2102 if (preconfig->utf8_mode) { in config_get_fs_encoding()
2103 return PyConfig_SetString(config, fs_encoding, L"utf-8"); in config_get_fs_encoding()
2107 return PyConfig_SetString(config, fs_encoding, L"ascii"); in config_get_fs_encoding()
2110 return config_get_locale_encoding(config, preconfig, fs_encoding); in config_get_fs_encoding()
2116 config_init_fs_encoding(PyConfig *config, const PyPreConfig *preconfig) in config_init_fs_encoding() argument
2120 if (config->filesystem_encoding == NULL) { in config_init_fs_encoding()
2121 status = config_get_fs_encoding(config, preconfig, in config_init_fs_encoding()
2122 &config->filesystem_encoding); in config_init_fs_encoding()
2128 if (config->filesystem_errors == NULL) { in config_init_fs_encoding()
2131 if (preconfig->legacy_windows_fs_encoding) { in config_init_fs_encoding()
2140 status = PyConfig_SetString(config, &config->filesystem_errors, errors); in config_init_fs_encoding()
2150 config_init_import(PyConfig *config, int compute_path_config) in config_init_import() argument
2154 status = _PyConfig_InitPathConfig(config, compute_path_config); in config_init_import()
2159 const char *env = config_get_env(config, "PYTHON_FROZEN_MODULES"); in config_init_import()
2163 config->use_frozen_modules = 1; in config_init_import()
2166 config->use_frozen_modules = 0; in config_init_import()
2172 /* -X frozen_modules=[on|off] */ in config_init_import()
2173 const wchar_t *value = config_get_xoption_value(config, L"frozen_modules"); in config_init_import()
2177 config->use_frozen_modules = 1; in config_init_import()
2180 config->use_frozen_modules = 0; in config_init_import()
2183 // "-X frozen_modules" and "-X frozen_modules=" both imply "on". in config_init_import()
2184 config->use_frozen_modules = 1; in config_init_import()
2187 return PyStatus_Error("bad value for option -X frozen_modules " in config_init_import()
2191 assert(config->use_frozen_modules >= 0); in config_init_import()
2196 _PyConfig_InitImportConfig(PyConfig *config) in _PyConfig_InitImportConfig() argument
2198 return config_init_import(config, 1); in _PyConfig_InitImportConfig()
2203 config_read(PyConfig *config, int compute_path_config) in config_read() argument
2208 if (config->use_environment) { in config_read()
2209 status = config_read_env_vars(config); in config_read()
2215 /* -X options */ in config_read()
2216 if (config_get_xoption(config, L"showrefcount")) { in config_read()
2217 config->show_ref_count = 1; in config_read()
2220 const wchar_t *x_gil = config_get_xoption_value(config, L"gil"); in config_read()
2223 status = config_read_gil(config, len, x_gil[0]); in config_read()
2230 if (config_get_xoption(config, L"pystats")) { in config_read()
2231 config->_pystats = 1; in config_read()
2233 else if (config_get_env(config, "PYTHONSTATS")) { in config_read()
2234 config->_pystats = 1; in config_read()
2236 if (config->_pystats < 0) { in config_read()
2237 config->_pystats = 0; in config_read()
2241 status = config_read_complex_options(config); in config_read()
2246 if (config->_install_importlib) { in config_read()
2247 status = config_init_import(config, compute_path_config); in config_read()
2254 if (config->dev_mode) { in config_read()
2255 if (config->faulthandler < 0) { in config_read()
2256 config->faulthandler = 1; in config_read()
2259 if (config->faulthandler < 0) { in config_read()
2260 config->faulthandler = 0; in config_read()
2262 if (config->tracemalloc < 0) { in config_read()
2263 config->tracemalloc = 0; in config_read()
2265 if (config->perf_profiling < 0) { in config_read()
2266 config->perf_profiling = 0; in config_read()
2268 if (config->use_hash_seed < 0) { in config_read()
2269 config->use_hash_seed = 0; in config_read()
2270 config->hash_seed = 0; in config_read()
2273 if (config->filesystem_encoding == NULL || config->filesystem_errors == NULL) { in config_read()
2274 status = config_init_fs_encoding(config, preconfig); in config_read()
2280 status = config_init_stdio_encoding(config, preconfig); in config_read()
2285 if (config->argv.length < 1) { in config_read()
2287 status = PyWideStringList_Append(&config->argv, L""); in config_read()
2293 if (config->check_hash_pycs_mode == NULL) { in config_read()
2294 status = PyConfig_SetString(config, &config->check_hash_pycs_mode, in config_read()
2301 if (config->configure_c_stdio < 0) { in config_read()
2302 config->configure_c_stdio = 1; in config_read()
2306 if (config->parse_argv == 1) { in config_read()
2307 config->parse_argv = 2; in config_read()
2315 config_init_stdio(const PyConfig *config) in config_init_stdio() argument
2324 if (!config->buffered_stdio) { in config_init_stdio()
2335 else if (config->interactive) { in config_init_stdio()
2337 /* Doesn't have to have line-buffered -- use unbuffered */ in config_init_stdio()
2338 /* Any set[v]buf(stdin, ...) screws up Tkinter :-( */ in config_init_stdio()
2346 /* Leave stderr alone - it should be unbuffered anyway. */ in config_init_stdio()
2353 - set Py_xxx global configuration variables
2354 - initialize C standard streams (stdin, stdout, stderr) */
2356 _PyConfig_Write(const PyConfig *config, _PyRuntimeState *runtime) in _PyConfig_Write() argument
2358 config_set_global_vars(config); in _PyConfig_Write()
2360 if (config->configure_c_stdio) { in _PyConfig_Write()
2361 config_init_stdio(config); in _PyConfig_Write()
2364 /* Write the new pre-configuration into _PyRuntime */ in _PyConfig_Write()
2365 PyPreConfig *preconfig = &runtime->preconfig; in _PyConfig_Write()
2366 preconfig->isolated = config->isolated; in _PyConfig_Write()
2367 preconfig->use_environment = config->use_environment; in _PyConfig_Write()
2368 preconfig->dev_mode = config->dev_mode; in _PyConfig_Write()
2370 if (_Py_SetArgcArgv(config->orig_argv.length, in _PyConfig_Write()
2371 config->orig_argv.items) < 0) in _PyConfig_Write()
2377 if (config->_pystats) { in _PyConfig_Write()
2386 /* --- PyConfig command line parser -------------------------- */
2395 fprintf(f, "Try `python -h' for more information.\n"); in config_usage()
2426 config_parse_cmdline(PyConfig *config, PyWideStringList *warnoptions, in config_parse_cmdline() argument
2430 const PyWideStringList *argv = &config->argv; in config_parse_cmdline()
2432 const wchar_t* program = config->program_name; in config_parse_cmdline()
2433 if (!program && argv->length >= 1) { in config_parse_cmdline()
2434 program = argv->items[0]; in config_parse_cmdline()
2439 int longindex = -1; in config_parse_cmdline()
2440 int c = _PyOS_GetOpt(argv->length, argv->items, &longindex); in config_parse_cmdline()
2446 if (config->run_command == NULL) { in config_parse_cmdline()
2447 /* -c is the last option; following arguments in config_parse_cmdline()
2455 memcpy(command, _PyOS_optarg, (len - 2) * sizeof(wchar_t)); in config_parse_cmdline()
2456 command[len - 2] = '\n'; in config_parse_cmdline()
2457 command[len - 1] = 0; in config_parse_cmdline()
2458 config->run_command = command; in config_parse_cmdline()
2464 /* -m is the last option; following arguments in config_parse_cmdline()
2467 if (config->run_module == NULL) { in config_parse_cmdline()
2468 config->run_module = _PyMem_RawWcsdup(_PyOS_optarg); in config_parse_cmdline()
2469 if (config->run_module == NULL) { in config_parse_cmdline()
2479 // check-hash-based-pycs in config_parse_cmdline()
2484 status = PyConfig_SetString(config, &config->check_hash_pycs_mode, in config_parse_cmdline()
2490 fprintf(stderr, "--check-hash-based-pycs must be one of " in config_parse_cmdline()
2498 // help-all in config_parse_cmdline()
2503 // help-env in config_parse_cmdline()
2508 // help-xoptions in config_parse_cmdline()
2513 config->bytes_warning++; in config_parse_cmdline()
2517 config->parser_debug++; in config_parse_cmdline()
2521 config->inspect++; in config_parse_cmdline()
2522 config->interactive++; in config_parse_cmdline()
2534 config->optimization_level++; in config_parse_cmdline()
2538 config->safe_path = 1; in config_parse_cmdline()
2542 config->write_bytecode = 0; in config_parse_cmdline()
2546 config->user_site_directory = 0; in config_parse_cmdline()
2550 config->site_import = 0; in config_parse_cmdline()
2558 config->buffered_stdio = 0; in config_parse_cmdline()
2562 config->verbose++; in config_parse_cmdline()
2566 config->skip_source_first_line = 1; in config_parse_cmdline()
2586 config->quiet++; in config_parse_cmdline()
2590 config->use_hash_seed = 0; in config_parse_cmdline()
2608 if (config->run_command == NULL && config->run_module == NULL in config_parse_cmdline()
2609 && _PyOS_optind < argv->length in config_parse_cmdline()
2610 && wcscmp(argv->items[_PyOS_optind], L"-") != 0 in config_parse_cmdline()
2611 && config->run_filename == NULL) in config_parse_cmdline()
2613 config->run_filename = _PyMem_RawWcsdup(argv->items[_PyOS_optind]); in config_parse_cmdline()
2614 if (config->run_filename == NULL) { in config_parse_cmdline()
2619 if (config->run_command != NULL || config->run_module != NULL) { in config_parse_cmdline()
2621 _PyOS_optind--; in config_parse_cmdline()
2638 config_init_env_warnoptions(PyConfig *config, PyWideStringList *warnoptions) in config_init_env_warnoptions() argument
2643 status = CONFIG_GET_ENV_DUP(config, &env, in config_init_env_warnoptions()
2672 warnoptions_append(PyConfig *config, PyWideStringList *options, in warnoptions_append() argument
2675 /* config_init_warnoptions() add existing config warnoptions at the end: in warnoptions_append()
2679 if (_PyWideStringList_Find(&config->warnoptions, option)) { in warnoptions_append()
2692 warnoptions_extend(PyConfig *config, PyWideStringList *options, in warnoptions_extend() argument
2695 const Py_ssize_t len = options2->length; in warnoptions_extend()
2696 wchar_t *const *items = options2->items; in warnoptions_extend()
2699 PyStatus status = warnoptions_append(config, options, items[i]); in warnoptions_extend()
2709 config_init_warnoptions(PyConfig *config, in config_init_warnoptions() argument
2719 * - any implicit filters added by _warnings.c/warnings.py in config_init_warnoptions()
2720 * - PyConfig.dev_mode: "default" filter in config_init_warnoptions()
2721 * - PYTHONWARNINGS environment variable in config_init_warnoptions()
2722 * - '-W' command line options in config_init_warnoptions()
2723 * - PyConfig.bytes_warning ('-b' and '-bb' command line options): in config_init_warnoptions()
2725 * - early PySys_AddWarnOption() calls in config_init_warnoptions()
2726 * - PyConfig.warnoptions in config_init_warnoptions()
2734 if (config->dev_mode) { in config_init_warnoptions()
2735 status = warnoptions_append(config, &options, L"default"); in config_init_warnoptions()
2741 status = warnoptions_extend(config, &options, env_warnoptions); in config_init_warnoptions()
2746 status = warnoptions_extend(config, &options, cmdline_warnoptions); in config_init_warnoptions()
2755 if (config->bytes_warning) { in config_init_warnoptions()
2757 if (config->bytes_warning> 1) { in config_init_warnoptions()
2763 status = warnoptions_append(config, &options, filter); in config_init_warnoptions()
2769 status = warnoptions_extend(config, &options, sys_warnoptions); in config_init_warnoptions()
2775 status = _PyWideStringList_Extend(&options, &config->warnoptions); in config_init_warnoptions()
2780 _PyWideStringList_Clear(&config->warnoptions); in config_init_warnoptions()
2781 config->warnoptions = options; in config_init_warnoptions()
2791 config_update_argv(PyConfig *config, Py_ssize_t opt_index) in config_update_argv() argument
2793 const PyWideStringList *cmdline_argv = &config->argv; in config_update_argv()
2796 /* Copy argv to be able to modify it (to force -c/-m) */ in config_update_argv()
2797 if (cmdline_argv->length <= opt_index) { in config_update_argv()
2806 slice.length = cmdline_argv->length - opt_index; in config_update_argv()
2807 slice.items = &cmdline_argv->items[opt_index]; in config_update_argv()
2815 if (config->run_command != NULL) { in config_update_argv()
2816 /* Force sys.argv[0] = '-c' */ in config_update_argv()
2817 arg0 = L"-c"; in config_update_argv()
2819 else if (config->run_module != NULL) { in config_update_argv()
2820 /* Force sys.argv[0] = '-m'*/ in config_update_argv()
2821 arg0 = L"-m"; in config_update_argv()
2835 _PyWideStringList_Clear(&config->argv); in config_update_argv()
2836 config->argv = config_argv; in config_update_argv()
2842 core_read_precmdline(PyConfig *config, _PyPreCmdline *precmdline) in core_read_precmdline() argument
2846 if (config->parse_argv == 1) { in core_read_precmdline()
2847 if (_PyWideStringList_Copy(&precmdline->argv, &config->argv) < 0) { in core_read_precmdline()
2859 _PyPreConfig_GetConfig(&preconfig, config); in core_read_precmdline()
2866 status = _PyPreCmdline_SetConfig(precmdline, config); in core_read_precmdline()
2876 config_run_filename_abspath(PyConfig *config) in config_run_filename_abspath() argument
2878 if (!config->run_filename) { in config_run_filename_abspath()
2883 if (_Py_isabs(config->run_filename)) { in config_run_filename_abspath()
2890 if (_Py_abspath(config->run_filename, &abs_filename) < 0) { in config_run_filename_abspath()
2899 PyMem_RawFree(config->run_filename); in config_run_filename_abspath()
2900 config->run_filename = abs_filename; in config_run_filename_abspath()
2906 config_read_cmdline(PyConfig *config) in config_read_cmdline() argument
2913 if (config->parse_argv < 0) { in config_read_cmdline()
2914 config->parse_argv = 1; in config_read_cmdline()
2917 if (config->parse_argv == 1) { in config_read_cmdline()
2919 status = config_parse_cmdline(config, &cmdline_warnoptions, &opt_index); in config_read_cmdline()
2924 status = config_run_filename_abspath(config); in config_read_cmdline()
2929 status = config_update_argv(config, opt_index); in config_read_cmdline()
2935 status = config_run_filename_abspath(config); in config_read_cmdline()
2941 if (config->use_environment) { in config_read_cmdline()
2942 status = config_init_env_warnoptions(config, &env_warnoptions); in config_read_cmdline()
2954 status = config_init_warnoptions(config, in config_read_cmdline()
2973 _PyConfig_SetPyArgv(PyConfig *config, const _PyArgv *args) in _PyConfig_SetPyArgv() argument
2975 PyStatus status = _Py_PreInitializeFromConfig(config, args); in _PyConfig_SetPyArgv()
2980 return _PyArgv_AsWstrList(args, &config->argv); in _PyConfig_SetPyArgv()
2984 /* Set config.argv: decode argv using Py_DecodeLocale(). Pre-initialize Python
2987 PyConfig_SetBytesArgv(PyConfig *config, Py_ssize_t argc, char * const *argv) in PyConfig_SetBytesArgv() argument
2994 return _PyConfig_SetPyArgv(config, &args); in PyConfig_SetBytesArgv()
2999 PyConfig_SetArgv(PyConfig *config, Py_ssize_t argc, wchar_t * const *argv) in PyConfig_SetArgv() argument
3006 return _PyConfig_SetPyArgv(config, &args); in PyConfig_SetArgv()
3011 PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, in PyConfig_SetWideStringList() argument
3014 PyStatus status = _Py_PreInitializeFromConfig(config, NULL); in PyConfig_SetWideStringList()
3033 The only side effects are to modify config and to call _Py_SetArgcArgv(). */
3035 _PyConfig_Read(PyConfig *config, int compute_path_config) in _PyConfig_Read() argument
3039 status = _Py_PreInitializeFromConfig(config, NULL); in _PyConfig_Read()
3044 config_get_global_vars(config); in _PyConfig_Read()
3046 if (config->orig_argv.length == 0 in _PyConfig_Read()
3047 && !(config->argv.length == 1 in _PyConfig_Read()
3048 && wcscmp(config->argv.items[0], L"") == 0)) in _PyConfig_Read()
3050 if (_PyWideStringList_Copy(&config->orig_argv, &config->argv) < 0) { in _PyConfig_Read()
3056 status = core_read_precmdline(config, &precmdline); in _PyConfig_Read()
3061 assert(config->isolated >= 0); in _PyConfig_Read()
3062 if (config->isolated) { in _PyConfig_Read()
3063 config->safe_path = 1; in _PyConfig_Read()
3064 config->use_environment = 0; in _PyConfig_Read()
3065 config->user_site_directory = 0; in _PyConfig_Read()
3068 status = config_read_cmdline(config); in _PyConfig_Read()
3074 status = _PySys_ReadPreinitXOptions(config); in _PyConfig_Read()
3079 status = config_read(config, compute_path_config); in _PyConfig_Read()
3084 assert(config_check_consistency(config)); in _PyConfig_Read()
3095 PyConfig_Read(PyConfig *config) in PyConfig_Read() argument
3097 return _PyConfig_Read(config, 0); in PyConfig_Read()
3122 /* pre config */ in _Py_GetConfigsAsDict()
3124 const PyPreConfig *pre_config = &interp->runtime->preconfig; in _Py_GetConfigsAsDict()
3134 /* core config */ in _Py_GetConfigsAsDict()
3135 const PyConfig *config = _PyInterpreterState_GetConfig(interp); in _Py_GetConfigsAsDict() local
3136 dict = _PyConfig_AsDict(config); in _Py_GetConfigsAsDict()
3140 if (PyDict_SetItemString(result, "config", dict) < 0) { in _Py_GetConfigsAsDict()
3197 init_dump_ascii_wstr(config->FIELD); \ in _Py_DumpPathConfig()
3201 const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp); in _Py_DumpPathConfig() local
3205 PySys_WriteStderr(" isolated = %i\n", config->isolated); in _Py_DumpPathConfig()
3206 PySys_WriteStderr(" environment = %i\n", config->use_environment); in _Py_DumpPathConfig()
3207 PySys_WriteStderr(" user site = %i\n", config->user_site_directory); in _Py_DumpPathConfig()
3208 PySys_WriteStderr(" safe_path = %i\n", config->safe_path); in _Py_DumpPathConfig()
3209 PySys_WriteStderr(" import site = %i\n", config->site_import); in _Py_DumpPathConfig()
3210 PySys_WriteStderr(" is in build tree = %i\n", config->_is_python_build); in _Py_DumpPathConfig()