diff --git a/cmake/sip_configure.py b/cmake/sip_configure.py index dc2020d..df3778b 100644 --- a/cmake/sip_configure.py +++ b/cmake/sip_configure.py @@ -2,7 +2,35 @@ import re import subprocess import sys -from PyQt4 import pyqtconfig + +import sipconfig +try: + from PyQt4.pyqtconfig import Configuration +except ImportError: + # PyQt >= 4.11 has no pyqtconfig module if built with configure-ng.py + from PyQt4 import QtCore + + class Configuration(sipconfig.Configuration): + def __init__(self): + qtconfig = subprocess.check_output(['qmake-qt4', '-query'], universal_newlines=True) + qtconfig = dict(line.split(':', 1) for line in qtconfig.splitlines()) + pyqtconfig = { + 'qt_archdata_dir': qtconfig['QT_INSTALL_DATA'], + 'qt_data_dir': qtconfig['QT_INSTALL_DATA'], + 'qt_dir': qtconfig['QT_INSTALL_PREFIX'], + 'qt_inc_dir': qtconfig['QT_INSTALL_HEADERS'], + 'qt_lib_dir': qtconfig['QT_INSTALL_LIBS'], + 'qt_threaded': 1, + 'qt_version': QtCore.QT_VERSION, + 'qt_winconfig': 'shared', + } + sipconfig.Configuration.__init__(self, [pyqtconfig]) + + macros = sipconfig._default_macros.copy() + macros['INCDIR_QT'] = qtconfig['QT_INSTALL_HEADERS'] + macros['LIBDIR_QT'] = qtconfig['QT_INSTALL_LIBS'] + macros['MOC'] = 'moc-qt4' + self.set_build_macros(macros) if len(sys.argv) != 8: print('usage: %s build-dir sip-file output_dir include_dirs libs lib_dirs ldflags' % sys.argv[0]) @@ -15,12 +43,18 @@ build_file = 'pyqtscripting.sbf' # Get the PyQt configuration information. -config = pyqtconfig.Configuration() +config = Configuration() # Get the extra SIP flags needed by the imported qt module. Note that # this normally only includes those flags (-x and -t) that relate to SIP's # versioning system. -qt_sip_flags = config.pyqt_sip_flags +try: + sip_dir = config.pyqt_sip_dir + sip_flags = config.pyqt_sip_flags +except AttributeError: + # sipconfig.Configuration does not have a pyqt_sip_dir or pyqt_sip_flags attribute + sip_dir = sipconfig._pkg_config['default_sip_dir'] + '/PyQt4' + sip_flags = QtCore.PYQT_CONFIGURATION['sip_flags'] try: os.makedirs(build_dir) @@ -33,31 +67,32 @@ config.sip_bin, '-c', build_dir, '-b', os.path.join(build_dir, build_file), - '-I', config.pyqt_sip_dir, + '-I', sip_dir, '-w' ] -cmd += qt_sip_flags.split(' ') +cmd += sip_flags.split(' ') cmd.append(sip_file) subprocess.check_call(cmd) # Create the Makefile. The QtModuleMakefile class provided by the # pyqtconfig module takes care of all the extra preprocessor, compiler and # linker flags needed by the Qt library. -makefile = pyqtconfig.QtGuiModuleMakefile( +makefile = sipconfig.SIPModuleMakefile( dir=build_dir, configuration=config, - build_file=build_file + build_file=build_file, + qt=['QtCore', 'QtGui'] ) # hack to override makefile behavior which always prepend -l to libraries which is wrong for absolute paths -default_platform_lib_function = pyqtconfig.QtGuiModuleMakefile.platform_lib +default_platform_lib_function = sipconfig.SIPModuleMakefile.platform_lib def custom_platform_lib_function(self, clib, framework=0): if os.path.isabs(clib): return clib return default_platform_lib_function(self, clib, framework) -pyqtconfig.QtGuiModuleMakefile.platform_lib = custom_platform_lib_function +sipconfig.SIPModuleMakefile.platform_lib = custom_platform_lib_function # split paths on whitespace