Problem building pyside-1.2.1 on AIX (seems to be an issue with shiboken)
-
I've built pyside-1.2.1 on Solaris, HP-UX, and RHEL. Now I'm trying to build it on AIX. The build errors with:
@
[ 19%] Building CXX object PySide/QtGui/CMakeFiles/QtGui.dir/PySide/QtGui/qkeyevent_wrapper.cpp.o
cd /opt/build/pyside-qt4.8+1.2.1/PySide/QtGui && /opt/TWWfsw/gcc44/bin/g++ -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQtGui_EXPORTS -O2 -fPIC -I/opt/TWWfsw/libqt48/include/gcc44 -I/opt/TWWfsw/libqt48/include/gcc44/QtGui -I/opt/TWWfsw/libqt48/include/gcc44/QtCore -I/opt/build/pyside-qt4.8+1.2.1/PySide/QtGui/QtGui -I/opt/build/pyside-qt4.8+1.2.1/PySide/QtGui -I/opt/build/pyside-qt4.8+1.2.1/PySide/QtGui/PySide/QtGui -I/opt/build/pyside-qt4.8+1.2.1/PySide -I/opt/TWWfsw/libqt48/lib/python27/include/shiboken -I/opt/build/pyside-qt4.8+1.2.1/libpyside -I/opt/TWWfsw/python27/include/python2.7 -I/opt/build/pyside-qt4.8+1.2.1/PySide/QtCore/PySide/QtCore -o CMakeFiles/QtGui.dir/PySide/QtGui/qkeyevent_wrapper.cpp.o -c /opt/build/pyside-qt4.8+1.2.1/PySide/QtGui/PySide/QtGui/qkeyevent_wrapper.cpp
/opt/build/pyside-qt4.8+1.2.1/PySide/QtGui/PySide/QtGui/qkeyevent_wrapper.cpp: In function 'PyObject* Sbk_QKeyEvent_get_autor(PyObject*, void*)':
/opt/build/pyside-qt4.8+1.2.1/PySide/QtGui/PySide/QtGui/qkeyevent_wrapper.cpp:686: error: attempt to take address of bit-field structure member 'QKeyEvent::autor'
/opt/build/pyside-qt4.8+1.2.1/PySide/QtGui/PySide/QtGui/qkeyevent_wrapper.cpp: In function 'int Sbk_QKeyEvent_set_autor(PyObject*, PyObject*, void*)':
/opt/build/pyside-qt4.8+1.2.1/PySide/QtGui/PySide/QtGui/qkeyevent_wrapper.cpp:706: error: attempt to take address of bit-field structure member 'QKeyEvent::autor'
gmake[2]: *** [PySide/QtGui/CMakeFiles/QtGui.dir/PySide/QtGui/qkeyevent_wrapper.cpp.o] Error 1
gmake[2]: Leaving directory `/opt/build/pyside-qt4.8+1.2.1'
@Looking at PySide/QtGui/PySide/QtGui/qkeyevent_wrapper.cpp, the problematic section is:
@
static PyObject* Sbk_QKeyEvent_get_autor(PyObject* self, void*)
{
::QKeyEvent* cppSelf = 0;
SBK_UNUSED(cppSelf)
if (!Shiboken::Object::isValid(self))
return 0;
cppSelf = ((::QKeyEvent*)Shiboken::Conversions::cppPointer(SbkPySide_QtGuiTy
pes[SBK_QKEYEVENT_IDX], (SbkObject*)self));
PyObject* pyOut = Shiboken::Conversions::copyToPython(Shiboken::Conversions:
:PrimitiveTypeConverter<uint>(), &cppSelf->autor);
return pyOut;
}
@The problem is &cppSelf->autor. Taking the address of a bit-field is not allowed. Looking at this same file on Solaris, HP-UX, and Linux shows the function as:
@
static PyObject* Sbk_QKeyEvent_get_autor(PyObject* self, void*)
{
::QKeyEvent* cppSelf = 0;
SBK_UNUSED(cppSelf)
if (!Shiboken::Object::isValid(self))
return 0;
cppSelf = ((::QKeyEvent*)Shiboken::Conversions::cppPointer(SbkPySide_QtGuiTypes[SBK_QKEYEVENT_IDX], (SbkObject*)self));
uint cppOut_local = cppSelf->autor;
PyObject* pyOut = Shiboken::Conversions::copyToPython(Shiboken::Conversions::PrimitiveTypeConverter<uint>(), &cppOut_local);
return pyOut;
}
@Note the assingment of cppSelf->autor to cppOut_local. So, it seems like shiboken generated something different for !AIX platforms. Any idea why this is the case and how to get the shiboken behavior on AIX to match that on Linux?
-
Issue resolved. I posted a "patch":":http://lists.qt-project.org/pipermail/pyside/2014-April/002013.html on the pyside mailing list.