aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/ScriptInterpreter/Python
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2024-10-30 11:36:10 -0700
committerGitHub <noreply@github.com>2024-10-30 11:36:10 -0700
commit2bc5302706e710d125752c215392043fd5bf80fa (patch)
tree793d1434c30ab39909fc3e70394c316941b64c03 /lldb/source/Plugins/ScriptInterpreter/Python
parenta518ed2d815c16010a6262edd0414a5f60a63a39 (diff)
downloadllvm-2bc5302706e710d125752c215392043fd5bf80fa.zip
llvm-2bc5302706e710d125752c215392043fd5bf80fa.tar.gz
llvm-2bc5302706e710d125752c215392043fd5bf80fa.tar.bz2
Revert "[lldb] Use Py_InitializeFromConfig with Python >= 3.8 (NFC)" (#114290)
Reverts llvm/llvm-project#114112 because this triggers a compile error: ``` no known conversion from 'str_type' (aka 'wchar_t *') to 'const char *' for 3rd argument 221 | PyAPI_FUNC(PyStatus) PyConfig_SetBytesString( | ^ 222 | PyConfig *config, 223 | wchar_t **config_str, 224 | const char *str); | ~~~~~~~~~~~~~~~ 1 error generated. ```
Diffstat (limited to 'lldb/source/Plugins/ScriptInterpreter/Python')
-rw-r--r--lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp68
1 files changed, 28 insertions, 40 deletions
diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
index 6158083..7cc38da 100644
--- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
+++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
@@ -92,38 +92,7 @@ namespace {
struct InitializePythonRAII {
public:
InitializePythonRAII() {
-#if (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 8) || (PY_MAJOR_VERSION > 3)
- PyConfig config;
- PyConfig_InitPythonConfig(&config);
-#endif
-
-#if LLDB_EMBED_PYTHON_HOME
- typedef wchar_t *str_type;
- static str_type g_python_home = []() -> str_type {
- const char *lldb_python_home = LLDB_PYTHON_HOME;
- const char *absolute_python_home = nullptr;
- llvm::SmallString<64> path;
- if (llvm::sys::path::is_absolute(lldb_python_home)) {
- absolute_python_home = lldb_python_home;
- } else {
- FileSpec spec = HostInfo::GetShlibDir();
- if (!spec)
- return nullptr;
- spec.GetPath(path);
- llvm::sys::path::append(path, lldb_python_home);
- absolute_python_home = path.c_str();
- }
- size_t size = 0;
- return Py_DecodeLocale(absolute_python_home, &size);
- }();
- if (g_python_home != nullptr) {
-#if (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 8) || (PY_MAJOR_VERSION > 3)
- PyConfig_SetBytesString(&config, &config.home, g_python_home);
-#else
- Py_SetPythonHome(g_python_home);
-#endif
- }
-#endif
+ InitializePythonHome();
// The table of built-in modules can only be extended before Python is
// initialized.
@@ -148,23 +117,16 @@ public:
PyImport_AppendInittab("_lldb", LLDBSwigPyInit);
}
-#if (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 8) || (PY_MAJOR_VERSION > 3)
- config.install_signal_handlers = 0;
- Py_InitializeFromConfig(&config);
- PyConfig_Clear(&config);
- InitializeThreadsPrivate();
-#else
// Python < 3.2 and Python >= 3.2 reversed the ordering requirements for
// calling `Py_Initialize` and `PyEval_InitThreads`. < 3.2 requires that you
// call `PyEval_InitThreads` first, and >= 3.2 requires that you call it last.
-#if (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 2)
+#if (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 2) || (PY_MAJOR_VERSION > 3)
Py_InitializeEx(0);
InitializeThreadsPrivate();
#else
InitializeThreadsPrivate();
Py_InitializeEx(0);
#endif
-#endif
}
~InitializePythonRAII() {
@@ -180,6 +142,32 @@ public:
}
private:
+ void InitializePythonHome() {
+#if LLDB_EMBED_PYTHON_HOME
+ typedef wchar_t *str_type;
+ static str_type g_python_home = []() -> str_type {
+ const char *lldb_python_home = LLDB_PYTHON_HOME;
+ const char *absolute_python_home = nullptr;
+ llvm::SmallString<64> path;
+ if (llvm::sys::path::is_absolute(lldb_python_home)) {
+ absolute_python_home = lldb_python_home;
+ } else {
+ FileSpec spec = HostInfo::GetShlibDir();
+ if (!spec)
+ return nullptr;
+ spec.GetPath(path);
+ llvm::sys::path::append(path, lldb_python_home);
+ absolute_python_home = path.c_str();
+ }
+ size_t size = 0;
+ return Py_DecodeLocale(absolute_python_home, &size);
+ }();
+ if (g_python_home != nullptr) {
+ Py_SetPythonHome(g_python_home);
+ }
+#endif
+ }
+
void InitializeThreadsPrivate() {
// Since Python 3.7 `Py_Initialize` calls `PyEval_InitThreads` inside itself,
// so there is no way to determine whether the embedded interpreter