Skip to content

Commit bf8b1e9

Browse files
author
William Kyngesburye
committed
Mac packaging updates
1 parent 20c071b commit bf8b1e9

File tree

2 files changed

+88
-35
lines changed

2 files changed

+88
-35
lines changed

mac/cmake/0vars.cmake.in

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ SET (CMAKE_VERBOSE_MAKEFILE "@CMAKE_VERBOSE_MAKEFILE@")
1313
SET (CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@")
1414
SET (CMAKE_BUILD_TYPE "@CMAKE_BUILD_TYPE@")
1515

16+
# Qt5 cmake does not create overall qt prefix var, only individual lib prefixes.
17+
# For simplicity, assume core prefix same as all others
18+
SET (QT_LIBRARY_DIR "@_qt5Core_install_prefix@/lib")
19+
1620
# OS X options
1721
SET (CMAKE_OSX_ARCHITECTURES "@CMAKE_OSX_ARCHITECTURES@")
1822
SET (OSX_HAVE_LOADERPATH @OSX_HAVE_LOADERPATH@)

mac/cmake/1qt.cmake.in

Lines changed: 84 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,33 @@ INCLUDE ("@CMAKE_SOURCE_DIR@/cmake/MacBundleMacros.cmake")
1111
INCLUDE ("@CMAKE_SOURCE_DIR@/cmake/QCAMacros.cmake")
1212

1313
# Qt framework version is major version
14-
SET (QT_FWVER @QT_VERSION_MAJOR@)
14+
SET (QT_FWVER "5")
1515

1616
# build list of Qt frameworks to bundle
1717

1818
# 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 ()
2136

2237
# add Qsci.so, if available
2338
IF (@QSCI_FOUND@)
24-
SET (PYQTLIST ${PYQTLIST} Qsci)
39+
SET (QTLISTQG ${QTLISTQG} QtMacExtras)
40+
SET (PYQTLIST ${PYQTLIST} Qsci QtMacExtras)
2541
ENDIF (@QSCI_FOUND@)
2642

2743
MYMESSAGE ("Qt list: ${QTLISTQG}")
@@ -30,21 +46,23 @@ MYMESSAGE ("Qt list: ${QTLISTQG}")
3046

3147
IF (NOT @OSX_HAVE_LOADERPATH@)
3248
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")
3551
ENDIF ()
3652
EXECUTE_PROCESS (COMMAND ln -sfn @QGIS_CGIBIN_SUBDIR_REV@/@QGIS_LIB_SUBDIR@ "${QCGIDIR}/lib")
3753
ENDIF (NOT @OSX_HAVE_LOADERPATH@)
3854

3955
### copy files
4056

4157
# 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.
4260

4361
MESSAGE (STATUS "Copying Qt frameworks...")
4462
EXECUTE_PROCESS (COMMAND mkdir -p "${QFWDIR}")
4563
FOREACH (QFW ${QTLISTQG})
4664
IF (NOT IS_DIRECTORY "${QFWDIR}/${QFW}.framework")
47-
COPY_FRAMEWORK("@QT_LIBRARY_DIR@" ${QFW} "${QFWDIR}")
65+
COPY_FRAMEWORK("${QT_LIBRARY_DIR}" ${QFW} "${QFWDIR}")
4866
ENDIF ()
4967
ENDFOREACH (QFW)
5068

@@ -56,10 +74,10 @@ FOREACH (QI qgif;qico;qjpeg;qsvg;qtiff)
5674
EXECUTE_PROCESS (COMMAND ditto ${QARCHS} "@QT_PLUGINS_DIR@/imageformats/lib${QI}.dylib" "${QPLUGDIR}/../imageformats/lib${QI}.dylib")
5775
ENDIF ()
5876
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")
6381
ENDIF ()
6482
ENDFOREACH (QTC)
6583
EXECUTE_PROCESS (COMMAND mkdir -p "${QPLUGDIR}/../sqldrivers")
@@ -83,10 +101,6 @@ EXECUTE_PROCESS (COMMAND mkdir -p "${QPLUGDIR}/../iconengines")
83101
IF (NOT EXISTS "${QPLUGDIR}/../iconengines/libqsvgicon.dylib")
84102
EXECUTE_PROCESS (COMMAND ditto ${QARCHS} "@QT_PLUGINS_DIR@/iconengines/libqsvgicon.dylib" "${QPLUGDIR}/../iconengines/libqsvgicon.dylib")
85103
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 ()
90104

91105
# Qwt
92106

@@ -166,7 +180,7 @@ ENDIF (@WITH_QWTPOLAR@ AND NOT @WITH_INTERNAL_QWTPOLAR@)
166180
# QCA
167181

168182
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@")
170184
IF (ISLIB)
171185
# shared libraries
172186
MESSAGE (STATUS "Copying QCA and updating library paths...")
@@ -182,18 +196,24 @@ ELSEIF (ISFW AND EXISTS "@QCA_LIBRARY@")
182196
# framework
183197
MESSAGE (STATUS "Copying QCA framework and updating library paths...")
184198
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}")
186206
IF (NOT _has_bin)
187-
SET (QCA_LIBRARY "${QCA_LIBRARY}/qca")
207+
SET (QCA_LIBRARY "${QCA_LIBRARY}/${_qca_libname}")
188208
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}")
193213
ENDIF ()
194-
GET_INSTALL_NAME ("${QCA_LIBRARY}" "qca" QCA_CHG)
214+
GET_INSTALL_NAME ("${QCA_LIBRARY}" "${_qca_libname}" QCA_CHG)
195215
IF (QCA_CHG)
196-
UPDATEQGISPATHS (${QCA_CHG} qca)
216+
UPDATEQGISPATHS (${QCA_CHG} ${_qca_libname})
197217
ENDIF ()
198218
ENDIF ()
199219
# copy and relink the plugins
@@ -231,6 +251,17 @@ IF (@QSCINTILLA_LIBRARY@ MATCHES ".*libqscintilla2.dylib")
231251
ENDIF (QSCI_CHG)
232252
ENDIF ()
233253

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+
234265
# Tell user what Python paths are being searched for modules and packages
235266
# see: PYTHON_MODULE_PATHS in 0vars.cmake.in for why not all PyQt-related modules
236267
# can be assumed to exist in symlinked-resolved PyQt or sip module directories
@@ -257,6 +288,7 @@ MESSAGE (STATUS "Copying PyQt...")
257288
EXECUTE_PROCESS (COMMAND mkdir -p "${QGISPYDIR}/PyQt${QT_FWVER}")
258289
FOREACH (PQ ${PYQTLIST})
259290
SET (MODNAME "${PQ}.so")
291+
SET (MODPYI "PyQt${QT_FWVER}/${PQ}.pyi")
260292
SET (MODSUBPATH "PyQt${QT_FWVER}/${MODNAME}")
261293
# search for each module separately, instead of only in first found PyQt directory, since PyQt may
262294
# be installed to its a specific prefix, like with Homebrew, then symlinked into common 'site-packages'
@@ -265,28 +297,31 @@ FOREACH (PQ ${PYQTLIST})
265297
IF (NOT EXISTS "${QGISPYDIR}/${MODSUBPATH}")
266298
# MESSAGE (STATUS "ditto ${QARCHS} \"${PYQT5MOD}\" \"${QGISPYDIR}/${MODSUBPATH}\"")
267299
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 ()
268303
ENDIF ()
269304
ELSE (MODDIR)
270305
MESSAGE (STATUS " PyQt5 module ${MODNAME} not found")
271306
ENDIF (MODDIR)
272307
UNSET(PYQT5MOD)
273308
ENDFOREACH (PQ)
274309
PYTHONMODULEDIR("PyQt${QT_FWVER}" PYQTMODDIR)
275-
FILE (GLOB PQPYLIST "${PYQTMODDIR}/PyQt${QT_FWVER}/*.py")
310+
FILE (GLOB PQPYLIST "${PYQTMODDIR}/PyQt${QT_FWVER}/*.py*")
276311
FOREACH (PQPY ${PQPYLIST})
277312
EXECUTE_PROCESS (COMMAND cp -fp "${PQPY}" "${QGISPYDIR}/PyQt${QT_FWVER}/")
278313
ENDFOREACH (PQPY)
279314
EXECUTE_PROCESS (COMMAND cp -RfpL "${PYQTMODDIR}/PyQt${QT_FWVER}/uic" "${QGISPYDIR}/PyQt${QT_FWVER}")
280315

281316
# PyQt utilities
282317

283-
FOREACH (PU pylupdate4;pyrcc4)
318+
FOREACH (PU pylupdate5;pyrcc5)
284319
IF (NOT EXISTS "${QBINDIR}/${PU}")
285320
EXECUTE_PROCESS (COMMAND ditto ${QARCHS} "@PYQT5_BIN_DIR@/${PU}" "${QBINDIR}/")
286321
ENDIF ()
287322
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"
290325
OUTPUT_VARIABLE PYUIC_CONTENTS)
291326
FILE (WRITE "${QBINDIR}/pyuic4" "${PYUIC_CONTENTS}")
292327
EXECUTE_PROCESS (COMMAND chmod +x "${QBINDIR}/pyuic4")
@@ -346,7 +381,7 @@ MESSAGE (STATUS "Updating Qt library paths...")
346381
FOREACH (QFW ${QTLISTQG})
347382
# get install names from installed in case bundled copy already changed
348383
# 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)
350385
SET (QFW_CHG "${QQ}")
351386
# qgis stuff
352387
UPDATEQGISPATHS ("${QFW_CHG}" ${QFW})
@@ -366,6 +401,20 @@ FOREACH (QFW ${QTLISTQG})
366401
ENDIF ()
367402
INSTALLNAMETOOL_CHANGE ("${QFW_CHG}" "${QFW_CHG_TO}" "${QFWDIR}/qwt.framework/qwt")
368403
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)
369418
# QwtPolar
370419
STRING (REGEX MATCH "\\.dylib$" ISLIB "@QWTPOLAR_LIBRARY@")
371420
STRING (REGEX MATCH "qwtpolar.framework" ISFW "@QWTPOLAR_LIBRARY@")
@@ -382,17 +431,17 @@ FOREACH (QFW ${QTLISTQG})
382431
ENDIF (ISLIB)
383432
# QCA
384433
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@")
386435
IF (ISLIB)
387436
IF (@OSX_HAVE_LOADERPATH@)
388437
SET (QFW_CHG_TO "${ATLOADER}/${QGIS_LIB_SUBDIR_REV}/${QGIS_FW_SUBDIR}/${LIBPOST}")
389438
ENDIF ()
390439
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}")
392441
IF (@OSX_HAVE_LOADERPATH@)
393442
SET (QFW_CHG_TO "${ATLOADER}/../../../${LIBPOST}")
394443
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}")
396445
ENDIF (ISLIB)
397446
# osgEarthQt
398447
IF (@HAVE_OSGEARTHQT@)
@@ -423,9 +472,9 @@ FOREACH (QFW ${QTLISTQG})
423472
FOREACH (QI qgif;qico;qjpeg;qsvg;qtiff)
424473
INSTALLNAMETOOL_CHANGE ("${QFW_CHG}" "${QFW_CHG_TO}" "${QPLUGDIR}/../imageformats/lib${QI}.dylib")
425474
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)
429478
FOREACH (QSL ${QTLISTSQL})
430479
IF (EXISTS "${QPLUGDIR}/../sqldrivers/libqsql${QSL}.dylib")
431480
INSTALLNAMETOOL_CHANGE ("${QFW_CHG}" "${QFW_CHG_TO}" "${QPLUGDIR}/../sqldrivers/libqsql${QSL}.dylib")

0 commit comments

Comments
 (0)