[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