@@ -11,17 +11,33 @@ INCLUDE ("@CMAKE_SOURCE_DIR@/cmake/MacBundleMacros.cmake")
11
11
INCLUDE ("@CMAKE_SOURCE_DIR@/cmake/QCAMacros.cmake" )
12
12
13
13
# Qt framework version is major version
14
- SET (QT_FWVER @QT_VERSION_MAJOR@ )
14
+ SET (QT_FWVER "5" )
15
15
16
16
# build list of Qt frameworks to bundle
17
17
18
18
# core list, includes dependencies and used by extra plugins
19
- SET (QTLISTQG QtCore QtGui phonon QtXml QtNetwork QtSvg QtSql QtWebKit QtXmlPatterns QtDBus QtMultimedia QtOpenGL QtTest )
20
- SET (PYQTLIST Qt QtCore QtGui phonon QtXml QtNetwork QtSvg QtSql QtWebKit QtXmlPatterns QtDBus QtMultimedia QtOpenGL QtTest )
19
+ SET (QTLISTQG QtCore QtGui QtWidgets QtNetwork QtXml QtSvg QtConcurrent QtPrintSupport QtPositioning QtTest QtSql )
20
+ SET (PYQTLIST Qt QtCore QtGui QtWidgets QtNetwork QtXml QtSvg QtPrintSupport QtPositioning QtTest QtSql )
21
+
22
+ IF (@WITH_QTWEBKIT@ )
23
+ SET (QTLISTQG ${QTLISTQG} QtWebKit QtWebKitWidgets QtSensors QtQuick QtQml QtWebChannel QtMultimedia QtMultimediaWidgets QtOpenGL )
24
+ SET (PYQTLIST ${PYQTLIST} QtWebKit QtWebKitWidgets QtSensors QtQuick QtQml QtWebChannel QtMultimedia QtMultimediaWidgets QtOpenGL )
25
+ ENDIF ()
26
+
27
+ IF (@WITH_3D@ )
28
+ SET (QTLISTQG ${QTLISTQG} Qt3DCore Qt3DRender Qt3DInput Qt3DLogic Qt3DExtras QtGamepad )
29
+ SET (PYQTLIST ${PYQTLIST} Qt3DCore Qt3DRender Qt3DInput Qt3DLogic Qt3DExtras QtGamepad )
30
+ ENDIF ()
31
+
32
+ IF (@WITH_GLOBE@ )
33
+ SET (QTLISTQG ${QTLISTQG} QtOpenGL )
34
+ SET (PYQTLIST ${PYQTLIST} QtOpenGL )
35
+ ENDIF ()
21
36
22
37
# add Qsci.so, if available
23
38
IF (@QSCI_FOUND@ )
24
- SET (PYQTLIST ${PYQTLIST} Qsci )
39
+ SET (QTLISTQG ${QTLISTQG} QtMacExtras )
40
+ SET (PYQTLIST ${PYQTLIST} Qsci QtMacExtras )
25
41
ENDIF (@QSCI_FOUND@ )
26
42
27
43
MYMESSAGE ("Qt list: ${QTLISTQG} " )
@@ -30,21 +46,23 @@ MYMESSAGE ("Qt list: ${QTLISTQG}")
30
46
31
47
IF (NOT @OSX_HAVE_LOADERPATH@ )
32
48
EXECUTE_PROCESS (COMMAND ln -sfn ../Frameworks "${QAPPDIR} /" )
33
- IF (IS_DIRECTORY "${QLIBXIR } /grass/bin" )
34
- EXECUTE_PROCESS (COMMAND ln -sfn ../@QGIS_LIBEXEC_SUBDIR_REV@/@QGIS_FW_SUBDIR@ "${QLIBXDIR } /grass/Frameworks" )
49
+ IF (IS_DIRECTORY "${QLIBDIR } /grass/bin" )
50
+ EXECUTE_PROCESS (COMMAND ln -sfn ../@QGIS_LIBEXEC_SUBDIR_REV@/@QGIS_FW_SUBDIR@ "${QLIBDIR } /grass/Frameworks" )
35
51
ENDIF ()
36
52
EXECUTE_PROCESS (COMMAND ln -sfn @QGIS_CGIBIN_SUBDIR_REV@/@QGIS_LIB_SUBDIR@ "${QCGIDIR} /lib" )
37
53
ENDIF (NOT @OSX_HAVE_LOADERPATH@ )
38
54
39
55
### copy files
40
56
41
57
# Qt frameworks
58
+ # Qt5 cmake does not create overall qt prefix var, only individual lib prefixes.
59
+ # For simplicity, assume core prefix same as all others.
42
60
43
61
MESSAGE (STATUS "Copying Qt frameworks..." )
44
62
EXECUTE_PROCESS (COMMAND mkdir -p "${QFWDIR} " )
45
63
FOREACH (QFW ${QTLISTQG} )
46
64
IF (NOT IS_DIRECTORY "${QFWDIR} /${QFW} .framework" )
47
- COPY_FRAMEWORK ("@ QT_LIBRARY_DIR@ " ${QFW} "${QFWDIR} " )
65
+ COPY_FRAMEWORK ("${ QT_LIBRARY_DIR} " ${QFW} "${QFWDIR} " )
48
66
ENDIF ()
49
67
ENDFOREACH (QFW )
50
68
@@ -56,10 +74,10 @@ FOREACH (QI qgif;qico;qjpeg;qsvg;qtiff)
56
74
EXECUTE_PROCESS (COMMAND ditto ${QARCHS} "@QT_PLUGINS_DIR@/imageformats/lib${QI} .dylib" "${QPLUGDIR} /../imageformats/lib${QI} .dylib" )
57
75
ENDIF ()
58
76
ENDFOREACH (QI )
59
- EXECUTE_PROCESS (COMMAND mkdir -p "${QPLUGDIR} /../codecs " )
60
- FOREACH (QTC cn;jp;kr;tw )
61
- IF (NOT EXISTS "${QPLUGDIR} /../codecs /libq${QTC} codecs .dylib" )
62
- EXECUTE_PROCESS (COMMAND ditto ${QARCHS} "@QT_PLUGINS_DIR@/codecs /libq${QTC} codecs .dylib" "${QPLUGDIR} /../codecs /libq${QTC} codecs .dylib" )
77
+ EXECUTE_PROCESS (COMMAND mkdir -p "${QPLUGDIR} /../platforms " )
78
+ FOREACH (QTP cocoa;minimal;offscreen )
79
+ IF (NOT EXISTS "${QPLUGDIR} /../platforms /libq${QTP} .dylib" )
80
+ EXECUTE_PROCESS (COMMAND ditto ${QARCHS} "@QT_PLUGINS_DIR@/platforms /libq${QTP} .dylib" "${QPLUGDIR} /../platforms /libq${QTP} .dylib" )
63
81
ENDIF ()
64
82
ENDFOREACH (QTC )
65
83
EXECUTE_PROCESS (COMMAND mkdir -p "${QPLUGDIR} /../sqldrivers" )
@@ -83,10 +101,6 @@ EXECUTE_PROCESS (COMMAND mkdir -p "${QPLUGDIR}/../iconengines")
83
101
IF (NOT EXISTS "${QPLUGDIR} /../iconengines/libqsvgicon.dylib" )
84
102
EXECUTE_PROCESS (COMMAND ditto ${QARCHS} "@QT_PLUGINS_DIR@/iconengines/libqsvgicon.dylib" "${QPLUGDIR} /../iconengines/libqsvgicon.dylib" )
85
103
ENDIF ()
86
- EXECUTE_PROCESS (COMMAND mkdir -p "${QPLUGDIR} /../phonon_backend" )
87
- IF (NOT EXISTS "${QPLUGDIR} /../phonon_backend/libphonon_qt7.dylib" )
88
- EXECUTE_PROCESS (COMMAND ditto ${QARCHS} "@QT_PLUGINS_DIR@/phonon_backend/libphonon_qt7.dylib" "${QPLUGDIR} /../phonon_backend/libphonon_qt7.dylib" )
89
- ENDIF ()
90
104
91
105
# Qwt
92
106
@@ -166,7 +180,7 @@ ENDIF (@WITH_QWTPOLAR@ AND NOT @WITH_INTERNAL_QWTPOLAR@)
166
180
# QCA
167
181
168
182
STRING (REGEX MATCH "\\ .dylib$" ISLIB "@QCA_LIBRARY@" )
169
- STRING (REGEX MATCH "qca.framework" ISFW "@QCA_LIBRARY@" )
183
+ STRING (REGEX MATCH "qca.*. framework" ISFW "@QCA_LIBRARY@" )
170
184
IF (ISLIB )
171
185
# shared libraries
172
186
MESSAGE (STATUS "Copying QCA and updating library paths..." )
@@ -182,18 +196,24 @@ ELSEIF (ISFW AND EXISTS "@QCA_LIBRARY@")
182
196
# framework
183
197
MESSAGE (STATUS "Copying QCA framework and updating library paths..." )
184
198
SET (QCA_LIBRARY "@QCA_LIBRARY@" )
185
- STRING (REGEX MATCH "qca.framework/qca" _has_bin "${QCA_LIBRARY} " )
199
+ STRING (REGEX MATCH "qca-qt5" _has_long_name "${QCA_LIBRARY} " )
200
+ IF (_has_long_name )
201
+ SET (_qca_libname "qca-qt5" )
202
+ ELSE ()
203
+ SET (_qca_libname "qca" )
204
+ ENDIF ()
205
+ STRING (REGEX MATCH "${_qca_libname} .framework/${_qca_libname} " _has_bin "${QCA_LIBRARY} " )
186
206
IF (NOT _has_bin )
187
- SET (QCA_LIBRARY "${QCA_LIBRARY} /qca " )
207
+ SET (QCA_LIBRARY "${QCA_LIBRARY} /${_qca_libname} " )
188
208
ENDIF ()
189
- SET (QCA_CHG_TO "${ATLOADER} /@QGIS_PLUGIN_SUBDIR_REV@/${QGIS_FW_SUBDIR} /qca .framework/qca " )
190
- IF (NOT IS_DIRECTORY "${QFWDIR} /qca .framework" )
191
- STRING (REGEX REPLACE "/qca .framework.*" "" QCA_PARENT "@QCA_LIBRARY@" )
192
- COPY_FRAMEWORK ("${QCA_PARENT} " "qca " "${QFWDIR} " )
209
+ SET (QCA_CHG_TO "${ATLOADER} /@QGIS_PLUGIN_SUBDIR_REV@/${QGIS_FW_SUBDIR} /${_qca_libname} .framework/${_qca_libname} " )
210
+ IF (NOT IS_DIRECTORY "${QFWDIR} /${_qca_libname} .framework" )
211
+ STRING (REGEX REPLACE "/${_qca_libname} .framework.*" "" QCA_PARENT "@QCA_LIBRARY@" )
212
+ COPY_FRAMEWORK ("${QCA_PARENT} " "${_qca_libname} " "${QFWDIR} " )
193
213
ENDIF ()
194
- GET_INSTALL_NAME ("${QCA_LIBRARY} " "qca " QCA_CHG )
214
+ GET_INSTALL_NAME ("${QCA_LIBRARY} " "${_qca_libname} " QCA_CHG )
195
215
IF (QCA_CHG )
196
- UPDATEQGISPATHS (${QCA_CHG} qca )
216
+ UPDATEQGISPATHS (${QCA_CHG} ${_qca_libname} )
197
217
ENDIF ()
198
218
ENDIF ()
199
219
# copy and relink the plugins
@@ -231,6 +251,17 @@ IF (@QSCINTILLA_LIBRARY@ MATCHES ".*libqscintilla2.dylib")
231
251
ENDIF (QSCI_CHG )
232
252
ENDIF ()
233
253
254
+ # QtKeychain
255
+
256
+ IF (@QTKEYCHAIN_LIBRARY@ MATCHES ".*libqt5keychain.dylib" )
257
+ MESSAGE (STATUS "Copying QtKeychain library and updating library paths..." )
258
+ EXECUTE_PROCESS (COMMAND ditto ${QARCHS} "@QTKEYCHAIN_LIBRARY@" "${QLIBDIR} /libqt5keychain.dylib" )
259
+ GET_INSTALL_NAME ("@QTKEYCHAIN_LIBRARY@" "libqt5keychain" QTKEY_CHG )
260
+ IF (QTKEY_CHG )
261
+ UPDATEQGISPATHS (${QTKEY_CHG} libqt5keychain.dylib )
262
+ ENDIF (QTKEY_CHG )
263
+ ENDIF ()
264
+
234
265
# Tell user what Python paths are being searched for modules and packages
235
266
# see: PYTHON_MODULE_PATHS in 0vars.cmake.in for why not all PyQt-related modules
236
267
# can be assumed to exist in symlinked-resolved PyQt or sip module directories
@@ -257,6 +288,7 @@ MESSAGE (STATUS "Copying PyQt...")
257
288
EXECUTE_PROCESS (COMMAND mkdir -p "${QGISPYDIR} /PyQt${QT_FWVER} " )
258
289
FOREACH (PQ ${PYQTLIST} )
259
290
SET (MODNAME "${PQ} .so" )
291
+ SET (MODPYI "PyQt${QT_FWVER} /${PQ} .pyi" )
260
292
SET (MODSUBPATH "PyQt${QT_FWVER} /${MODNAME} " )
261
293
# search for each module separately, instead of only in first found PyQt directory, since PyQt may
262
294
# be installed to its a specific prefix, like with Homebrew, then symlinked into common 'site-packages'
@@ -265,28 +297,31 @@ FOREACH (PQ ${PYQTLIST})
265
297
IF (NOT EXISTS "${QGISPYDIR} /${MODSUBPATH} " )
266
298
# MESSAGE (STATUS "ditto ${QARCHS} \"${PYQT5MOD}\" \"${QGISPYDIR}/${MODSUBPATH}\"")
267
299
EXECUTE_PROCESS (COMMAND ditto ${QARCHS} "${MODDIR} /${MODSUBPATH} " "${QGISPYDIR} /${MODSUBPATH} " )
300
+ IF (EXISTS "${MODDIR} /${MODPYI} " )
301
+ EXECUTE_PROCESS (COMMAND ditto "${MODDIR} /${MODPYI} " "${QGISPYDIR} /${MODPYI} " )
302
+ ENDIF ()
268
303
ENDIF ()
269
304
ELSE (MODDIR )
270
305
MESSAGE (STATUS " PyQt5 module ${MODNAME} not found" )
271
306
ENDIF (MODDIR )
272
307
UNSET (PYQT5MOD )
273
308
ENDFOREACH (PQ )
274
309
PYTHONMODULEDIR ("PyQt${QT_FWVER} " PYQTMODDIR )
275
- FILE (GLOB PQPYLIST "${PYQTMODDIR} /PyQt${QT_FWVER} /*.py" )
310
+ FILE (GLOB PQPYLIST "${PYQTMODDIR} /PyQt${QT_FWVER} /*.py* " )
276
311
FOREACH (PQPY ${PQPYLIST} )
277
312
EXECUTE_PROCESS (COMMAND cp -fp "${PQPY} " "${QGISPYDIR} /PyQt${QT_FWVER} /" )
278
313
ENDFOREACH (PQPY )
279
314
EXECUTE_PROCESS (COMMAND cp -RfpL "${PYQTMODDIR} /PyQt${QT_FWVER} /uic" "${QGISPYDIR} /PyQt${QT_FWVER} " )
280
315
281
316
# PyQt utilities
282
317
283
- FOREACH (PU pylupdate4;pyrcc4 )
318
+ FOREACH (PU pylupdate5;pyrcc5 )
284
319
IF (NOT EXISTS "${QBINDIR} /${PU} " )
285
320
EXECUTE_PROCESS (COMMAND ditto ${QARCHS} "@PYQT5_BIN_DIR@/${PU} " "${QBINDIR} /" )
286
321
ENDIF ()
287
322
ENDFOREACH (PU )
288
- IF (NOT EXISTS "${QBINDIR} /pyuic4 " )
289
- EXECUTE_PROCESS (COMMAND sed -E "s, /.*/PyQt5/uic/pyuic.py, \"\$ (/usr/bin/dirname \"\$ 0\" )/../../Resources/python/PyQt5/uic/pyuic.py\" ," "@PYQT5_BIN_DIR@/pyuic4 "
323
+ IF (NOT EXISTS "${QBINDIR} /pyuic5 " )
324
+ EXECUTE_PROCESS (COMMAND sed -E "s, /.*/PyQt5/uic/pyuic.py, \"\$ (/usr/bin/dirname \"\$ 0\" )/../../Resources/python/PyQt5/uic/pyuic.py\" ," "@PYQT5_BIN_DIR@/pyuic5 "
290
325
OUTPUT_VARIABLE PYUIC_CONTENTS )
291
326
FILE (WRITE "${QBINDIR} /pyuic4" "${PYUIC_CONTENTS} " )
292
327
EXECUTE_PROCESS (COMMAND chmod +x "${QBINDIR} /pyuic4" )
@@ -346,7 +381,7 @@ MESSAGE (STATUS "Updating Qt library paths...")
346
381
FOREACH (QFW ${QTLISTQG} )
347
382
# get install names from installed in case bundled copy already changed
348
383
# from a previous install attempt
349
- GET_INSTALL_NAME ("@ QT_LIBRARY_DIR@ /${QFW} .framework/${QFW} " ${QFW} .framework QQ )
384
+ GET_INSTALL_NAME ("${ QT_LIBRARY_DIR} /${QFW} .framework/${QFW} " ${QFW} .framework QQ )
350
385
SET (QFW_CHG "${QQ} " )
351
386
# qgis stuff
352
387
UPDATEQGISPATHS ("${QFW_CHG} " ${QFW} )
@@ -366,6 +401,20 @@ FOREACH (QFW ${QTLISTQG})
366
401
ENDIF ()
367
402
INSTALLNAMETOOL_CHANGE ("${QFW_CHG} " "${QFW_CHG_TO} " "${QFWDIR} /qwt.framework/qwt" )
368
403
ENDIF (ISLIB )
404
+ # qtkeychain
405
+ STRING (REGEX MATCH "\\ .dylib$" ISLIB "@QTKEYCHAIN_LIBRARY@" )
406
+ STRING (REGEX MATCH "qt5keychain.framework" ISFW "@QTKEYCHAIN_LIBRARY@" )
407
+ IF (ISLIB )
408
+ IF (@OSX_HAVE_LOADERPATH@ )
409
+ SET (QFW_CHG_TO "${ATLOADER} /${QGIS_LIB_SUBDIR_REV} /${QGIS_FW_SUBDIR} /${LIBPOST} " )
410
+ ENDIF ()
411
+ INSTALLNAMETOOL_CHANGE ("${QFW_CHG} " "${QFW_CHG_TO} " "${QLIBDIR} /libqt5keychain.dylib" )
412
+ ELSEIF (ISFW AND EXISTS "${QFWDIR} /qt5keychain.framework/qt5keychain" )
413
+ IF (@OSX_HAVE_LOADERPATH@ )
414
+ SET (QFW_CHG_TO "${ATLOADER} /../../../${LIBPOST} " )
415
+ ENDIF ()
416
+ INSTALLNAMETOOL_CHANGE ("${QFW_CHG} " "${QFW_CHG_TO} " "${QFWDIR} /qt5keychain.framework/qt5keychain" )
417
+ ENDIF (ISLIB )
369
418
# QwtPolar
370
419
STRING (REGEX MATCH "\\ .dylib$" ISLIB "@QWTPOLAR_LIBRARY@" )
371
420
STRING (REGEX MATCH "qwtpolar.framework" ISFW "@QWTPOLAR_LIBRARY@" )
@@ -382,17 +431,17 @@ FOREACH (QFW ${QTLISTQG})
382
431
ENDIF (ISLIB )
383
432
# QCA
384
433
STRING (REGEX MATCH "\\ .dylib$" ISLIB "@QCA_LIBRARY@" )
385
- STRING (REGEX MATCH "qca .framework" ISFW "@QCA_LIBRARY@" )
434
+ STRING (REGEX MATCH "${_qca_libname} .framework" ISFW "@QCA_LIBRARY@" )
386
435
IF (ISLIB )
387
436
IF (@OSX_HAVE_LOADERPATH@ )
388
437
SET (QFW_CHG_TO "${ATLOADER} /${QGIS_LIB_SUBDIR_REV} /${QGIS_FW_SUBDIR} /${LIBPOST} " )
389
438
ENDIF ()
390
439
INSTALLNAMETOOL_CHANGE ("${QFW_CHG} " "${QFW_CHG_TO} " "${QLIBDIR} /libqca.dylib" )
391
- ELSEIF (ISFW AND EXISTS "${QFWDIR} /qca .framework/qca " )
440
+ ELSEIF (ISFW AND EXISTS "${QFWDIR} /${_qca_libname} .framework/${_qca_libname} " )
392
441
IF (@OSX_HAVE_LOADERPATH@ )
393
442
SET (QFW_CHG_TO "${ATLOADER} /../../../${LIBPOST} " )
394
443
ENDIF ()
395
- INSTALLNAMETOOL_CHANGE ("${QFW_CHG} " "${QFW_CHG_TO} " "${QFWDIR} /qca .framework/qca " )
444
+ INSTALLNAMETOOL_CHANGE ("${QFW_CHG} " "${QFW_CHG_TO} " "${QFWDIR} /${_qca_libname} .framework/${_qca_libname} " )
396
445
ENDIF (ISLIB )
397
446
# osgEarthQt
398
447
IF (@HAVE_OSGEARTHQT@ )
@@ -423,9 +472,9 @@ FOREACH (QFW ${QTLISTQG})
423
472
FOREACH (QI qgif;qico;qjpeg;qsvg;qtiff )
424
473
INSTALLNAMETOOL_CHANGE ("${QFW_CHG} " "${QFW_CHG_TO} " "${QPLUGDIR} /../imageformats/lib${QI} .dylib" )
425
474
ENDFOREACH (QI )
426
- FOREACH (QC cn;jp;kr;tw )
427
- INSTALLNAMETOOL_CHANGE ("${QFW_CHG} " "${QFW_CHG_TO} " "${QPLUGDIR} /../codecs /libq${QC} codecs .dylib" )
428
- ENDFOREACH (QC )
475
+ FOREACH (QP cocoa;minimal;offscreen )
476
+ INSTALLNAMETOOL_CHANGE ("${QFW_CHG} " "${QFW_CHG_TO} " "${QPLUGDIR} /../platforms /libq${QP} .dylib" )
477
+ ENDFOREACH (QP )
429
478
FOREACH (QSL ${QTLISTSQL} )
430
479
IF (EXISTS "${QPLUGDIR} /../sqldrivers/libqsql${QSL} .dylib" )
431
480
INSTALLNAMETOOL_CHANGE ("${QFW_CHG} " "${QFW_CHG_TO} " "${QPLUGDIR} /../sqldrivers/libqsql${QSL} .dylib" )
0 commit comments