From https://github.com/frescobaldi/python-poppler-qt5/pull/41/commits/4ee58b6ee02772db915fdc5e70e336e0e5b2f34c --- project.py.orig 2020-10-11 18:59:42 UTC +++ project.py @@ -0,0 +1,89 @@ +"""The build configuration file for Python-Poppler-Qt5, used by sip.""" + +from os.path import join +import re +import subprocess +from pyqtbuild import PyQtBindings, PyQtProject +from sipbuild import Option +import PyQt5 + + +class PythonPopplerQt5(PyQtProject): + """The Project class.""" + + def __init__(self): + super().__init__() + self.bindings_factories = [PopplerQt5Bindings] + + def update(self, tool): + """Allows SIP to find PyQt5 .sip files.""" + super().update(tool) + self.sip_include_dirs.append(join(PyQt5.__path__[0], 'bindings')) + + +class PopplerQt5Bindings(PyQtBindings): + """The Poppler-Qt5 Bindings class.""" + + def __init__(self, project): + super().__init__(project, name='Poppler-Qt5', + sip_file='poppler-qt5.sip', + qmake_QT=['xml']) + + def get_options(self): + """Our custom options that a user can pass to sip-build.""" + options = super().get_options() + options.append( + Option('poppler_version', + help='version of the poppler library', + metavar='VERSION')) + return options + + @staticmethod + def run_pkg_config(option): + output = subprocess.check_output( + ['pkg-config', option, 'poppler-qt5'], + text=True) + return output.rstrip() + + def apply_user_defaults(self, tool): + # Set include_dirs, library_dirs and libraries based on pkg-config data + cflags = self.run_pkg_config('--cflags-only-I').split() + libs = self.run_pkg_config('--libs').split() + self.include_dirs.extend( + flag[2:] for flag in cflags if flag.startswith('-I')) + self.library_dirs.extend( + flag[2:] for flag in libs if flag.startswith('-L')) + self.libraries.extend( + flag[2:] for flag in libs if flag.startswith('-l')) + + # Generate version.sip file + if self.poppler_version is not None: + poppler_qt5_version = self.poppler_version + else: + poppler_qt5_version = self.run_pkg_config('--modversion') + poppler_qt5_version = tuple(map(int, poppler_qt5_version.split('.'))) + python_poppler_qt5_version = self.project.version_str.split('.') + format_dict = { + 'vlen': 'i' * len(python_poppler_qt5_version), + 'vargs': ', '.join(python_poppler_qt5_version), + 'pvlen': 'i' * len(poppler_qt5_version), + 'pvargs': ', '.join(map(str, poppler_qt5_version)), + } + with open('version.sip.in') as template_file: + version_sip_template = template_file.read() + with open('version.sip', 'w') as version_file: + version_file.write(version_sip_template.format(**format_dict)) + + # Add Poppler version tag + if poppler_qt5_version: + with open('timeline.sip') as timeline_file: + timeline = timeline_file.read() + for match in re.finditer(r'POPPLER_V(\d+)_(\d+)_(\d+)', timeline): + if poppler_qt5_version < tuple(map(int, match.group(1, 2, 3))): + break + tag = match.group() + else: + tag = 'POPPLER_V0_20_0' + self.tags.append(tag) + self.tags.append("WS_X11") + super().apply_user_defaults(tool)