diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-12-15 01:05:29 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-15 01:05:29 (GMT) |
commit | 41264f1cd4d6066b2797ff07cae465c1e06ff3b2 (patch) | |
tree | 79949fe2a6d0a5cbe6bc33851c6b8e86e8340e2d /Python/sysmodule.c | |
parent | da273412c4374de07a500e7f23f89a6bb7527398 (diff) | |
download | cpython-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.c | 43 |
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 * |