On 10/14/20 14:29 PM, Cristián Maureira-Fredes wrote: >On 10/14/20 5:21 PM, Stephen Morris wrote:
>> On 10/14/20 12:45 PM, Cristián Maureira-Fredes wrote: >> >>> On 10/14/20 1:35 PM, Stephen Morris wrote: >>> >>>> On 10/14/20 12:05 PM, Cristián Maureira-Fredes wrote: >> >>> >>On 10/12/20 1:14 PM, Stephen Morris wrote: > [snip] > [snip] > >> Thank you. I've rebuilt PySide using libclang.so.10 and now I get a >> different error message; I count this as progress, and I'll do a bit more >> investigation of my own before asking any further questions. >> >Thank you Stephen, >hopefully you can solve the issue soon. >Feel free to use a service like pastebin to share the full log, so we don't >miss any detail. I was too optimistic; the 'different error message' was just the linker failing to find libclang.so.10 because I'd failed to add its path to my LD_LIBRARY_PATH. Once I'd done that, it was straight back to the old error; same line number and everything: <myproject>_wrapper.cpp: In function ‘int Sbk_icp_RenderWindow_setattro(PyObject*, PyObject*, PyObject*)’: <myproject>_wrapper.cpp:1984:66: error: ‘PySide::Property’ has not been declared Shiboken::AutoDecRef pp(reinterpret_cast<PyObject *>(PySide::Property::getObject(self, name))); ^~~~~~~~ <myproject>_wrapper.cpp:1986:24: error: ‘PySide::Property’ has not been declared return PySide::Property::setValue(reinterpret_cast<PySideProperty *>(pp.object()), self, value); ^~~~~~~~ <myproject>_wrapper.cpp:1986:60: error: ‘PySideProperty’ does not name a type; did you mean ‘QMetaProperty’? return PySide::Property::setValue(reinterpret_cast<PySideProperty *>(pp.object()), self, value); ^~~~~~~~~~~~~~ QMetaProperty <myproject>_wrapper.cpp:1986:75: error: expected ‘>’ before ‘*’ token return PySide::Property::setValue(reinterpret_cast<PySideProperty *>(pp.object()), self, value); ^ <myproject>_wrapper.cpp:1986:75: error: expected ‘(’ before ‘*’ token return PySide::Property::setValue(reinterpret_cast<PySideProperty *>(pp.object()), self, value); <myproject> ( <myproject>_wrapper.cpp:1986:76: error: expected primary-expression before ‘>’ token return PySide::Property::setValue(reinterpret_cast<PySideProperty *>(pp.object()), self, value); Again, manually editing the wrapper file at this point and adding ‘#include “pysideproperty.h”’ near the beginning is all I need to do to get the build to complete successfully. I’ve done a direct comparison between the wrapper file generated by version 5.15.1 and version 5.12.5. The problem originates in a new function that appears in the 5.15.1 version, and that has no counterpart in the 5.12.5 version. It’s short, so I can paste it here in full: static int Sbk_icp_RenderWindow_setattro(PyObject *self, PyObject *name, PyObject *value) { if (value && PyCallable_Check(value)) { auto plain_inst = reinterpret_cast< ::icp::RenderWindow *>(Shiboken::Conversions::cppPointer(SbkRenderCellViewTypes[SBK_ICP_RENDERWINDOW_IDX], reinterpret_cast<SbkObject *>(self))); auto inst = dynamic_cast<RenderWindowWrapper *>(plain_inst); if (inst) inst->resetPyMethodCache(); } Shiboken::AutoDecRef pp(reinterpret_cast<PyObject *>(PySide::Property::getObject(self, name))); <- THE PROBLEM IS IN THIS LINE if (!pp.isNull()) return PySide::Property::setValue(reinterpret_cast<PySideProperty *>(pp.object()), self, value); <- AND THIS ONE return PyObject_GenericSetAttr(self, name, value); } This function is used to populate a table of slots later in the file: comparing the two versions, 5.12.5 version: static PyType_Slot Sbk_icp_RenderWindow_slots[] = { {Py_tp_base, nullptr}, // inserted by introduceWrapperType {Py_tp_dealloc, reinterpret_cast<void *>(&SbkDeallocWrapper)}, {Py_tp_repr, nullptr}, {Py_tp_hash, nullptr}, {Py_tp_call, nullptr}, {Py_tp_str, nullptr}, {Py_tp_getattro, nullptr}, {Py_tp_setattro, nullptr}, <- * NOTHING DEFINED HERE * {Py_tp_traverse, reinterpret_cast<void *>(Sbk_icp_RenderWindow_traverse)}, {Py_tp_clear, reinterpret_cast<void *>(Sbk_icp_RenderWindow_clear)}, {Py_tp_richcompare, nullptr}, {Py_tp_iter, nullptr}, {Py_tp_iternext, nullptr}, {Py_tp_methods, reinterpret_cast<void *>(Sbk_icp_RenderWindow_methods)}, {Py_tp_getset, nullptr}, {Py_tp_init, reinterpret_cast<void *>(Sbk_icp_RenderWindow_Init)}, {Py_tp_new, reinterpret_cast<void *>(SbkObjectTpNew)}, {0, nullptr} }; 5.15.1 version: static PyType_Slot Sbk_icp_RenderWindow_slots[] = { {Py_tp_base, nullptr}, // inserted by introduceWrapperType {Py_tp_dealloc, reinterpret_cast<void *>(&SbkDeallocWrapper)}, {Py_tp_repr, nullptr}, {Py_tp_hash, nullptr}, {Py_tp_call, nullptr}, {Py_tp_str, nullptr}, {Py_tp_getattro, nullptr}, {Py_tp_setattro, reinterpret_cast<void *>(Sbk_icp_RenderWindow_setattro)}, <- * NEW FUNCTION REFERENCED HERE * {Py_tp_traverse, reinterpret_cast<void *>(Sbk_icp_RenderWindow_traverse)}, {Py_tp_clear, reinterpret_cast<void *>(Sbk_icp_RenderWindow_clear)}, {Py_tp_richcompare, nullptr}, {Py_tp_iter, nullptr}, {Py_tp_iternext, nullptr}, {Py_tp_methods, reinterpret_cast<void *>(Sbk_icp_RenderWindow_methods)}, {Py_tp_getset, nullptr}, {Py_tp_init, reinterpret_cast<void *>(Sbk_icp_RenderWindow_Init)}, {Py_tp_new, reinterpret_cast<void *>(SbkObjectTpNew)}, {0, nullptr} }; Does this shed any light on things? I know that the usual outcome of these things involves writing a minimal example that reproduces the problem. That would be challenging this case, since it’s a fairly large library written by someone else. But if the above offers any clues, then great. I’d be satisfied if I could just find a programmatic way of injecting the missing #include at the beginning of the file. Having to wait until my build breaks before intervening by manually editing an auto-generated file feels all wrong. Thanks, Stephen.
_______________________________________________ PySide mailing list PySide@qt-project.org https://lists.qt-project.org/listinfo/pyside