mirror of
https://github.com/python/cpython.git
synced 2026-01-04 14:32:21 +00:00
bpo-36763: Add _PyPreConfig._config_init (GH-13481)
* _PyPreConfig_GetGlobalConfig() and _PyCoreConfig_GetGlobalConfig() now do nothing if the configuration was not initialized with _PyPreConfig_InitCompatConfig() and _PyCoreConfig_InitCompatConfig() * Remove utf8_mode=-2 special case: use utf8_mode=-1 instead. * Fix _PyPreConfig_InitPythonConfig(): * isolated = 0 instead of -1 * use_environment = 1 instead of -1 * Rename _PyConfig_INIT to _PyConfig_INIT_COMPAT * Rename _PyPreConfig_Init() to _PyPreConfig_InitCompatConfig() * Rename _PyCoreConfig_Init() to _PyCoreConfig_InitCompatConfig() * PyInterpreterState_New() now uses _PyCoreConfig_InitPythonConfig() as default configuration, but it's very quickly overriden anyway. * _freeze_importlib.c uses _PyCoreConfig_SetString() to set program_name. * Cleanup preconfig_init_utf8_mode(): cmdline is always non-NULL.
This commit is contained in:
parent
e4d300e07c
commit
022be02dcf
11 changed files with 200 additions and 108 deletions
|
|
@ -76,18 +76,30 @@ main(int argc, char *argv[])
|
|||
}
|
||||
text[text_size] = '\0';
|
||||
|
||||
_PyInitError err;
|
||||
_PyCoreConfig config;
|
||||
_PyCoreConfig_InitIsolatedConfig(&config);
|
||||
|
||||
err = _PyCoreConfig_InitIsolatedConfig(&config);
|
||||
if (_PyInitError_Failed(err)) {
|
||||
_PyCoreConfig_Clear(&config);
|
||||
_Py_ExitInitError(err);
|
||||
}
|
||||
|
||||
config.site_import = 0;
|
||||
config.program_name = L"./_freeze_importlib";
|
||||
|
||||
err = _PyCoreConfig_SetString(&config, &config.program_name,
|
||||
L"./_freeze_importlib");
|
||||
if (_PyInitError_Failed(err)) {
|
||||
_PyCoreConfig_Clear(&config);
|
||||
_Py_ExitInitError(err);
|
||||
}
|
||||
|
||||
/* Don't install importlib, since it could execute outdated bytecode. */
|
||||
config._install_importlib = 0;
|
||||
config._init_main = 0;
|
||||
|
||||
_PyInitError err = _Py_InitializeFromConfig(&config);
|
||||
/* No need to call _PyCoreConfig_Clear() since we didn't allocate any
|
||||
memory: program_name is a constant string. */
|
||||
err = _Py_InitializeFromConfig(&config);
|
||||
_PyCoreConfig_Clear(&config);
|
||||
if (_PyInitError_Failed(err)) {
|
||||
_Py_ExitInitError(err);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -317,7 +317,7 @@ dump_config(void)
|
|||
}
|
||||
|
||||
|
||||
static int test_init_default_config(void)
|
||||
static int test_init_initialize_config(void)
|
||||
{
|
||||
_testembed_Py_Initialize();
|
||||
dump_config();
|
||||
|
|
@ -326,6 +326,47 @@ static int test_init_default_config(void)
|
|||
}
|
||||
|
||||
|
||||
static int check_init_compat_config(int preinit)
|
||||
{
|
||||
_PyInitError err;
|
||||
|
||||
if (preinit) {
|
||||
_PyPreConfig preconfig;
|
||||
_PyPreConfig_InitCompatConfig(&preconfig);
|
||||
|
||||
err = _Py_PreInitialize(&preconfig);
|
||||
if (_PyInitError_Failed(err)) {
|
||||
_Py_ExitInitError(err);
|
||||
}
|
||||
}
|
||||
|
||||
_PyCoreConfig config;
|
||||
_PyCoreConfig_InitCompatConfig(&config);
|
||||
config.program_name = L"./_testembed";
|
||||
|
||||
err = _Py_InitializeFromConfig(&config);
|
||||
if (_PyInitError_Failed(err)) {
|
||||
_Py_ExitInitError(err);
|
||||
}
|
||||
|
||||
dump_config();
|
||||
Py_Finalize();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int test_preinit_compat_config(void)
|
||||
{
|
||||
return check_init_compat_config(1);
|
||||
}
|
||||
|
||||
|
||||
static int test_init_compat_config(void)
|
||||
{
|
||||
return check_init_compat_config(0);
|
||||
}
|
||||
|
||||
|
||||
static int test_init_global_config(void)
|
||||
{
|
||||
/* FIXME: test Py_IgnoreEnvironmentFlag */
|
||||
|
|
@ -380,7 +421,7 @@ static int test_init_from_config(void)
|
|||
_PyInitError err;
|
||||
|
||||
_PyPreConfig preconfig;
|
||||
_PyPreConfig_Init(&preconfig);
|
||||
_PyPreConfig_InitCompatConfig(&preconfig);
|
||||
|
||||
putenv("PYTHONMALLOC=malloc_debug");
|
||||
preconfig.allocator = PYMEM_ALLOCATOR_MALLOC;
|
||||
|
|
@ -396,7 +437,7 @@ static int test_init_from_config(void)
|
|||
|
||||
/* Test _Py_InitializeFromConfig() */
|
||||
_PyCoreConfig config;
|
||||
_PyCoreConfig_Init(&config);
|
||||
_PyCoreConfig_InitCompatConfig(&config);
|
||||
config.install_signal_handlers = 0;
|
||||
|
||||
/* FIXME: test use_environment */
|
||||
|
|
@ -676,7 +717,7 @@ static int test_preinit_isolated1(void)
|
|||
_PyInitError err;
|
||||
|
||||
_PyPreConfig preconfig;
|
||||
_PyPreConfig_Init(&preconfig);
|
||||
_PyPreConfig_InitCompatConfig(&preconfig);
|
||||
preconfig.isolated = 1;
|
||||
|
||||
err = _Py_PreInitialize(&preconfig);
|
||||
|
|
@ -685,7 +726,7 @@ static int test_preinit_isolated1(void)
|
|||
}
|
||||
|
||||
_PyCoreConfig config;
|
||||
_PyCoreConfig_Init(&config);
|
||||
_PyCoreConfig_InitCompatConfig(&config);
|
||||
config.program_name = L"./_testembed";
|
||||
|
||||
set_all_env_vars();
|
||||
|
|
@ -705,7 +746,7 @@ static int test_preinit_isolated2(void)
|
|||
_PyInitError err;
|
||||
|
||||
_PyPreConfig preconfig;
|
||||
_PyPreConfig_Init(&preconfig);
|
||||
_PyPreConfig_InitCompatConfig(&preconfig);
|
||||
preconfig.isolated = 0;
|
||||
|
||||
err = _Py_PreInitialize(&preconfig);
|
||||
|
|
@ -715,7 +756,7 @@ static int test_preinit_isolated2(void)
|
|||
|
||||
/* Test _PyCoreConfig.isolated=1 */
|
||||
_PyCoreConfig config;
|
||||
_PyCoreConfig_Init(&config);
|
||||
_PyCoreConfig_InitCompatConfig(&config);
|
||||
|
||||
Py_IsolatedFlag = 0;
|
||||
config.isolated = 1;
|
||||
|
|
@ -885,12 +926,14 @@ static int check_preinit_isolated_config(int preinit)
|
|||
_PyCoreConfig config;
|
||||
err = _PyCoreConfig_InitIsolatedConfig(&config);
|
||||
if (_PyInitError_Failed(err)) {
|
||||
_PyCoreConfig_Clear(&config);
|
||||
_Py_ExitInitError(err);
|
||||
}
|
||||
config.program_name = L"./_testembed";
|
||||
|
||||
err = _Py_InitializeFromConfig(&config);
|
||||
if (_PyInitError_Failed(err)) {
|
||||
_PyCoreConfig_Clear(&config);
|
||||
_Py_ExitInitError(err);
|
||||
}
|
||||
|
||||
|
|
@ -1207,7 +1250,9 @@ static struct TestCase TestCases[] = {
|
|||
{ "bpo20891", test_bpo20891 },
|
||||
{ "initialize_twice", test_initialize_twice },
|
||||
{ "initialize_pymain", test_initialize_pymain },
|
||||
{ "init_default_config", test_init_default_config },
|
||||
{ "init_initialize_config", test_init_initialize_config },
|
||||
{ "preinit_compat_config", test_preinit_compat_config },
|
||||
{ "init_compat_config", test_init_compat_config },
|
||||
{ "init_global_config", test_init_global_config },
|
||||
{ "init_from_config", test_init_from_config },
|
||||
{ "init_parse_argv", test_init_parse_argv },
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue