Skip to content

Commit ff9f283

Browse files
committedNov 30, 2022
Assorted fixes towards PyQt6 support
1 parent 53715c3 commit ff9f283

15 files changed

+104
-58
lines changed
 

‎CMakeLists.txt

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -356,9 +356,6 @@ if(WITH_CORE)
356356
find_package(GDAL)
357357
find_package(Expat REQUIRED)
358358
find_package(Spatialindex REQUIRED)
359-
if (WITH_GUI)
360-
find_package(Qwt REQUIRED)
361-
endif()
362359
find_package(LibZip REQUIRED)
363360

364361
find_package(Sqlite3)
@@ -445,9 +442,13 @@ if(WITH_CORE)
445442
if (BUILD_WITH_QT6)
446443
set(QT_MIN_VERSION 6.0.0)
447444
set(QT_VERSION_BASE "Qt6")
445+
set(QT_VERSION_BASE_LOWER "qt6")
446+
set(CMAKE_CXX_STANDARD 17)
447+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
448448
else()
449449
set(QT_MIN_VERSION 5.14.0)
450450
set(QT_VERSION_BASE "Qt5")
451+
set(QT_VERSION_BASE_LOWER "qt5")
451452
set(HAS_KDE_QT5_PDF_TRANSFORM_FIX FALSE CACHE BOOL "Using KDE's Qt 5.15 fork with the PDF brush transform fix")
452453
set(HAS_KDE_QT5_SMALL_CAPS_FIX FALSE CACHE BOOL "Using KDE's Qt 5.15 fork with the QFont::SmallCaps fix")
453454
set(HAS_KDE_QT5_FONT_STRETCH_FIX FALSE CACHE BOOL "Using KDE's Qt 5.15 fork with the QFont stretch fix")
@@ -507,6 +508,7 @@ if(WITH_CORE)
507508
# search for QScintilla2 (C++ lib)
508509
if (WITH_GUI)
509510
find_package(QScintilla REQUIRED)
511+
find_package(Qwt REQUIRED)
510512
endif()
511513

512514
# Password helper
@@ -968,15 +970,29 @@ message("-- Found Python executable: ${Python_EXECUTABLE} (version ${Python_VERS
968970
message("-- Python library: ${Python_LIBRARIES}")
969971
message("-- Python site-packages: ${Python_SITEARCH}")
970972

971-
if (WITH_CORE AND WITH_BINDINGS AND NOT BUILD_WITH_QT6)
973+
if (WITH_CORE AND WITH_BINDINGS)
972974
set(PYTHON_OUTPUT_DIRECTORY ${QGIS_OUTPUT_DIRECTORY}/python)
973975
set (QGIS_PYTHON_OUTPUT_DIRECTORY ${PYTHON_OUTPUT_DIRECTORY}/qgis)
974976

975977
# python support: check for interpreter, sip, pyqt5
976978
find_package(SIP REQUIRED)
977-
find_package(PyQt5 REQUIRED)
978-
set(PYQT_SIP_FLAGS ${PYQT5_SIP_FLAGS})
979-
set(PYQT_SIP_DIR ${PYQT5_SIP_DIR})
979+
if(BUILD_WITH_QT6)
980+
find_package(PyQt6 REQUIRED)
981+
set(PYQT_FOUND ${PYQT6_FOUND})
982+
set(PYQT_SIP_FLAGS ${PYQT6_SIP_FLAGS})
983+
set(PYQT_SIP_DIR ${PYQT6_SIP_DIR})
984+
set(PYQT_SIP_IMPORT ${PYQT6_SIP_IMPORT})
985+
set(PYQT_VERSION_STR ${PYQT6_VERSION_STR})
986+
set(PYQT_MOD_DIR ${PYQT6_MOD_DIR})
987+
else()
988+
find_package(PyQt5 REQUIRED)
989+
set(PYQT_FOUND ${PYQT5_FOUND})
990+
set(PYQT_SIP_FLAGS ${PYQT5_SIP_FLAGS})
991+
set(PYQT_SIP_DIR ${PYQT5_SIP_DIR})
992+
set(PYQT_SIP_IMPORT ${PYQT5_SIP_IMPORT})
993+
set(PYQT_VERSION_STR ${PYQT5_VERSION_STR})
994+
set(PYQT_MOD_DIR ${PYQT5_MOD_DIR})
995+
endif()
980996
separate_arguments(PYQT_SIP_FLAGS) # convert space separated values to a list
981997

982998
find_package(Qsci REQUIRED)
@@ -992,7 +1008,7 @@ if (WITH_CORE AND WITH_BINDINGS AND NOT BUILD_WITH_QT6)
9921008
endif()
9931009

9941010
if (WITH_CUSTOM_WIDGETS)
995-
set(PYUIC_WIDGET_PLUGIN_DIRECTORY ${PYQT5_MOD_DIR}/uic/widget-plugins/)
1011+
set(PYUIC_WIDGET_PLUGIN_DIRECTORY ${PYQT_MOD_DIR}/uic/widget-plugins/)
9961012
endif()
9971013
endif()
9981014

‎cmake/FindQCA.cmake

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ if(QCA_INCLUDE_DIR AND QCA_LIBRARY)
2020

2121
else(QCA_INCLUDE_DIR AND QCA_LIBRARY)
2222

23-
set(QCA_LIBRARY_NAMES qca-qt5 qca2-qt5 qca-qt6 qca)
23+
set(QCA_LIBRARY_NAMES qca-${QT_VERSION_BASE_LOWER} qca2-${QT_VERSION_BASE_LOWER} qca)
24+
set(QCA_PATH_SUFFIXES ${QT_VERSION_BASE_LOWER}/QtCrypto Qca-${QT_VERSION_BASE_LOWER}/QtCrypto qt/Qca-${QT_VERSION_BASE_LOWER}/QtCrypto ${QT_VERSION_BASE_LOWER}/Qca-${QT_VERSION_BASE_LOWER}/QtCrypto QtCrypto)
2425

2526
find_library(QCA_LIBRARY
2627
NAMES ${QCA_LIBRARY_NAMES}
@@ -45,7 +46,7 @@ else(QCA_INCLUDE_DIR AND QCA_LIBRARY)
4546
"$ENV{LIB_DIR}/include"
4647
$ENV{INCLUDE}
4748
/usr/local/include
48-
PATH_SUFFIXES QtCrypto qt5/QtCrypto Qca-qt5/QtCrypto qt/Qca-qt5/QtCrypto qt5/Qca-qt5/QtCrypto Qca-qt6/QtCrypto
49+
PATH_SUFFIXES ${QCA_PATH_SUFFIXES}
4950
)
5051

5152
if(QCA_LIBRARY AND QCA_INCLUDE_DIR)

‎cmake/FindQScintilla.cmake

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ IF(QSCINTILLA_VERSION_STR)
2525
ELSE(QSCINTILLA_VERSION_STR)
2626

2727
set(QSCINTILLA_LIBRARY_NAMES
28-
qscintilla2-qt5
29-
qscintilla2_qt5
30-
libqt5scintilla2
31-
libqscintilla2-qt5
32-
qt5scintilla2
33-
libqscintilla2-qt5.dylib
28+
qscintilla2-${QT_VERSION_BASE_LOWER}
29+
qscintilla2_${QT_VERSION_BASE_LOWER}
30+
lib${QT_VERSION_BASE_LOWER}scintilla2
31+
libqscintilla2-${QT_VERSION_BASE_LOWER}
32+
${QT_VERSION_BASE_LOWER}scintilla2
33+
libqscintilla2-${QT_VERSION_BASE_LOWER}.dylib
3434
qscintilla2
3535
)
3636

@@ -40,7 +40,7 @@ ELSE(QSCINTILLA_VERSION_STR)
4040
"${QT_LIBRARY_DIR}"
4141
$ENV{LIB_DIR}/lib
4242
/usr/local/lib
43-
/usr/local/lib/qt5
43+
/usr/local/lib/${QT_VERSION_BASE_LOWER}
4444
/usr/lib
4545
)
4646

@@ -53,7 +53,7 @@ ELSE(QSCINTILLA_VERSION_STR)
5353
NAMES Qsci/qsciglobal.h
5454
PATHS
5555
"${_qsci_fw}/Headers"
56-
${Qt5Core_INCLUDE_DIRS}
56+
${${QT_VERSION_BASE}Core_INCLUDE_DIRS}
5757
"${QT_INCLUDE_DIR}"
5858
$ENV{LIB_DIR}/include
5959
/usr/local/include

‎cmake/FindQsci.cmake

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ ELSE(QSCI_MOD_VERSION_STR)
2929
FILE(READ ${_qsci_metadata} _qsci_metadata_contents)
3030
STRING(REGEX REPLACE ".*\nVersion: ([^\n]+).*$" "\\1" QSCI_MOD_VERSION_STR ${_qsci_metadata_contents})
3131
ELSE(_qsci_metadata)
32-
EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} -c "from PyQt5.Qsci import QSCINTILLA_VERSION_STR; print(QSCINTILLA_VERSION_STR)" OUTPUT_VARIABLE QSCI_MOD_VERSION_STR)
32+
EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} -c "from Py${QT_VERSION_BASE}.Qsci import QSCINTILLA_VERSION_STR; print(QSCINTILLA_VERSION_STR)" OUTPUT_VARIABLE QSCI_MOD_VERSION_STR)
3333
ENDIF(_qsci_metadata)
3434

3535
IF(QSCI_MOD_VERSION_STR)
36-
SET(QSCI_SIP_DIR "${PYQT5_SIP_DIR}")
36+
SET(QSCI_SIP_DIR "${PYQT_SIP_DIR}")
3737
SET(QSCI_FOUND TRUE)
3838
ENDIF(QSCI_MOD_VERSION_STR)
3939

@@ -46,11 +46,17 @@ ELSE(QSCI_MOD_VERSION_STR)
4646

4747
EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} ${_find_qsci_py} ${QSCI_VER} OUTPUT_VARIABLE qsci_ver)
4848

49+
IF(BUILD_WITH_QT6)
50+
SET(QSCI_SIP_MOD_NAME Qsci/qscimod6.sip)
51+
ELSE()
52+
SET(QSCI_SIP_MOD_NAME Qsci/qscimod5.sip)
53+
ENDIF()
54+
4955
IF(qsci_ver)
5056
STRING(REGEX REPLACE "^qsci_version_str:([^\n]+).*$" "\\1" QSCI_MOD_VERSION_STR ${qsci_ver})
5157
FIND_PATH(QSCI_SIP_DIR
52-
NAMES Qsci/qscimod5.sip
53-
PATHS ${PYQT5_SIP_DIR} ${SIP_DEFAULT_SIP_DIR}
58+
NAMES ${QSCI_SIP_MOD_NAME}
59+
PATHS ${PYQT_SIP_DIR} ${SIP_DEFAULT_SIP_DIR}
5460
)
5561
SET(QSCI_FOUND TRUE)
5662
ENDIF(qsci_ver)

‎cmake/FindQsci.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,12 @@
4141
if sys.argv[1] == "4":
4242
from PyQt4.Qsci import QSCINTILLA_VERSION_STR
4343
VER = QSCINTILLA_VERSION_STR
44-
else:
44+
if sys.argv[1] == "5":
4545
from PyQt5.Qsci import QSCINTILLA_VERSION_STR
4646
VER = QSCINTILLA_VERSION_STR
47+
else:
48+
from PyQt6.Qsci import QSCINTILLA_VERSION_STR
49+
VER = QSCINTILLA_VERSION_STR
4750
else:
4851
try:
4952
from PyQt4.Qsci import QSCINTILLA_VERSION_STR
@@ -53,6 +56,10 @@
5356
from PyQt5.Qsci import QSCINTILLA_VERSION_STR
5457
VER = QSCINTILLA_VERSION_STR
5558
except ImportError:
56-
pass
59+
try:
60+
from PyQt6.Qsci import QSCINTILLA_VERSION_STR
61+
VER = QSCINTILLA_VERSION_STR
62+
except ImportError:
63+
pass
5764

5865
print("qsci_version_str:%s" % VER)

‎cmake/FindQtKeychain.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ FIND_PATH(QTKEYCHAIN_INCLUDE_DIR keychain.h
2121
$ENV{INCLUDE}
2222
/usr/local/include
2323
/usr/include
24-
PATH_SUFFIXES qt5keychain qtkeychain qt6keychain
24+
PATH_SUFFIXES ${QT_VERSION_BASE_LOWER}keychain qtkeychain
2525
)
2626

27-
FIND_LIBRARY(QTKEYCHAIN_LIBRARY NAMES qt5keychain qtkeychain qt6keychain
27+
FIND_LIBRARY(QTKEYCHAIN_LIBRARY NAMES ${QT_VERSION_BASE_LOWER}keychain qtkeychain
2828
PATHS
2929
${LIB_DIR}
3030
"$ENV{LIB_DIR}"

‎cmake/FindQwt.cmake

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@
1212
#
1313

1414

15-
set(QWT_LIBRARY_NAMES qwt-qt5 qwt6-qt5 qwt qwt6)
15+
set(QWT_LIBRARY_NAMES qwt-${QT_VERSION_BASE_LOWER} qwt)
1616

1717
find_library(QWT_LIBRARY
1818
NAMES ${QWT_LIBRARY_NAMES}
1919
PATHS
2020
/usr/lib
2121
/usr/local/lib
22-
/usr/local/lib/qt5
22+
/usr/local/lib/${QT_VERSION_BASE_LOWER}
2323
"$ENV{LIB_DIR}/lib"
2424
"$ENV{LIB}"
2525
)
@@ -32,12 +32,12 @@ endif()
3232
FIND_PATH(QWT_INCLUDE_DIR NAMES qwt.h PATHS
3333
"${_qwt_fw}/Headers"
3434
/usr/include
35-
/usr/include/qt5
35+
/usr/include/${QT_VERSION_BASE_LOWER}
3636
/usr/local/include
37-
/usr/local/include/qt5
37+
/usr/local/include/${QT_VERSION_BASE_LOWER}
3838
"$ENV{LIB_DIR}/include"
3939
"$ENV{INCLUDE}"
40-
PATH_SUFFIXES qwt-qt5 qwt qwt6 qt5/qwt
40+
PATH_SUFFIXES qwt-${QT_VERSION_BASE_LOWER} ${QT_VERSION_BASE_LOWER}/qwt qwt
4141
)
4242

4343
IF (QWT_INCLUDE_DIR AND QWT_LIBRARY)

‎cmake/PyQtMacros.cmake

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,14 @@
44
# Redistribution and use is allowed according to the terms of the BSD license.
55
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
66

7-
SET(PYUIC_PROG_NAME pyuic5)
8-
SET(PYUIC_PROG_NAMES pyuic5)
9-
SET(PYRCC_PROG_NAME pyrcc5)
7+
IF(BUILD_WITH_QT6)
8+
SET(PYUIC_PROG_NAME pyuic6)
9+
SET(PYUIC_PROG_NAMES pyuic6)
10+
ELSE()
11+
SET(PYUIC_PROG_NAME pyuic5)
12+
SET(PYUIC_PROG_NAMES pyuic5)
13+
SET(PYRCC_PROG_NAME pyrcc5)
14+
ENDIF()
1015

1116
IF(NOT PYUIC_PROGRAM)
1217
FIND_PROGRAM(PYUIC_PROGRAM NAMES ${PYUIC_PROG_NAMES} PATHS $ENV{LIB_DIR}/bin)
@@ -50,12 +55,12 @@ MACRO(PYQT_WRAP_UI outfiles )
5055
ENDFOREACH(it)
5156
ENDMACRO(PYQT_WRAP_UI)
5257

53-
IF(NOT PYRCC_PROGRAM)
58+
IF(NOT PYRCC_PROGRAM AND NOT BUILD_WITH_QT6)
5459
FIND_PROGRAM(PYRCC_PROGRAM NAMES ${PYRCC_PROG_NAME} PATHS $ENV{LIB_DIR}/bin)
5560
IF (NOT PYRCC_PROGRAM)
5661
MESSAGE(FATAL_ERROR "pyrcc5 not found - aborting")
5762
ENDIF (NOT PYRCC_PROGRAM)
58-
ENDIF(NOT PYRCC_PROGRAM)
63+
ENDIF(NOT PYRCC_PROGRAM AND NOT BUILD_WITH_QT6)
5964

6065
# Adapted from QT4_ADD_RESOURCES
6166
MACRO (PYQT_ADD_RESOURCES outfiles )
@@ -77,10 +82,17 @@ MACRO (PYQT_ADD_RESOURCES outfiles )
7782
ENDIF(NOT _ABS_PATH_INDICATOR)
7883
SET(_RC_DEPENDS ${_RC_DEPENDS} "${_RC_FILE}")
7984
ENDFOREACH(_RC_FILE)
80-
ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
81-
COMMAND ${PYRCC_PROGRAM} ${_name_opt} -o ${outfile} ${infile}
82-
MAIN_DEPENDENCY ${infile}
83-
DEPENDS ${_RC_DEPENDS})
85+
IF (BUILD_WITH_QT6)
86+
ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
87+
COMMAND Qt6::rcc -g python -o ${outfile} ${infile}
88+
MAIN_DEPENDENCY ${infile}
89+
DEPENDS ${_RC_DEPENDS})
90+
ELSE()
91+
ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
92+
COMMAND ${PYRCC_PROGRAM} ${_name_opt} -o ${outfile} ${infile}
93+
MAIN_DEPENDENCY ${infile}
94+
DEPENDS ${_RC_DEPENDS})
95+
ENDIF()
8496
SET(${outfiles} ${${outfiles}} ${outfile})
8597
ENDFOREACH (it)
8698
ENDMACRO (PYQT_ADD_RESOURCES)

‎cmake/QCAMacros.cmake

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212

1313
function(FIND_QCAOSSL_PLUGIN_CPP PLUGIN_REQUIRED)
1414

15-
FIND_PACKAGE(Qt5Core QUIET)
15+
FIND_PACKAGE(${QT_VERSION_BASE}Core QUIET)
1616
# requires Qt and QCA packages to be found
17-
if(Qt5Core_INCLUDE_DIRS AND Qt5Core_LIBRARIES
17+
if(${QT_VERSION_BASE}Core_INCLUDE_DIRS AND ${QT_VERSION_BASE}Core_LIBRARIES
1818
AND QCA_INCLUDE_DIR AND QCA_LIBRARY
1919
AND NOT CMAKE_CROSSCOMPILING)
2020

@@ -39,8 +39,8 @@ function(FIND_QCAOSSL_PLUGIN_CPP PLUGIN_REQUIRED)
3939
set(TESTCPP "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/qcaossl.cpp")
4040
file(WRITE ${TESTCPP} "${CODE}")
4141

42-
set(QCA_INCLUDE_DIRECTORIES "-DINCLUDE_DIRECTORIES:STRING=${Qt5Core_INCLUDE_DIRS};${QCA_INCLUDE_DIR}")
43-
get_target_property(_QtCore_path Qt5::Core LOCATION)
42+
set(QCA_INCLUDE_DIRECTORIES "-DINCLUDE_DIRECTORIES:STRING=${${QT_VERSION_BASE}Core_INCLUDE_DIRS};${QCA_INCLUDE_DIR}")
43+
get_target_property(_QtCore_path ${QT_VERSION_BASE}::Core LOCATION)
4444
set(QCA_LINK_LIBRARIES "-DLINK_LIBRARIES:STRING=${_QtCore_path};${QCA_LIBRARY}")
4545

4646
IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
@@ -107,7 +107,7 @@ function(FIND_QCATOOL TOOL_REQUIRED)
107107
$ENV{OSGEO4W_ROOT}/bin
108108
)
109109
else()
110-
find_program(QCATOOL_EXECUTABLE NAMES qcatool-qt5 qcatool2 qcatool)
110+
find_program(QCATOOL_EXECUTABLE NAMES qcatool-${QT_VERSION_BASE_LOWER} qcatool2 qcatool)
111111
endif()
112112

113113
if(NOT QCATOOL_EXECUTABLE)

‎cmake/SIPMacros.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ MACRO(GENERATE_SIP_PYTHON_MODULE_CODE MODULE_NAME MODULE_SIP SIP_FILES CPP_FILES
101101
ENDIF( ${CONCAT_NUM} LESS ${SIP_CONCAT_PARTS} )
102102
ENDFOREACH(CONCAT_NUM RANGE 0 ${SIP_CONCAT_PARTS} )
103103

104-
SET(SIPCMD ${SIP_BUILD_EXECUTABLE} --no-protected-is-public --pep484-pyi --no-make --concatenate=${SIP_CONCAT_PARTS} --qmake=${QMAKE_EXECUTABLE} --include-dir=${CMAKE_CURRENT_BINARY_DIR} --include-dir=${PYQT5_SIP_DIR} ${SIP_BUILD_EXTRA_OPTIONS})
104+
SET(SIPCMD ${SIP_BUILD_EXECUTABLE} --no-protected-is-public --pep484-pyi --no-make --concatenate=${SIP_CONCAT_PARTS} --qmake=${QMAKE_EXECUTABLE} --include-dir=${CMAKE_CURRENT_BINARY_DIR} --include-dir=${PYQT_SIP_DIR} ${SIP_BUILD_EXTRA_OPTIONS})
105105

106106
ADD_CUSTOM_COMMAND(
107107
OUTPUT ${_sip_output_files}

‎i18n/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ set(TS_FILES qgis_ar.ts qgis_bg.ts qgis_bs.ts qgis_ca.ts qgis_cs.ts qgis_da.ts q
2727

2828
ADD_TRANSLATION_FILES (QM_FILES ${TS_FILES})
2929

30-
if (UNIX AND NOT APPLE AND PYQT5_FOUND)
30+
if (UNIX AND NOT APPLE AND PYQT_FOUND)
3131
add_custom_command(
3232
OUTPUT ${CMAKE_BINARY_DIR}/org.qgis.qgis.desktop ${CMAKE_BINARY_DIR}/org.qgis.qgis.appdata.xml
3333
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"

0 commit comments

Comments
 (0)
Please sign in to comment.