[PyQt] Build issues with sipconfiq

Hans-Peter Jansen hpj at urpla.net
Fri Sep 13 13:51:36 BST 2019


Am Donnerstag, 12. September 2019, 17:49:31 CEST schrieb Hans-Peter Jansen:
> 
> The build fails, because sipconfig doesn't expand some macros anymore, but
> nothing changed with sip and PyQt5 meanwhile (well, Qt was updated to
> 5.13.1):

Well, I not sure anymore, that this isn't related to some sip/PyQt5 upgrade.

What's for sure, that sipconfig.SIPModuleMakefile fails to properly expand 
$$[QT_INSTALL_LIBS]. Question is, where this came from in the first place.

Except from the generated Makefile:

LIBS = -L/home/abuild/rpmbuild/BUILD/PyQxtGlobalShortcut-0.2.3/build/
temp.linux-x86_64-2.7 -L/usr/lib64 -L/usr/X11R6/lib -lQxtGlobalShortcut -
lpython2.7 -lQt5Core -L$$[QT_INSTALL_LIBS] -lpthread -lQt5Gui -L$$
[QT_INSTALL_LIBS] $$[QT_INSTALL_LIBS]/libQt5Core.so -lpthread -lQt5Widgets -
lQt5PrintSupport -lXext -lX11 -lm -lpthread

Interestingly, Qt5Core is there already, but then it's appearing again within 
the unexpanded macros, while the other Qt5 libraries arguments are dealt with 
just fine.

sipconfig.Configuration is called with a config dict containing:

[   13s] cfg:
[   13s] {'pyqt_sip_dir': '/usr/share/sip/PyQt5',
[   13s]  'pyqt_sip_flags': '-n PyQt5.sip -t WS_X11 -t Qt_5_13_0',
[   13s]  'qt_data_dir': '/usr/share/qt5',
[   13s]  'qt_dir': '/usr',
[   13s]  'qt_edition': 'free',
[   13s]  'qt_framework': 0,
[   13s]  'qt_inc_dir': '/usr/include/qt5',
[   13s]  'qt_lib_dir': '/usr/lib64',
[   13s]  'qt_threaded': 1,
[   13s]  'qt_version': 331009,
[   13s]  'qt_winconfig': 'shared'}

which looks like all properties are set up correctly.

The QT_INSTALL_LIBS macro seems to stem from a qmake property:

[   13s] qmake_props:
[...]
[   13s]  'QT_INSTALL_LIBS': '/usr/lib64',

so it must be crept in somewhere internal to sipconfig.

With this hack appended:

with open('Makefile', 'r+') as fd:
    mf = fd.read()
    newmf = mf.replace('-L$$[QT_INSTALL_LIBS] ', '')
    newmf = newmf.replace('$$[QT_INSTALL_LIBS]/libQt5Core.so ', '')
    if mf != newmf:
        fd.seek(0)
        fd.write(newmf)

to the configure script:

https://github.com/frispete/PyQxtGlobalShortcut/blob/master/pyqxtgs/
configure.py

the build succeeds again. Hence, it looks like a sipconfig regression of some 
kind.

The fixed linking command is now:

g++ -shared -Wl,--version-script=QxtGlobalShortcut.exp -o QxtGlobalShortcut.so 
sipQxtGlobalShortcutcmodule.o sipQxtGlobalShortcutQxtGlobalShortcut.o -L/home/
abuild/rpmbuild/BUILD/PyQxtGlobalShortcut-0.2.3/build/temp.linux-x86_64-3.7 -
L/usr/lib64 -L/usr/X11R6/lib -lQxtGlobalShortcut -lpython3.7m -lQt5Core -
lpthread -lQt5Gui -lpthread -lQt5Widgets -lQt5PrintSupport -lXext -lX11 -lm -
lpthread

Apart from repeated -lpthread arguments, it's looking sane again, and working 
fine.

It would be nice to locate and fix the source of this issue properly in order 
to dispense with such gross hacks, wouldn't it?

Thanks,
Pete




More information about the PyQt mailing list