Re: GDB fails to build with Python 3.7
Phil Muldoon <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
On 29/05/18 13:11, [email protected] wrote: > > >> On May 29, 2018, at 7:37 AM, Phil Muldoon <[email protected]> wrote: >> >> Currently GDB fails to build with Python 3.7 >> >> https://bugs.python.org/issue33470 >> >> This is because we use an internal Python API: >> >> #ifdef IS_PY3K >> gdb_module = PyModule_Create (&python_GdbModuleDef); >> /* Add _gdb module to the list of known built-in modules. */ >> _PyImport_FixupBuiltin (gdb_module, "_gdb"); >> #else >> gdb_module = Py_InitModule ("_gdb", python_GdbMethods); >> #endif >> >> (the _PyImport_FixupBuiltin in python.c). >> >> This internal API has been changed. According to the advice of the Python >> maintainers we should never have used it in the first place. I didn't >> add this (at least I don't think I did!), so I'm asking whomever >> authored that code to please change it to be 3.7 compatible. I'm not >> sure what the code achieves so I'm reluctant to touch it in case of >> breakages on platforms I don't have easily access to. > > That may be part of my original Python 3 support work. I'd have to > dig back in somewhat dusty memories to find the reason. Part of the > problem is that Python initialization is different in Python 3 and > the differences are (or were?) undocumented and not particularly obvious. > > I'll take a look. Right now I can't get configure to find Python at > all on my Mac -- "--with-python=/Library/Frameworks...." isn't doing it. > > paul > > BUILDSTDERR: ../../gdb/python/python.c:1853:45: error: too few arguments to function 'int _PyImport_FixupBuiltin(PyObject*, const char*, PyObject*)' Paul, Thanks! And gah, I forgot to add the developers comments: "This is a private API, gdb should not use it. I don't know why gdb chose to call a private function. To fix gdb, an #ifdef using PY_VERSION_HEX should be use to pass one more additional parameter to Python 3.7: "modules". This parameter can be found in interp->modules, where interp is the current interpreter. For example, use PyThreadState_Get()->interp to get the current interpreter." Cheers Phil