Dear Phil, unfortunately, this issue is actively holding back current sip for them and it blocks a complete build of my PyQt project in build service, too.
It even made it into kde's bug tracking system already: https://bugs.kde.org/show_bug.cgi?id=252366 I know, PyKDE is not your business, but before I revert and downgrade sip, it would be nice, if you could look briefly into it. Thanks, Pete On Friday 24 September 2010, 13:04:26 Hans-Peter Jansen wrote: > On Wednesday 22 September 2010, 11:25:21 Hans-Peter Jansen wrote: > > 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.. > > > > Here's the KDE class excerpt: > > > > class KIO_EXPORT TCPSlaveBase : public SlaveBase > > { > > public: > > /** > > * Constructor. > > * > > * @param autoSsl if true, will automatically invoke startSsl() > > right after * connecting. In the absence of errors the > > use of SSL will * therefore be transparent to higher > > layers. */ TCPSlaveBase(const QByteArray &protocol, > > const QByteArray &poolSocket, const QByteArray > > &appSocket, bool autoSsl = false); > > > > virtual ~TCPSlaveBase(); > > > > protected: > > enum SslResultDetail { > > ResultOk = 1, > > ResultOverridden = 2, > > ResultFailed = 4, > > ResultFailedEarly = 8 > > }; > > friend class QFlags<KIO::TCPSlaveBase::SslResultDetail>; > > public: > > Q_DECLARE_FLAGS(SslResult, SslResultDetail) > > protected: > > [...] > > > > and the related sip file excerpt: > > > > %ModuleHeaderCode > > //ctscc > > #include <forwardingslavebase.h> > > #include <slavebase.h> > > #include <tcpslavebase.h> > > %End > > > > namespace KIO > > { > > > > class TCPSlaveBase : KIO::SlaveBase > > { > > %TypeHeaderCode > > #include <tcpslavebase.h> > > %End > > > > > > public: > > TCPSlaveBase (const QByteArray& protocol, const QByteArray& > > poolSocket, const QByteArray& appSocket, bool autoSsl = 0); > > > > > > protected: > > enum SslResultDetail > > { > > ResultOk, > > ResultOverridden, > > ResultFailed, > > ResultFailedEarly > > }; > > [...] > > > > Both attached. > > And here's the offending sip generated code (for the __xor__ method): > > extern "C" {static PyObject > *slot_KIO_TCPSlaveBase_SslResult___xor__(PyObject *,PyObject *);} static > PyObject *slot_KIO_TCPSlaveBase_SslResult___xor__(PyObject > *sipArg0,PyObject *sipArg1) { > PyObject *sipParseErr = NULL; > > { > KIO::TCPSlaveBase::SslResult * a0; > int a0State = 0; > KIO::TCPSlaveBase::SslResult * a1; > int a1State = 0; > > if (sipParsePair(&sipParseErr, sipArg0, sipArg1, "J1J1", > sipType_KIO_TCPSlaveBase_SslResult, &a0, &a0State, sipT > ype_KIO_TCPSlaveBase_SslResult, &a1, &a1State)) > { > KIO::TCPSlaveBase::SslResult *sipRes; > > Py_BEGIN_ALLOW_THREADS > sipRes = new KIO::TCPSlaveBase::SslResult((*a0 ^ *a1)); > Py_END_ALLOW_THREADS > > sipReleaseType(a0,sipType_KIO_TCPSlaveBase_SslResult,a0State); > sipReleaseType(a1,sipType_KIO_TCPSlaveBase_SslResult,a1State); > > return > sipConvertFromNewType(sipRes,sipType_KIO_TCPSlaveBase_SslResult,NULL); } > } > > { > KIO::TCPSlaveBase::SslResult * a0; > int a0State = 0; > int a1; > > if (sipParsePair(&sipParseErr, sipArg0, sipArg1, "J1i", > sipType_KIO_TCPSlaveBase_SslResult, &a0, &a0State, &a1)) { > KIO::TCPSlaveBase::SslResult *sipRes = 0; > > #line 320 "/usr/share/sip/PyQt4/QtCore/qglobal.sip" > sipRes = new KIO::TCPSlaveBase::SslResult(*a0 ^ > (KIO::TCPSlaveBase::SslResultDetail(a1))); #line 7221 "sipkiopart0.cpp" > > sipReleaseType(a0,sipType_KIO_TCPSlaveBase_SslResult,a0State); > > return > sipConvertFromNewType(sipRes,sipType_KIO_TCPSlaveBase_SslResult,NULL); } > } > > Py_XDECREF(sipParseErr); > > if (sipParseErr == Py_None) > return NULL; > > return > sipPySlotExtend(&sipModuleAPI_kio,xor_slot,NULL,sipArg0,sipArg1); } > > > The question is, why can't this method access the protected enum > KIO::TCPSlaveBase::SslResultDetail(a1) > > Does it have to be declared as friend class or some such? > > Any ideas anyone? > > Pete > _______________________________________________ > PyQt mailing list PyQt@riverbankcomputing.com > http://www.riverbankcomputing.com/mailman/listinfo/pyqt _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt