Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 44 additions & 9 deletions cmake/sip_configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -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])
Expand All @@ -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)
Expand All @@ -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
Expand Down