I think this might be related to an older problem I found on compiling SIP in this message:
http://www.stackless.com/pipermail/stackless/2007-March/002633.html The developer of SIP/PyQt added a pair of #ifdefs to handle this in SIP but the problem appeared again now on PyQt. Carlos On Fri, Oct 24, 2008 at 6:43 PM, Carlos Eduardo de Paula <[EMAIL PROTECTED]> wrote: > Hi all, > > I'm trying to compile the latest version of PyQT and found some problems. > > When compiling PyQt, I found the following error: > > > cl -c -nologo -Zm200 -Zc:wchar_t- -O2 -MD -W3 -w34100 -w34189 > -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG > -DQT_CORE_LIB -I. -IC:\Carlos\Apps\Python26\include > -IC:\Qt\4.4.3\mkspecs\default -IC:\Qt\4.4.3\include\QtCore > -IC:\Qt\4.4.3\include -Fo @C:\DOCUME~1\cpaula\LOCALS~1\Temp\nmB6E.tmp > sipQtCorecmodule.cpp > sip/QtCore/qobject.sip(1316) : error C2039: 'ht_type' : is not a > member of '_typeobject' > c:\carlos\apps\python26\include\object.h(325) : see > declaration of '_typeobject' > sip/QtCore/qobject.sip(1316) : error C2228: left of '.tp_name' must > have class/struct/union > NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio > 9.0\VC\BIN\cl.EXE"' : return code '0x2' > Stop. > NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio > 9.0\VC\BIN\nmake.exe"' : return code '0x2' > Stop. > > I figured out that this is caused by qobject.sip when it tries to > access a slot in the heap type object: > > -------------------------------------------------- > > // Returns a Python object wrapping a qtcore_ArgumentStorage instance. > static PyObject *qtcore_PyArgumentStorage(const char *type, PyObject *data) > { > qtcore_ArgumentStorage *as = new qtcore_ArgumentStorage; > > sipParseType(type, &as->type); > > if (as->type.atype == unknown_sat) > { > delete as; > return 0; > } > > if (data) > { > if (qtcore_py_to_cpp(data, &as->type, &as->cpp_storage) < 0) > { > delete as; > return 0; > } > > // Make sure the Python object doesn't get garbage collected in case we > // are passing a pointer to it's real data around. > Py_INCREF(data); > } > else > { > void *cpp = 0; > > // This is a return value so set up the storage for it. > switch (as->type.atype) > { > case unknown_sat: > break; > > case class_sat: > { > #if PY_VERSION_HEX >= 0x02050000 > int type = > QMetaType::type(as->type.u.wt->super.ht_type.tp_name); > <------------- RIGHT HERE > #else > int type = QMetaType::type(as->type.u.wt->super.type.tp_name); > #endif > > > -------------------------------------------------- > > Looking at object.h, stackless defines PyHeapTypeObject as a synonym > to PyTypeObject, but that call tries to access the ht_type.tp_name > property that is not present in the stackless PyHeapTypeObject struct. > > -------------------------------------------------- > #ifdef STACKLESS > > /* in Stackless, this is just a synonym */ > #define PyHeapTypeObject PyTypeObject > > #define PyHeapType_GET_MEMBERS(etype) \ > ((PyMemberDef *)(((char *)etype) + (etype)->ob_type->tp_basicsize)) > #else > > /* The *real* layout of a type object when allocated on the heap */ > typedef struct _heaptypeobject { > /* Note: there's a dependency on the order of these members > in slotptr() in typeobject.c . */ > PyTypeObject ht_type; > PyNumberMethods as_number; > PyMappingMethods as_mapping; > PySequenceMethods as_sequence; /* as_sequence comes after as_mapping, > so that the mapping wins when both > the mapping and the sequence define > a given operator (e.g. __getitem__). > see add_operators() in typeobject.c > . */ > PyBufferProcs as_buffer; > PyObject *ht_name, *ht_slots; > /* here are optional user slots, followed by the members. */ > } PyHeapTypeObject; > > /* access macro to the members which are floating "behind" the object */ > #define PyHeapType_GET_MEMBERS(etype) \ > ((PyMemberDef *)(((char *)etype) + Py_TYPE(etype)->tp_basicsize)) > > #endif > -------------------------------------------------- > > > I dont know what to do because defining the PyHeapTypeObject in > stackless breaks its compilation and dont know if there is something > that could be done in PyQt itself to correct this. > > Any ideas? > > > -- > ------------------------------------------------------------------- > Visit Stackless Examples Project > http://code.google.com/p/stacklessexamples/ > Stackless Python - www.stackless.com > ------------------------------------------------------------------- > -- ------------------------------------------------------------------- Visit Stackless Examples Project http://code.google.com/p/stacklessexamples/ Stackless Python - www.stackless.com ------------------------------------------------------------------- _______________________________________________ Stackless mailing list [email protected] http://www.stackless.com/mailman/listinfo/stackless
