From 50a98367c5efc74362467b101f7ea23aef79bea9 Mon Sep 17 00:00:00 2001 From: Sam Gillingham Date: Thu, 14 Jan 2021 14:37:37 +1000 Subject: [PATCH] add cmake QGIS_MACAPP_FRAMEWORK option --- CMakeLists.txt | 15 +++++++++++++-- src/3d/CMakeLists.txt | 2 +- src/analysis/CMakeLists.txt | 2 +- src/core/CMakeLists.txt | 2 +- src/gui/CMakeLists.txt | 9 +++++---- src/native/CMakeLists.txt | 2 +- src/providers/grass/CMakeLists.txt | 2 +- src/quickgui/CMakeLists.txt | 2 +- 8 files changed, 24 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 669546bc8a7..d0326c39836 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -729,8 +729,12 @@ if (WITH_CORE) set (DEFAULT_CGIBIN_SUBDIR .) endif() else() - - if (APPLE) + + if(APPLE) + set(QGIS_MACAPP_FRAMEWORK TRUE CACHE BOOL "Build as a framework on OSX") + endif() + + if (APPLE AND QGIS_MACAPP_FRAMEWORK) if (POLICY CMP0042) # in CMake 3.0.0+ set (CMAKE_MACOSX_RPATH OFF) # otherwise ON by default endif() @@ -803,6 +807,13 @@ if (WITH_CORE) set (DEFAULT_QML_SUBDIR qml) set (DEFAULT_SERVER_MODULE_SUBDIR ${DEFAULT_LIBEXEC_SUBDIR}/server) + + # QGIS_MACAPP_FRAMEWORK=FALSE + if(APPLE) + set (QGIS_MACAPP_BUNDLE -1) + set (CMAKE_FRAMEWORK FALSE) + set (QGIS_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) + endif() endif() endif() diff --git a/src/3d/CMakeLists.txt b/src/3d/CMakeLists.txt index 226cbabda0a..5bc1017ff56 100644 --- a/src/3d/CMakeLists.txt +++ b/src/3d/CMakeLists.txt @@ -221,7 +221,7 @@ endif() set(QGIS_3D_HDRS ${QGIS_3D_HDRS} ${CMAKE_CURRENT_BINARY_DIR}/qgis_3d.h) -if(NOT APPLE) +if(NOT APPLE OR NOT QGIS_MACAPP_FRAMEWORK) install(FILES ${QGIS_3D_HDRS} DESTINATION ${QGIS_INCLUDE_DIR}) else() set_target_properties(qgis_3d PROPERTIES diff --git a/src/analysis/CMakeLists.txt b/src/analysis/CMakeLists.txt index d06780ed553..479e24b28e4 100644 --- a/src/analysis/CMakeLists.txt +++ b/src/analysis/CMakeLists.txt @@ -462,7 +462,7 @@ endif() set(QGIS_ANALYSIS_HDRS ${QGIS_ANALYSIS_HDRS} ${CMAKE_CURRENT_BINARY_DIR}/qgis_analysis.h) -if(NOT APPLE) +if(NOT APPLE OR NOT QGIS_MACAPP_FRAMEWORK) install(FILES ${QGIS_ANALYSIS_HDRS} DESTINATION ${QGIS_INCLUDE_DIR}) else() set_target_properties(qgis_analysis PROPERTIES diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 7bb262e2c05..b8a8cee1840 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1813,7 +1813,7 @@ if(HAVE_OPENCL) endif() -if(NOT APPLE) +if(NOT APPLE OR NOT QGIS_MACAPP_FRAMEWORK) install(FILES ${QGIS_CORE_HDRS} DESTINATION ${QGIS_INCLUDE_DIR}) else() diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 6243286521b..19781c35cda 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -1421,11 +1421,12 @@ GENERATE_EXPORT_HEADER( set(QGIS_GUI_HDRS ${QGIS_GUI_HDRS} ${CMAKE_CURRENT_BINARY_DIR}/qgis_gui.h) -if(NOT APPLE) +if(NOT APPLE OR NOT QGIS_MACAPP_FRAMEWORK) if (WIN32 ) include_directories(${CMAKE_SOURCE_DIR}/src/native/win) - endif() - if (UNIX) + elseif (APPLE) + include_directories(${CMAKE_SOURCE_DIR}/src/native/mac) + elseif (UNIX) include_directories(${CMAKE_SOURCE_DIR}/src/native/linux) endif() install(FILES ${QGIS_GUI_HDRS} DESTINATION ${QGIS_INCLUDE_DIR}) @@ -1508,7 +1509,7 @@ install(TARGETS qgis_gui PUBLIC_HEADER DESTINATION ${QGIS_INCLUDE_DIR}) # ui headers to install, don't exist at target definition time, install manually -if (APPLE) +if (APPLE AND QGIS_MACAPP_FRAMEWORK) install(FILES ${QGIS_GUI_UI_HDRS} DESTINATION ${QGIS_FW_SUBDIR}/qgis_gui.framework/Headers) else() install(FILES ${QGIS_GUI_UI_HDRS} DESTINATION ${QGIS_INCLUDE_DIR}) diff --git a/src/native/CMakeLists.txt b/src/native/CMakeLists.txt index f62e8da15e7..1355859139a 100644 --- a/src/native/CMakeLists.txt +++ b/src/native/CMakeLists.txt @@ -107,7 +107,7 @@ GENERATE_EXPORT_HEADER( set(QGIS_NATIVE_HDRS ${QGIS_NATIVE_HDRS} ${CMAKE_CURRENT_BINARY_DIR}/qgis_native.h) -if(NOT APPLE) +if(NOT APPLE OR NOT QGIS_MACAPP_FRAMEWORK) install(FILES ${QGIS_NATIVE_HDRS} DESTINATION ${QGIS_INCLUDE_DIR}) else() set_target_properties(qgis_native PROPERTIES diff --git a/src/providers/grass/CMakeLists.txt b/src/providers/grass/CMakeLists.txt index 3fc40877ec7..df7170daff1 100644 --- a/src/providers/grass/CMakeLists.txt +++ b/src/providers/grass/CMakeLists.txt @@ -79,7 +79,7 @@ macro(ADD_GRASSLIB GRASS_BUILD_VERSION) set_target_properties(qgisgrass${GRASS_BUILD_VERSION} PROPERTIES CLEAN_DIRECT_OUTPUT 1 - FRAMEWORK 1 + FRAMEWORK QGIS_MACAPP_FRAMEWORK FRAMEWORK_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}" MACOSX_FRAMEWORK_INFO_PLIST "${CMAKE_SOURCE_DIR}/mac/framework.info.plist.in" MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${COMPLETE_VERSION} diff --git a/src/quickgui/CMakeLists.txt b/src/quickgui/CMakeLists.txt index df5a3cda080..278ce1efdd8 100644 --- a/src/quickgui/CMakeLists.txt +++ b/src/quickgui/CMakeLists.txt @@ -98,7 +98,7 @@ GENERATE_EXPORT_HEADER( ) # Installation -if(NOT APPLE) +if(NOT APPLE OR NOT QGIS_MACAPP_FRAMEWORK) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qgis_quick.h ${QGIS_QUICK_GUI_HDRS} ${QGIS_QUICK_GUI_MOC_HDRS} DESTINATION ${QGIS_INCLUDE_DIR}) else() set_target_properties(qgis_quick PROPERTIES