summaryrefslogtreecommitdiffstats
path: root/Python/sysmodule.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-12-15 01:05:29 (GMT)
committerGitHub <noreply@github.com>2017-12-15 01:05:29 (GMT)
commit41264f1cd4d6066b2797ff07cae465c1e06ff3b2 (patch)
tree79949fe2a6d0a5cbe6bc33851c6b8e86e8340e2d /Python/sysmodule.c
parentda273412c4374de07a500e7f23f89a6bb7527398 (diff)
downloadcpython-41264f1cd4d6066b2797ff07cae465c1e06ff3b2.zip
cpython-41264f1cd4d6066b2797ff07cae465c1e06ff3b2.tar.gz
cpython-41264f1cd4d6066b2797ff07cae465c1e06ff3b2.tar.bz2
bpo-32030: Add _PyMainInterpreterConfig.executable (#4876)
* Add new fields to _PyMainInterpreterConfig: * executable * prefix * base_prefix * exec_prefix * base_exec_prefix * _PySys_EndInit() now sets sys attributes from _PyMainInterpreterConfig
Diffstat (limited to 'Python/sysmodule.c')
-rw-r--r--Python/sysmodule.c43
1 files changed, 30 insertions, 13 deletions
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index b33a316..24098b9 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -2212,7 +2212,6 @@ err_occurred:
}
#undef SET_SYS_FROM_STRING
-#undef SET_SYS_FROM_STRING_BORROW
/* Updating the sys namespace, returning integer error codes */
#define SET_SYS_FROM_STRING_INT_RESULT(key, value) \
@@ -2228,10 +2227,35 @@ err_occurred:
} while (0)
int
-_PySys_EndInit(PyObject *sysdict)
+_PySys_EndInit(PyObject *sysdict, _PyMainInterpreterConfig *config)
{
int res;
+ /* _PyMainInterpreterConfig_Read() must set all these variables */
+ assert(config->module_search_path != NULL);
+ assert(config->executable != NULL);
+ assert(config->prefix != NULL);
+ assert(config->base_prefix != NULL);
+ assert(config->exec_prefix != NULL);
+ assert(config->base_exec_prefix != NULL);
+
+ SET_SYS_FROM_STRING_BORROW("path", config->module_search_path);
+ SET_SYS_FROM_STRING_BORROW("executable", config->executable);
+ SET_SYS_FROM_STRING_BORROW("prefix", config->prefix);
+ SET_SYS_FROM_STRING_BORROW("base_prefix", config->base_prefix);
+ SET_SYS_FROM_STRING_BORROW("exec_prefix", config->exec_prefix);
+ SET_SYS_FROM_STRING_BORROW("base_exec_prefix", config->base_exec_prefix);
+
+ if (config->argv != NULL) {
+ SET_SYS_FROM_STRING_BORROW("argv", config->argv);
+ }
+ if (config->warnoptions != NULL) {
+ SET_SYS_FROM_STRING_BORROW("warnoptions", config->warnoptions);
+ }
+ if (config->xoptions != NULL) {
+ SET_SYS_FROM_STRING_BORROW("_xoptions", config->xoptions);
+ }
+
/* Set flags to their final values */
SET_SYS_FROM_STRING_INT_RESULT("flags", make_flags());
/* prevent user from creating new instances */
@@ -2247,17 +2271,6 @@ _PySys_EndInit(PyObject *sysdict)
SET_SYS_FROM_STRING_INT_RESULT("dont_write_bytecode",
PyBool_FromLong(Py_DontWriteBytecodeFlag));
- SET_SYS_FROM_STRING_INT_RESULT("executable",
- PyUnicode_FromWideChar(
- Py_GetProgramFullPath(), -1));
- SET_SYS_FROM_STRING_INT_RESULT("prefix",
- PyUnicode_FromWideChar(Py_GetPrefix(), -1));
- SET_SYS_FROM_STRING_INT_RESULT("exec_prefix",
- PyUnicode_FromWideChar(Py_GetExecPrefix(), -1));
- SET_SYS_FROM_STRING_INT_RESULT("base_prefix",
- PyUnicode_FromWideChar(Py_GetPrefix(), -1));
- SET_SYS_FROM_STRING_INT_RESULT("base_exec_prefix",
- PyUnicode_FromWideChar(Py_GetExecPrefix(), -1));
if (get_warnoptions() == NULL)
return -1;
@@ -2268,8 +2281,12 @@ _PySys_EndInit(PyObject *sysdict)
if (PyErr_Occurred())
return -1;
return 0;
+
+err_occurred:
+ return -1;
}
+#undef SET_SYS_FROM_STRING_BORROW
#undef SET_SYS_FROM_STRING_INT_RESULT
static PyObject *