@@ -110,14 +110,30 @@ _PyPreCmdline_Clear(_PyPreCmdline *cmdline)
110110}
111111
112112
113+ int
114+ _PyPreCmdline_Copy (_PyPreCmdline * cmdline , const _PyPreCmdline * cmdline2 )
115+ {
116+ _PyPreCmdline_Clear (cmdline );
117+ if (_PyWstrList_Copy (& cmdline -> argv , & cmdline2 -> argv ) < 0 ) {
118+ return -1 ;
119+ }
120+ if (_PyWstrList_Copy (& cmdline -> xoptions , & cmdline2 -> xoptions ) < 0 ) {
121+ return -1 ;
122+ }
123+ cmdline -> use_environment = cmdline2 -> use_environment ;
124+ cmdline -> isolated = cmdline2 -> isolated ;
125+ return 0 ;
126+ }
127+
128+
113129_PyInitError
114130_PyPreCmdline_SetArgv (_PyPreCmdline * cmdline , const _PyArgv * args )
115131{
116132 return _PyArgv_AsWstrList (args , & cmdline -> argv );
117133}
118134
119135
120- static void
136+ void
121137_PyPreCmdline_GetPreConfig (_PyPreCmdline * cmdline , const _PyPreConfig * config )
122138{
123139#define COPY_ATTR (ATTR ) \
@@ -132,6 +148,36 @@ _PyPreCmdline_GetPreConfig(_PyPreCmdline *cmdline, const _PyPreConfig *config)
132148}
133149
134150
151+ void
152+ _PyPreCmdline_GetCoreConfig (_PyPreCmdline * cmdline , const _PyCoreConfig * config )
153+ {
154+ #define COPY_ATTR (ATTR ) \
155+ if (config->preconfig.ATTR != -1) { \
156+ cmdline->ATTR = config->preconfig.ATTR; \
157+ }
158+
159+ COPY_ATTR (use_environment );
160+ COPY_ATTR (isolated );
161+
162+ #undef COPY_ATTR
163+ }
164+
165+
166+ void
167+ _PyPreCmdline_SetCoreConfig (const _PyPreCmdline * cmdline , _PyCoreConfig * config )
168+ {
169+ #define COPY_ATTR (ATTR ) \
170+ if (config->preconfig.ATTR == -1 && cmdline->ATTR != -1) { \
171+ config->preconfig.ATTR = cmdline->ATTR; \
172+ }
173+
174+ COPY_ATTR (use_environment );
175+ COPY_ATTR (isolated );
176+
177+ #undef COPY_ATTR
178+ }
179+
180+
135181/* --- _PyPreConfig ----------------------------------------------- */
136182
137183void
@@ -628,7 +674,8 @@ _PyPreCmdline_Read(_PyPreCmdline *cmdline)
628674
629675 See _PyPreConfig_ReadFromArgv() to parse also command line arguments. */
630676_PyInitError
631- _PyPreConfig_Read (_PyPreConfig * config , const _PyArgv * args )
677+ _PyPreConfig_Read (_PyPreConfig * config , const _PyArgv * args ,
678+ const _PyCoreConfig * coreconfig )
632679{
633680 _PyInitError err ;
634681 _PyPreCmdline cmdline = _PyPreCmdline_INIT ;
@@ -642,8 +689,17 @@ _PyPreConfig_Read(_PyPreConfig *config, const _PyArgv *args)
642689 /* Set LC_CTYPE to the user preferred locale */
643690 _Py_SetLocaleFromEnv (LC_CTYPE );
644691
692+ _PyPreConfig_GetGlobalConfig (config );
693+
645694 _PyPreCmdline_GetPreConfig (& cmdline , config );
646695
696+ if (coreconfig ) {
697+ _PyPreCmdline_GetCoreConfig (& cmdline , coreconfig );
698+ if (config -> dev_mode == -1 ) {
699+ config -> dev_mode = coreconfig -> preconfig .dev_mode ;
700+ }
701+ }
702+
647703 if (args ) {
648704 err = _PyPreCmdline_SetArgv (& cmdline , args );
649705 if (_Py_INIT_FAILED (err )) {
@@ -724,7 +780,7 @@ _PyPreConfig_ReadFromArgv(_PyPreConfig *config, const _PyArgv *args)
724780 Py_LegacyWindowsFSEncodingFlag = config -> legacy_windows_fs_encoding ;
725781#endif
726782
727- err = _PyPreConfig_Read (config , args );
783+ err = _PyPreConfig_Read (config , args , NULL );
728784 if (_Py_INIT_FAILED (err )) {
729785 goto done ;
730786 }
0 commit comments