From b7edc017b062662a89d089e8891885f42c09c793 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 22 Jul 2020 15:53:16 +0000 Subject: [PATCH] Add support for SIP v5 to the build system --- cmake/FindPyQt5.py | 40 ++++++++++++++++++++++------------------ cmake/FindSIP.cmake | 8 ++++++-- cmake/FindSIP.py | 40 +++++++++++++++++++++++++++------------- cmake/SIPMacros.cmake | 6 ++++++ python/CMakeLists.txt | 6 ++++++ 5 files changed, 67 insertions(+), 33 deletions(-) diff --git a/cmake/FindPyQt5.py b/cmake/FindPyQt5.py index b37f8a67acd9..8fac78dde9dc 100644 --- a/cmake/FindPyQt5.py +++ b/cmake/FindPyQt5.py @@ -30,14 +30,13 @@ # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. -try: - import PyQt5.pyqtconfig +import os.path +import PyQt5.QtCore - pyqtcfg = PyQt5.pyqtconfig.Configuration() +try: + __import__('sipbuild') except ImportError: - import PyQt5.QtCore import sipconfig # won't work for SIP v5 - import os.path import sys cfg = sipconfig.Configuration() @@ -53,35 +52,40 @@ sip_dir = p break cfg = { - 'pyqt_version': PyQt5.QtCore.PYQT_VERSION, - 'pyqt_version_str': PyQt5.QtCore.PYQT_VERSION_STR, - 'pyqt_sip_flags': PyQt5.QtCore.PYQT_CONFIGURATION['sip_flags'], 'pyqt_mod_dir': os.path.join(cfg.default_mod_dir, "PyQt5"), 'pyqt_sip_dir': sip_dir, 'pyqt_bin_dir': cfg.default_bin_dir, } - pyqtcfg = sipconfig.Configuration([cfg]) +else: # Code for SIP v5 + from distutils.sysconfig import get_python_lib + import shutil + cfg = { + 'pyqt_mod_dir': os.path.dirname(PyQt5.__file__), + 'pyqt_sip_dir': os.path.join(get_python_lib(plat_specific=1), "PyQt5", "bindings"), + 'pyqt_bin_dir': os.path.dirname(shutil.which("pyuic5")), + } -print("pyqt_version:%06.0x" % pyqtcfg.pyqt_version) -print("pyqt_version_num:%d" % pyqtcfg.pyqt_version) -print("pyqt_version_str:%s" % pyqtcfg.pyqt_version_str) +print("pyqt_version:%06.0x" % PyQt5.QtCore.PYQT_VERSION) +print("pyqt_version_num:%d" % PyQt5.QtCore.PYQT_VERSION) +print("pyqt_version_str:%s" % PyQt5.QtCore.PYQT_VERSION_STR) pyqt_version_tag = "" in_t = False -for item in pyqtcfg.pyqt_sip_flags.split(' '): +pyqt_config_list = PyQt5.QtCore.PYQT_CONFIGURATION["sip_flags"].split(' ') +for item in pyqt_config_list: if item == "-t": in_t = True elif in_t: - if item.startswith("Qt_4"): + if item.startswith("Qt_5"): pyqt_version_tag = item else: in_t = False print("pyqt_version_tag:%s" % pyqt_version_tag) -print("pyqt_mod_dir:%s" % pyqtcfg.pyqt_mod_dir) -print("pyqt_sip_dir:%s" % pyqtcfg.pyqt_sip_dir) -print("pyqt_sip_flags:%s" % pyqtcfg.pyqt_sip_flags) -print("pyqt_bin_dir:%s" % pyqtcfg.pyqt_bin_dir) +print("pyqt_mod_dir:%s" % cfg['pyqt_mod_dir']) +print("pyqt_sip_dir:%s" % cfg['pyqt_sip_dir']) +print("pyqt_sip_flags:%s" % PyQt5.QtCore.PYQT_CONFIGURATION['sip_flags']) +print("pyqt_bin_dir:%s" % cfg['pyqt_bin_dir']) try: import PyQt5.sip diff --git a/cmake/FindSIP.cmake b/cmake/FindSIP.cmake index 8ad24b66d999..35eb9e55f8bd 100644 --- a/cmake/FindSIP.cmake +++ b/cmake/FindSIP.cmake @@ -40,8 +40,12 @@ ELSE(SIP_VERSION) STRING(REGEX REPLACE ".*\nsip_version_str:([^\n]+).*$" "\\1" SIP_VERSION_STR ${sip_config}) STRING(REGEX REPLACE ".*\nsip_bin:([^\n]+).*$" "\\1" SIP_BINARY_PATH ${sip_config}) STRING(REGEX REPLACE ".*\ndefault_sip_dir:([^\n]+).*$" "\\1" SIP_DEFAULT_SIP_DIR ${sip_config}) - STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config}) - STRING(REGEX REPLACE ".*\nsip_module_dir:([^\n]+).*$" "\\1" SIP_MODULE_DIR ${sip_config}) + IF(${SIP_VERSION_STR} VERSION_LESS 5) + STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config}) + STRING(REGEX REPLACE ".*\nsip_module_dir:([^\n]+).*$" "\\1" SIP_MODULE_DIR ${sip_config}) + ELSE(${SIP_VERSION_STR} VERSION_LESS 5) + FIND_PROGRAM(SIP_MODULE_EXECUTABLE sip-module) + ENDIF(${SIP_VERSION_STR} VERSION_LESS 5) SET(SIP_FOUND TRUE) ENDIF(sip_config) diff --git a/cmake/FindSIP.py b/cmake/FindSIP.py index dd4b71cb93da..0a313c67e158 100644 --- a/cmake/FindSIP.py +++ b/cmake/FindSIP.py @@ -30,17 +30,31 @@ # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. -import sipconfig +try: + import sipbuild +except ImportError: # Code for SIP v4 + import sipconfig -sipcfg = sipconfig.Configuration() -print("sip_version:%06.0x" % sipcfg.sip_version) -print("sip_version_num:%d" % sipcfg.sip_version) -print("sip_version_str:%s" % sipcfg.sip_version_str) -print("sip_bin:%s" % sipcfg.sip_bin) -print("default_sip_dir:%s" % sipcfg.default_sip_dir) -print("sip_inc_dir:%s" % sipcfg.sip_inc_dir) -# SIP 4.19.10+ has new sipcfg.sip_module_dir -if hasattr(sipcfg, "sip_module_dir"): - print("sip_module_dir:%s" % sipcfg.sip_module_dir) -else: - print("sip_module_dir:%s" % sipcfg.sip_mod_dir) + sipcfg = sipconfig.Configuration() + print("sip_version:%06.0x" % sipcfg.sip_version) + print("sip_version_num:%d" % sipcfg.sip_version) + print("sip_version_str:%s" % sipcfg.sip_version_str) + print("sip_bin:%s" % sipcfg.sip_bin) + print("default_sip_dir:%s" % sipcfg.default_sip_dir) + print("sip_inc_dir:%s" % sipcfg.sip_inc_dir) + # SIP 4.19.10+ has new sipcfg.sip_module_dir + if hasattr(sipcfg, "sip_module_dir"): + print("sip_module_dir:%s" % sipcfg.sip_module_dir) + else: + print("sip_module_dir:%s" % sipcfg.sip_mod_dir) +else: # Code for SIP v5 + print("sip_version:%06.0x" % sipbuild.version.SIP_VERSION) + print("sip_version_num:%d" % sipbuild.version.SIP_VERSION) + print("sip_version_str:%s" % sipbuild.version.SIP_VERSION_STR) + + import shutil + print("sip_bin:%s" % shutil.which("sip5")) + + from distutils.sysconfig import get_python_lib + python_modules_dir = get_python_lib(plat_specific=1) + print("default_sip_dir:%s" % python_modules_dir) diff --git a/cmake/SIPMacros.cmake b/cmake/SIPMacros.cmake index 9814d52fb9fc..3084a4fda1b4 100644 --- a/cmake/SIPMacros.cmake +++ b/cmake/SIPMacros.cmake @@ -121,6 +121,12 @@ MACRO(GENERATE_SIP_PYTHON_MODULE_CODE MODULE_NAME MODULE_SIP SIP_FILES CPP_FILES DEPENDS ${SIP_EXTRA_FILES_DEPEND} VERBATIM ) + IF (SIP_MODULE_EXECUTABLE) + ADD_CUSTOM_COMMAND( + OUTPUT ${_sip_output_files} APPEND + COMMAND ${SIP_MODULE_EXECUTABLE} --target-dir ${CMAKE_CURRENT_BINARY_DIR}/${_module_path} --sip-h ${PYQT5_SIP_IMPORT} + ) + ENDIF (SIP_MODULE_EXECUTABLE) ADD_CUSTOM_TARGET(generate_sip_${MODULE_NAME}_cpp_files DEPENDS ${_sip_output_files}) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index ae08e14b27a5..d31d0339733a 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -85,6 +85,12 @@ INCLUDE_DIRECTORIES(SYSTEM ${SPATIALINDEX_INCLUDE_DIR} ) +IF (${SIP_VERSION_STR} VERSION_LESS 5) + INCLUDE_DIRECTORIES(SYSTEM + ${SIP_INCLUDE_DIR} + ) +ENDIF (${SIP_VERSION_STR} VERSION_LESS 5) + IF (WITH_GUI) INCLUDE_DIRECTORIES(SYSTEM ${QSCINTILLA_INCLUDE_DIR}