Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion Include/pystate.h
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,12 @@ typedef struct {

See PEP 552 "Deterministic pycs" for more details. */
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;

#ifdef MS_WINDOWS
Expand Down Expand Up @@ -269,7 +275,8 @@ typedef struct {
.user_site_directory = -1, \
.unbuffered_stdio = -1, \
_PyCoreConfig_WINDOWS_INIT \
._install_importlib = 1}
._install_importlib = 1, \
._frozen = -1}
/* Note: _PyCoreConfig_INIT sets other fields to 0/NULL */

/* Placeholders while working on the new configuration API
Expand Down
4 changes: 4 additions & 0 deletions Lib/test/test_embed.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):

'_install_importlib': 1,
'_check_hash_pycs_mode': 'default',
'_frozen': 0,
}

def check_config(self, testname, expected):
Expand Down Expand Up @@ -330,6 +331,7 @@ def test_init_global_config(self):
'unbuffered_stdio': 1,
'utf8_mode': 1,
'user_site_directory': 0,
'_frozen': 1,
}
self.check_config("init_global_config", config)

Expand Down Expand Up @@ -362,7 +364,9 @@ def test_init_from_config(self):
'unbuffered_stdio': 1,
'user_site_directory': 0,
'faulthandler': 1,

'_check_hash_pycs_mode': 'always',
'_frozen': 1,
}
self.check_config("init_from_config", config)

Expand Down
6 changes: 3 additions & 3 deletions Modules/getpath.c
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@ calculate_prefix(const _PyCoreConfig *core_config,
{
calculate->prefix_found = search_for_prefix(core_config, calculate, prefix);
if (!calculate->prefix_found) {
if (!Py_FrozenFlag) {
if (!core_config->_frozen) {
fprintf(stderr,
"Could not find platform independent libraries <prefix>\n");
}
Expand Down Expand Up @@ -495,7 +495,7 @@ calculate_exec_prefix(const _PyCoreConfig *core_config,
calculate,
exec_prefix);
if (!calculate->exec_prefix_found) {
if (!Py_FrozenFlag) {
if (!core_config->_frozen) {
fprintf(stderr,
"Could not find platform dependent libraries <exec_prefix>\n");
}
Expand Down Expand Up @@ -915,7 +915,7 @@ calculate_path_impl(const _PyCoreConfig *core_config,
calculate_exec_prefix(core_config, calculate, exec_prefix);

if ((!calculate->prefix_found || !calculate->exec_prefix_found) &&
!Py_FrozenFlag)
!core_config->_frozen)
{
fprintf(stderr,
"Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]\n");
Expand Down
5 changes: 5 additions & 0 deletions Modules/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -573,6 +573,7 @@ _PyCoreConfig_GetGlobalConfig(_PyCoreConfig *config)
COPY_FLAG(legacy_windows_fs_encoding, Py_LegacyWindowsFSEncodingFlag);
COPY_FLAG(legacy_windows_stdio, Py_LegacyWindowsStdioFlag);
#endif
COPY_FLAG(_frozen, Py_FrozenFlag);

COPY_NOT_FLAG(use_environment, Py_IgnoreEnvironmentFlag);
COPY_NOT_FLAG(site_import, Py_NoSiteFlag);
Expand Down Expand Up @@ -759,6 +760,7 @@ _PyCoreConfig_Copy(_PyCoreConfig *config, const _PyCoreConfig *config2)
COPY_ATTR(legacy_windows_stdio);
#endif
COPY_ATTR(_check_hash_pycs_mode);
COPY_ATTR(_frozen);

#undef COPY_ATTR
#undef COPY_STR_ATTR
Expand Down Expand Up @@ -2281,6 +2283,9 @@ _PyCoreConfig_Read(_PyCoreConfig *config)
if (config->utf8_mode < 0) {
config->utf8_mode = 0;
}
if (config->_frozen < 0) {
config->_frozen = 0;
}

return _Py_INIT_OK();
}
Expand Down
3 changes: 1 addition & 2 deletions Programs/_freeze_importlib.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,7 @@ main(int argc, char *argv[])
/* Don't install importlib, since it could execute outdated bytecode. */
config._install_importlib = 0;
config.install_signal_handlers = 1;

Py_FrozenFlag++;
config._frozen = 1;

_PyInitError err = _Py_InitializeFromConfig(&config);
/* No need to call _PyCoreConfig_Clear() since we didn't allocate any
Expand Down
6 changes: 6 additions & 0 deletions Programs/_testembed.c
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,7 @@ dump_config(void)

printf("_install_importlib = %i\n", config->_install_importlib);
printf("_check_hash_pycs_mode = %s\n", config->_check_hash_pycs_mode);
printf("_frozen = %i\n", config->_frozen);

#undef ASSERT_EQUAL
#undef ASSERT_STR_EQUAL
Expand Down Expand Up @@ -420,6 +421,8 @@ static int test_init_global_config(void)
putenv("PYTHONUNBUFFERED=");
Py_UnbufferedStdioFlag = 1;

Py_FrozenFlag = 1;

/* FIXME: test Py_LegacyWindowsFSEncodingFlag */
/* FIXME: test Py_LegacyWindowsStdioFlag */

Expand Down Expand Up @@ -525,6 +528,9 @@ static int test_init_from_config(void)

config._check_hash_pycs_mode = "always";

Py_FrozenFlag = 0;
config._frozen = 1;

_PyInitError err = _Py_InitializeFromConfig(&config);
/* Don't call _PyCoreConfig_Clear() since all strings are static */
if (_Py_INIT_FAILED(err)) {
Expand Down
12 changes: 10 additions & 2 deletions Python/frozenmain.c
Original file line number Diff line number Diff line change
Expand Up @@ -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')
inspect = 1;
Expand Down Expand Up @@ -80,7 +81,14 @@ Py_FrozenMain(int argc, char **argv)
#endif /* MS_WINDOWS */
if (argc >= 1)
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
PyWinFreeze_ExeInit();
#endif
Expand Down