mirror of https://github.com/python/cpython
bpo-34170: Add _PyCoreConfig._frozen parameter (GH-8591)
Modify frozenmain.c to use _Py_InitializeFromConfig().
This commit is contained in:
parent
8ed317f1ca
commit
b75d7e2435
|
@ -235,6 +235,12 @@ typedef struct {
|
||||||
|
|
||||||
See PEP 552 "Deterministic pycs" for more details. */
|
See PEP 552 "Deterministic pycs" for more details. */
|
||||||
const char *_check_hash_pycs_mode;
|
const char *_check_hash_pycs_mode;
|
||||||
|
|
||||||
|
/* If greater than 0, suppress _PyPathConfig_Calculate() warnings.
|
||||||
|
|
||||||
|
If set to -1 (default), inherit Py_FrozenFlag value. */
|
||||||
|
int _frozen;
|
||||||
|
|
||||||
} _PyCoreConfig;
|
} _PyCoreConfig;
|
||||||
|
|
||||||
#ifdef MS_WINDOWS
|
#ifdef MS_WINDOWS
|
||||||
|
@ -269,7 +275,8 @@ typedef struct {
|
||||||
.user_site_directory = -1, \
|
.user_site_directory = -1, \
|
||||||
.unbuffered_stdio = -1, \
|
.unbuffered_stdio = -1, \
|
||||||
_PyCoreConfig_WINDOWS_INIT \
|
_PyCoreConfig_WINDOWS_INIT \
|
||||||
._install_importlib = 1}
|
._install_importlib = 1, \
|
||||||
|
._frozen = -1}
|
||||||
/* Note: _PyCoreConfig_INIT sets other fields to 0/NULL */
|
/* Note: _PyCoreConfig_INIT sets other fields to 0/NULL */
|
||||||
|
|
||||||
/* Placeholders while working on the new configuration API
|
/* Placeholders while working on the new configuration API
|
||||||
|
|
|
@ -289,6 +289,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
|
|
||||||
'_install_importlib': 1,
|
'_install_importlib': 1,
|
||||||
'_check_hash_pycs_mode': 'default',
|
'_check_hash_pycs_mode': 'default',
|
||||||
|
'_frozen': 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
def check_config(self, testname, expected):
|
def check_config(self, testname, expected):
|
||||||
|
@ -330,6 +331,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
'unbuffered_stdio': 1,
|
'unbuffered_stdio': 1,
|
||||||
'utf8_mode': 1,
|
'utf8_mode': 1,
|
||||||
'user_site_directory': 0,
|
'user_site_directory': 0,
|
||||||
|
'_frozen': 1,
|
||||||
}
|
}
|
||||||
self.check_config("init_global_config", config)
|
self.check_config("init_global_config", config)
|
||||||
|
|
||||||
|
@ -362,7 +364,9 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
'unbuffered_stdio': 1,
|
'unbuffered_stdio': 1,
|
||||||
'user_site_directory': 0,
|
'user_site_directory': 0,
|
||||||
'faulthandler': 1,
|
'faulthandler': 1,
|
||||||
|
|
||||||
'_check_hash_pycs_mode': 'always',
|
'_check_hash_pycs_mode': 'always',
|
||||||
|
'_frozen': 1,
|
||||||
}
|
}
|
||||||
self.check_config("init_from_config", config)
|
self.check_config("init_from_config", config)
|
||||||
|
|
||||||
|
|
|
@ -372,7 +372,7 @@ calculate_prefix(const _PyCoreConfig *core_config,
|
||||||
{
|
{
|
||||||
calculate->prefix_found = search_for_prefix(core_config, calculate, prefix);
|
calculate->prefix_found = search_for_prefix(core_config, calculate, prefix);
|
||||||
if (!calculate->prefix_found) {
|
if (!calculate->prefix_found) {
|
||||||
if (!Py_FrozenFlag) {
|
if (!core_config->_frozen) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Could not find platform independent libraries <prefix>\n");
|
"Could not find platform independent libraries <prefix>\n");
|
||||||
}
|
}
|
||||||
|
@ -495,7 +495,7 @@ calculate_exec_prefix(const _PyCoreConfig *core_config,
|
||||||
calculate,
|
calculate,
|
||||||
exec_prefix);
|
exec_prefix);
|
||||||
if (!calculate->exec_prefix_found) {
|
if (!calculate->exec_prefix_found) {
|
||||||
if (!Py_FrozenFlag) {
|
if (!core_config->_frozen) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Could not find platform dependent libraries <exec_prefix>\n");
|
"Could not find platform dependent libraries <exec_prefix>\n");
|
||||||
}
|
}
|
||||||
|
@ -915,7 +915,7 @@ calculate_path_impl(const _PyCoreConfig *core_config,
|
||||||
calculate_exec_prefix(core_config, calculate, exec_prefix);
|
calculate_exec_prefix(core_config, calculate, exec_prefix);
|
||||||
|
|
||||||
if ((!calculate->prefix_found || !calculate->exec_prefix_found) &&
|
if ((!calculate->prefix_found || !calculate->exec_prefix_found) &&
|
||||||
!Py_FrozenFlag)
|
!core_config->_frozen)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]\n");
|
"Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]\n");
|
||||||
|
|
|
@ -573,6 +573,7 @@ _PyCoreConfig_GetGlobalConfig(_PyCoreConfig *config)
|
||||||
COPY_FLAG(legacy_windows_fs_encoding, Py_LegacyWindowsFSEncodingFlag);
|
COPY_FLAG(legacy_windows_fs_encoding, Py_LegacyWindowsFSEncodingFlag);
|
||||||
COPY_FLAG(legacy_windows_stdio, Py_LegacyWindowsStdioFlag);
|
COPY_FLAG(legacy_windows_stdio, Py_LegacyWindowsStdioFlag);
|
||||||
#endif
|
#endif
|
||||||
|
COPY_FLAG(_frozen, Py_FrozenFlag);
|
||||||
|
|
||||||
COPY_NOT_FLAG(use_environment, Py_IgnoreEnvironmentFlag);
|
COPY_NOT_FLAG(use_environment, Py_IgnoreEnvironmentFlag);
|
||||||
COPY_NOT_FLAG(site_import, Py_NoSiteFlag);
|
COPY_NOT_FLAG(site_import, Py_NoSiteFlag);
|
||||||
|
@ -759,6 +760,7 @@ _PyCoreConfig_Copy(_PyCoreConfig *config, const _PyCoreConfig *config2)
|
||||||
COPY_ATTR(legacy_windows_stdio);
|
COPY_ATTR(legacy_windows_stdio);
|
||||||
#endif
|
#endif
|
||||||
COPY_ATTR(_check_hash_pycs_mode);
|
COPY_ATTR(_check_hash_pycs_mode);
|
||||||
|
COPY_ATTR(_frozen);
|
||||||
|
|
||||||
#undef COPY_ATTR
|
#undef COPY_ATTR
|
||||||
#undef COPY_STR_ATTR
|
#undef COPY_STR_ATTR
|
||||||
|
@ -2281,6 +2283,9 @@ _PyCoreConfig_Read(_PyCoreConfig *config)
|
||||||
if (config->utf8_mode < 0) {
|
if (config->utf8_mode < 0) {
|
||||||
config->utf8_mode = 0;
|
config->utf8_mode = 0;
|
||||||
}
|
}
|
||||||
|
if (config->_frozen < 0) {
|
||||||
|
config->_frozen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
return _Py_INIT_OK();
|
return _Py_INIT_OK();
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,8 +82,7 @@ main(int argc, char *argv[])
|
||||||
/* Don't install importlib, since it could execute outdated bytecode. */
|
/* Don't install importlib, since it could execute outdated bytecode. */
|
||||||
config._install_importlib = 0;
|
config._install_importlib = 0;
|
||||||
config.install_signal_handlers = 1;
|
config.install_signal_handlers = 1;
|
||||||
|
config._frozen = 1;
|
||||||
Py_FrozenFlag++;
|
|
||||||
|
|
||||||
_PyInitError err = _Py_InitializeFromConfig(&config);
|
_PyInitError err = _Py_InitializeFromConfig(&config);
|
||||||
/* No need to call _PyCoreConfig_Clear() since we didn't allocate any
|
/* No need to call _PyCoreConfig_Clear() since we didn't allocate any
|
||||||
|
|
|
@ -368,6 +368,7 @@ dump_config(void)
|
||||||
|
|
||||||
printf("_install_importlib = %i\n", config->_install_importlib);
|
printf("_install_importlib = %i\n", config->_install_importlib);
|
||||||
printf("_check_hash_pycs_mode = %s\n", config->_check_hash_pycs_mode);
|
printf("_check_hash_pycs_mode = %s\n", config->_check_hash_pycs_mode);
|
||||||
|
printf("_frozen = %i\n", config->_frozen);
|
||||||
|
|
||||||
#undef ASSERT_EQUAL
|
#undef ASSERT_EQUAL
|
||||||
#undef ASSERT_STR_EQUAL
|
#undef ASSERT_STR_EQUAL
|
||||||
|
@ -420,6 +421,8 @@ static int test_init_global_config(void)
|
||||||
putenv("PYTHONUNBUFFERED=");
|
putenv("PYTHONUNBUFFERED=");
|
||||||
Py_UnbufferedStdioFlag = 1;
|
Py_UnbufferedStdioFlag = 1;
|
||||||
|
|
||||||
|
Py_FrozenFlag = 1;
|
||||||
|
|
||||||
/* FIXME: test Py_LegacyWindowsFSEncodingFlag */
|
/* FIXME: test Py_LegacyWindowsFSEncodingFlag */
|
||||||
/* FIXME: test Py_LegacyWindowsStdioFlag */
|
/* FIXME: test Py_LegacyWindowsStdioFlag */
|
||||||
|
|
||||||
|
@ -525,6 +528,9 @@ static int test_init_from_config(void)
|
||||||
|
|
||||||
config._check_hash_pycs_mode = "always";
|
config._check_hash_pycs_mode = "always";
|
||||||
|
|
||||||
|
Py_FrozenFlag = 0;
|
||||||
|
config._frozen = 1;
|
||||||
|
|
||||||
_PyInitError err = _Py_InitializeFromConfig(&config);
|
_PyInitError err = _Py_InitializeFromConfig(&config);
|
||||||
/* Don't call _PyCoreConfig_Clear() since all strings are static */
|
/* Don't call _PyCoreConfig_Clear() since all strings are static */
|
||||||
if (_Py_INIT_FAILED(err)) {
|
if (_Py_INIT_FAILED(err)) {
|
||||||
|
|
|
@ -41,7 +41,8 @@ Py_FrozenMain(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_FrozenFlag = 1; /* Suppress errors from getpath.c */
|
_PyCoreConfig config = _PyCoreConfig_INIT;
|
||||||
|
config._frozen = 1; /* Suppress errors from getpath.c */
|
||||||
|
|
||||||
if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0')
|
if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0')
|
||||||
inspect = 1;
|
inspect = 1;
|
||||||
|
@ -80,7 +81,14 @@ Py_FrozenMain(int argc, char **argv)
|
||||||
#endif /* MS_WINDOWS */
|
#endif /* MS_WINDOWS */
|
||||||
if (argc >= 1)
|
if (argc >= 1)
|
||||||
Py_SetProgramName(argv_copy[0]);
|
Py_SetProgramName(argv_copy[0]);
|
||||||
Py_Initialize();
|
|
||||||
|
err = _Py_InitializeFromConfig(&config);
|
||||||
|
/* No need to call _PyCoreConfig_Clear() since we didn't allocate any
|
||||||
|
memory: program_name is a constant string. */
|
||||||
|
if (_Py_INIT_FAILED(err)) {
|
||||||
|
_Py_FatalInitError(err);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef MS_WINDOWS
|
#ifdef MS_WINDOWS
|
||||||
PyWinFreeze_ExeInit();
|
PyWinFreeze_ExeInit();
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue