[PyQt] kdebindings 4.4.4 build failure with sip-4.11.1 continues

Phil Thompson phil at riverbankcomputing.com
Thu Sep 30 13:27:47 BST 2010


On Wed, 22 Sep 2010 11:25:21 +0200, "Hans-Peter Jansen" <hpj at urpla.net>
wrote:
> On Wednesday 22 September 2010, 08:24:05 Simon Edwards wrote:
>> Hello,
>>
>> On 09/21/2010 11:32 PM, Hans-Peter Jansen wrote:
>> > in an attempt to build python-kde4 from kdebindings-4.4.4, I stumbled
>> > across this failure:
>> >
>> > sip: 
>> >
/usr/src/packages/BUILD/kdebindings-4.4.4/python/pykde4/sip/kdecore/typ
>> >edefs.sip:737: Mapped type has already been defined in another module
>> > make[2]: *** [python/pykde4/sip/akonadi/sipakonadipart0.cpp] Error 1
>> >
make[2]: Leaving directory `/usr/src/packages/BUILD/kdebindings-4.4.4/b
>> >uild'
>> >
make[1]: *** [python/pykde4/CMakeFiles/python_module_PyKDE4_akonadi.dir
>> >/all] Error 2
>> >
>> > Is this issue already known?
>>
>> yep. It is a small incompatibility in PyQt introduced after KDE 4.5
came
>> out.
>>
>> This change on trunk will most likely fix your problem. You should be
>> able to apply the change to 4.4.4 & 4.5.1.
>>
>>    http://websvn.kde.org/?view=revision&revision=1170602
>>
> 
> Yes, that fixed this problem. Thanks a bunch. I guess, sip got pickier
> about 
> multiply defined type converters lately.
> 
> Unfurtunately, here's the next stumbling point:
> 
> /usr/include/kio/tcpslavebase.h: In function 'PyObject*
> slot_KIO_TCPSlaveBase_SslResult___xor__(PyObject*, PyObject*)':
> /usr/include/kio/tcpslavebase.h:63: error: 'enum
> KIO::TCPSlaveBase::SslResultDetail' is protected
> /usr/share/sip/PyQt4/QtCore/qglobal.sip:320: error: within this context
> /usr/include/kio/tcpslavebase.h: In function 'PyObject*
> slot_KIO_TCPSlaveBase_SslResult___or__(PyObject*, PyObject*)':
> /usr/include/kio/tcpslavebase.h:63: error: 'enum
> KIO::TCPSlaveBase::SslResultDetail' is protected
> /usr/share/sip/PyQt4/QtCore/qglobal.sip:315: error: within this context
> 
> Phil, this one is due to the logic operator changes. It's not obvious,
> what's 
> going wrong, but related to the friend class QFlags declararation, where

> qglobal.sip got pulled in..

Try changing global.sip with...

    QFlags operator|(int f);
%MethodCode
        sipRes = new QFlags(*a0 | (ENUM(a1)));
%End

    QFlags operator^(int f);
%MethodCode
        sipRes = new QFlags(*a0 ^ (ENUM(a1)));
%End

...changed to ...

    QFlags operator|(int f);
%MethodCode
        sipRes = new QFlags(*a0 | a1);
%End

    QFlags operator^(int f);
%MethodCode
        sipRes = new QFlags(*a0 ^ a1);
%End

Is PyKDE built with protected-as-public? I think that that would also
solve the problem (and result in much smaller Python modules).

Phil


More information about the PyQt mailing list