[PyQt] SIP 4.7.6 -> 4.7.9 upgrade cause compilation problems (missing typedef)

Yury Aliaev mutab0r at rambler.ru
Mon Dec 8 13:21:45 GMT 2008


Hello,

Recently I tried to compile QtiPlot 
(http://soft.proindependent.com/qtiplot.html), an application using SIP 
during building. At some stage of the compilation I got the following error:

sipqtiApplicationWindow.cpp: In function 'PyObject*
meth_ApplicationWindow_windows(PyObject*, PyObject*)':
sipqtiApplicationWindow.cpp:1144: error: 'MDIWindowList' was not
declared in this scope
sipqtiApplicationWindow.cpp:1144: error: 'sipRes' was not declared in
this scope
sipqtiApplicationWindow.cpp:1147: error: expected type-specifier before
'MDIWindowList'
sipqtiApplicationWindow.cpp:1147: error: expected `;' before 'MDIWindowList'
sipqtiApplicationWindow.cpp:1151: error: type '<type error>' argument
given to 'delete', expected pointer
make[1]: *** [../tmp/qtiplot/sipqtiApplicationWindow.o] Error 1

I started exploring the above file (sipqtiApplicationWindow.cpp) and 
found that the error was caused by the following fragment:

             MDIWindowList *sipRes;

             Py_BEGIN_ALLOW_THREADS
             sipRes = new MDIWindowList(sipCpp->windowsList());
             Py_END_ALLOW_THREADS

             PyObject *sipResObj = 
sipConvertFromMappedType(sipRes,sipMappedType_QList_0201MdiSubWindow,NULL);
             delete sipRes;


But MDIWindowList type was never be defined. Although in the file 
qti.sip, from wich the pointed .cpp file was generated, the following 
line presented:

typedef QList<MdiSubWindow*> MDIWindowList;

Also, I remembered that earlier the compilation hadn't failed. I'd found 
that since that time SIP was updated from 4.7.6 nj 4.7.9. I proposed 
that this may cause the error and downgraded SIP back to 4.7.6. After 
that the compilation stopped failing. The errorneos fragment of the 
generated file sipqtiApplicationWindow.cpp changed to the following:

             QList<MdiSubWindow *> *sipRes;

             Py_BEGIN_ALLOW_THREADS
             sipRes = new QList<MdiSubWindow *>(sipCpp->windowsList());
             Py_END_ALLOW_THREADS

             PyObject *sipResObj = 
sipConvertFromMappedType(sipRes,sipMappedType_QList_0201MdiSubWindow,NULL);
             delete sipRes;

             return sipResObj;

that is old SIP performed correct type placement.

So I now have a question, whether new SIP has a bug, or it's a feature 
and QtiPlot sources should be adopted for it (how?)? I'm a newbie with 
SIP and ask you for a help, please.

Regards,
Yury.


More information about the PyQt mailing list