[PyQt] build fails for PyQt5 v5.6 in strange way

Phil Thompson phil at riverbankcomputing.com
Mon Jul 4 09:28:45 BST 2016


On 4 Jul 2016, at 8:45 am, Hans-Peter Jansen <hpj at urpla.net> wrote:
> 
> On Sonntag, 3. Juli 2016 22:27:50 Phil Thompson wrote:
>> On 2 Jul 2016, at 3:58 pm, Hans-Peter Jansen <hpj at urpla.net> wrote:
>>> Hello Phil,
>>> 
>>> an attempt to update the openSUSE PyQt5 build to version 5.6 fails in some
>>> strange way:
>>> 
>>> $ python3 configure.py --verbose --confirm-license --qsci-api -u --qmake
>>> /usr/lib64/qt5/bin/qmake -c -j 10 --dbus /usr/include/dbus-1.0
>>> LIBDIR_QT=/usr/lib64 STRIP="" MOC=/usr/bin/moc LIBS_OPENGL="" LIBS_X11=""
>>> LIBS_THREAD="" QMAKE_CFLAGS+="${CFLAGS} ${CPPFLAGS}"
>>> QMAKE_CXXFLAGS+="${CXXFLAGS} ${CPPFLAGS}" QMAKE_LFLAGS+="${LDFLAGS}"
>>> [...]
>>> Qt v5.6.1 (Open Source) is being used.
>>> The qmake executable is /usr/lib64/qt5/bin/qmake.
>>> Qt is built as a shared library.
>>> SIP 4.18 is being used.
>>> The sip executable is /usr/bin/sip.
>>> These PyQt5 modules will be built: QtCore, QtGui, QtMultimedia,
>>> QtMultimediaWidgets, QtNetwork, QtOpenGL, QtPrintSupport, QtQml, QtQuick,
>>> QtSql, QtSvg, QtTest, QtWebKit, QtWebKitWidgets, QtWidgets, QtXml, QtDBus,
>>> _QOpenGLFunctions_2_0, _QOpenGLFunctions_2_1, _QOpenGLFunctions_4_1_Core,
>>> QtSensors, QtX11Extras, QtBluetooth, QtPositioning, QtQuickWidgets,
>>> QtWebSockets, QtWebChannel, QtWebEngineWidgets, QtLocation, QtNfc,
>>> QtWebEngineCore.
>>> The PyQt5 Python package will be installed in
>>> /usr/lib64/python3.4/site-packages.
>>> PyQt5 is being built with generated docstrings.
>>> PyQt5 is being built with 'protected' redefined as 'public'.
>>> The Designer plugin will be installed in /usr/lib64/qt5/plugins/designer.
>>> The qmlscene plugin will be installed in /usr/lib64/qt5/plugins/PyQt5.
>>> The QScintilla API file will be installed in
>>> /usr/share/qt5/qsci/api/python. The dbus support module will be installed
>>> in
>>> /usr/lib/python3.4/site-packages/dbus/mainloop.
>>> The PyQt5 .sip files will be installed in /usr/share/sip/PyQt5.
>>> pyuic5, pyrcc5 and pylupdate5 will be installed in /usr/bin.
>>> The interpreter used by pyuic5 is /usr/bin/python3.
>>> Generating the C++ source for the QtCore module...
>>> /usr/bin/sip -w -f -t WS_X11 -t Qt_5_6_1 -B Qt_6_0_0 -o -P -j 10 -a
>>> QtCore.api -c
>>> /home/hp/src/obs/home:frispete:PyQt5/python3-qt5/PyQt5_gpl-5.6/QtCore -I
>>> sip -I /home/hp/src/obs/home:frispete:PyQt5/python3-qt5/PyQt5_gpl-5.6/sip
>>> /home/hp/src/obs/home:frispete:PyQt5/python3-qt5/PyQt5_gpl-5.6/sip/QtCore
>>> /QtCoremod.sip sip: Deprecation warning: the -T flag is ignored and
>>> deprecated
>>> Error: Unable to create the C++ code.
>>> 
>>> Any idea, what's going wrong here?
>>> 
>>> An strace revealed, that sip tries to access QtCore/sipAPIQtCore.h, but
>>> QtCore is an empty directory.
>> 
>> The -f flag to sip means the warning about the -T flag is treated as an
>> error. However, from the above, I can't see how the -T flag is being set.
> 
> Ahh, the openSUSE sip module carried this patch in order to avoid churn in the 
> build system:
> --- sipgen/main.c
> +++ sipgen/main.c
> @@ -78,7 +78,7 @@
>     kwArgs = NoKwArgs;
>     protHack = FALSE;
>     docs = FALSE;
> -    timestamp = TRUE;
> +    timestamp = FALSE;
> 
>     /* Parse the command line. */
>     optnr = 1;
> 
> Now, that you officially deprecated the timestamp option, and test explicitly for 
> truth, that patch in counteracting your endeavour. IOW, the package maintainer, 
> that updated to sip 4.18 didn't hear the bells ringing...
> 
> Fixed, thanks.
> 
> While at it, there's another issue related to the PyQt5 dbus module:
> 
> $ pkg-config --cflags-only-I --libs dbus-1
> -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include -ldbus-1
> 
> In order to build this module successfully, both includes must be provided, but 
> the auto detection code reduces this list to the first include, resulting in a 
> build failure. 
> 
> Here's a minimum invasive patch, that I've applied. It should cover all intends 
> without suffering from the mentioned issue:
> 
> --- PyQt5_gpl-5.6/configure.py.orig     2016-04-24 12:55:08.000000000 +0200
> +++ PyQt5_gpl-5.6/configure.py  2016-07-04 09:05:08.656670560 +0200
> @@ -2131,22 +2131,15 @@ def check_dbus(target_config, verbose):
> 
>     target_config.pydbus_module_dir = dbus.mainloop.__path__[0]
> 
> -    # Try and find dbus-python.h.  We don't use pkg-config because it is broken
> +    # Try and find dbus-python.h.  We don't rely on pkg-config because it is broken
>     # for dbus-python (at least for versions up to and including v0.81.0).
>     # Instead we look where DBus itself is installed - which in most cases will
>     # be where dbus-python is also installed.
>     if target_config.pydbus_inc_dir != '':
> -        dlist = [target_config.pydbus_inc_dir]
> -    else:
> -        dlist = target_config.dbus_inc_dirs
> -
> -    target_config.dbus_inc_dirs = []
> +        target_config.dbus_inc_dirs.append(target_config.pydbus_inc_dir)
> 
> -    for d in dlist:
> +    for d in target_config.dbus_inc_dirs:
>         if os.access(os.path.join(d, 'dbus', 'dbus-python.h'), os.F_OK):
> -            if d not in target_config.dbus_inc_dirs:
> -                target_config.dbus_inc_dirs.append(d)
> -
>             break
>     else:
>         inform(

This has already been changed in the current snapshot.

Phil


More information about the PyQt mailing list