/usr/share/python_qt_binding/cmake/sip_configure.py is in python-qt-binding 0.3.1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | from copy import copy
import os
import re
import subprocess
import sys
import sipconfig
from PyQt5 import QtCore
class Configuration(sipconfig.Configuration):
def __init__(self):
env = copy(os.environ)
env['QT_SELECT'] = '5'
qtconfig = subprocess.check_output(
['qmake', '-query'], env=env, 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-qt5'
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])
sys.exit(1)
# The SIP build folder, the SIP file, the output directory, the include directories, the libraries, the library directories and the linker flags.
build_dir, sip_file, output_dir, include_dirs, libs, lib_dirs, ldflags = sys.argv[1:]
# The name of the SIP build file generated by SIP and used by the build system.
build_file = 'pyqtscripting.sbf'
# Get the PyQt configuration information.
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.
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'] + '/PyQt5'
sip_flags = QtCore.PYQT_CONFIGURATION['sip_flags']
try:
os.makedirs(build_dir)
except OSError:
pass
# Run SIP to generate the code. Note that we tell SIP where to find the qt
# module's specification files using the -I flag.
cmd = [
config.sip_bin,
'-c', build_dir,
'-b', os.path.join(build_dir, build_file),
'-I', sip_dir,
'-w'
]
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 = sipconfig.SIPModuleMakefile(
dir=build_dir,
configuration=config,
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 = 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)
sipconfig.SIPModuleMakefile.platform_lib = custom_platform_lib_function
# split paths on whitespace
# while dealing with whitespaces within the paths if they are escaped with backslashes
def split_paths(paths):
paths = re.split('(?<=[^\\\\]) ', paths)
return paths
for include_dir in split_paths(include_dirs):
include_dir = include_dir.replace('\\', '')
makefile.extra_include_dirs.append(include_dir)
for lib in split_paths(libs):
makefile.extra_libs.append(lib)
for lib_dir in split_paths(lib_dirs):
lib_dir = lib_dir.replace('\\', '')
makefile.extra_lib_dirs.append(lib_dir)
for ldflag in ldflags.split('\\ '):
makefile.LFLAGS.append(ldflag)
# redirect location of generated library
makefile._target = '"%s"' % os.path.join(output_dir, makefile._target)
# Generate the Makefile itself
makefile.generate()
|