[lldb] Only use PyConfig when LLDB_EMBED_PYTHON_HOME is enabled (#152588)
PyConfig and friends are not part of the stable API. We could switch back to Py_SetPythonHome, which has been deprecated, but still part of the stable API. For now, limit the use of PyConfig to when LLDB_EMBED_PYTHON_HOME is enabled, which essentially means Windows. Changing the order doesn't seem to matter.
This commit is contained in:
1 parent
7d5af16245
commit
bcdc80828b
1 file changed
+21
-19
@@ -92,25 +92,6 @@ namespace {
|
||||
struct InitializePythonRAII {
|
||||
public:
|
||||
InitializePythonRAII() {
|
||||
PyConfig config;
|
||||
PyConfig_InitPythonConfig(&config);
|
||||
|
||||
#if LLDB_EMBED_PYTHON_HOME
|
||||
static std::string g_python_home = []() -> std::string {
|
||||
if (llvm::sys::path::is_absolute(LLDB_PYTHON_HOME))
|
||||
return LLDB_PYTHON_HOME;
|
||||
|
||||
FileSpec spec = HostInfo::GetShlibDir();
|
||||
if (!spec)
|
||||
return {};
|
||||
spec.AppendPathComponent(LLDB_PYTHON_HOME);
|
||||
return spec.GetPath();
|
||||
}();
|
||||
if (!g_python_home.empty()) {
|
||||
PyConfig_SetBytesString(&config, &config.home, g_python_home.c_str());
|
||||
}
|
||||
#endif
|
||||
|
||||
// The table of built-in modules can only be extended before Python is
|
||||
// initialized.
|
||||
if (!Py_IsInitialized()) {
|
||||
@@ -134,9 +115,30 @@ public:
|
||||
PyImport_AppendInittab("_lldb", LLDBSwigPyInit);
|
||||
}
|
||||
|
||||
#if LLDB_EMBED_PYTHON_HOME
|
||||
PyConfig config;
|
||||
PyConfig_InitPythonConfig(&config);
|
||||
|
||||
static std::string g_python_home = []() -> std::string {
|
||||
if (llvm::sys::path::is_absolute(LLDB_PYTHON_HOME))
|
||||
return LLDB_PYTHON_HOME;
|
||||
|
||||
FileSpec spec = HostInfo::GetShlibDir();
|
||||
if (!spec)
|
||||
return {};
|
||||
spec.AppendPathComponent(LLDB_PYTHON_HOME);
|
||||
return spec.GetPath();
|
||||
}();
|
||||
if (!g_python_home.empty()) {
|
||||
PyConfig_SetBytesString(&config, &config.home, g_python_home.c_str());
|
||||
}
|
||||
|
||||
config.install_signal_handlers = 0;
|
||||
Py_InitializeFromConfig(&config);
|
||||
PyConfig_Clear(&config);
|
||||
#else
|
||||
Py_InitializeEx(/*install_sigs=*/0);
|
||||
#endif
|
||||
|
||||
// The only case we should go further and acquire the GIL: it is unlocked.
|
||||
PyGILState_STATE gil_state = PyGILState_Ensure();
|
||||
|
||||
Reference in new issue
Block a user