New app layout

This commit is contained in:
Matthias Kuhn 2025-01-02 09:05:29 +01:00
parent 06f7e16ef2
commit 5fbd134650
15 changed files with 546 additions and 105 deletions

View File

@ -43,10 +43,11 @@ else()
endif()
if(WITH_VCPKG)
set(TARGET_SYSROOT "${VCPKG_INSTALL_PREFIX}/${VCPKG_TARGET_TRIPLET}")
if(WIN32)
list(APPEND CMAKE_PROGRAM_PATH "${VCPKG_INSTALL_PREFIX}/${VCPKG_TARGET_TRIPLET}/tools/python3/Scripts/")
list(APPEND CMAKE_PROGRAM_PATH "${TARGET_SYSROOT}/tools/python3/Scripts/")
else()
list(APPEND CMAKE_PROGRAM_PATH "${VCPKG_INSTALL_PREFIX}/${VCPKG_TARGET_TRIPLET}/bin")
list(APPEND CMAKE_PROGRAM_PATH "${TARGET_SYSROOT}/bin")
endif()
set(PREFER_INTERNAL_LIBS FALSE)
else()
@ -884,6 +885,27 @@ if( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" ST
include("cmake/modules/linker.cmake")
endif()
set(MIN_PYTHON_VERSION "3.9")
set(Python_FIND_FRAMEWORK "LAST")
if (WITH_BINDINGS)
find_package(Python ${MIN_PYTHON_VERSION} REQUIRED COMPONENTS Interpreter Development)
else()
find_package(Python ${MIN_PYTHON_VERSION} REQUIRED COMPONENTS Interpreter)
endif()
# Fix python site-packages for Fedora
# See https://github.com/qgis/QGIS/issues/54348#issuecomment-1694216152
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
if(EXISTS "/etc/fedora-release")
EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} -c "import sysconfig;print(sysconfig.get_path(\"platlib\", \"rpm_prefix\"), end=\"\")" OUTPUT_VARIABLE Python_SITEARCH)
endif()
endif()
message("-- Found Python executable: ${Python_EXECUTABLE} (version ${Python_VERSION})")
message("-- Python library: ${Python_LIBRARIES}")
message("-- Python site-packages: ${Python_SITEARCH}")
#############################################################
# platform specific stuff
if (WITH_CORE)
@ -920,61 +942,32 @@ if (WITH_CORE)
endif()
else()
if (APPLE)
if (POLICY CMP0042) # in CMake 3.0.0+
set (CMAKE_MACOSX_RPATH OFF) # otherwise ON by default
endif()
if (POLICY CMP0068) # in CMake 3.9.0+
cmake_policy(SET CMP0068 NEW)
endif()
# for Mac OS X, everything is put inside an application bundle
# save the root install prefix for the app later
set (QGIS_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
set (QGIS_MACAPP_PREFIX ${CMAKE_INSTALL_PREFIX}/${QGIS_APP_NAME}.app/Contents)
# common prefix for components, let cmake handle it
set (CMAKE_INSTALL_PREFIX ${QGIS_MACAPP_PREFIX}/MacOS)
# 5 bundling levels, each includes previous
# -1 nothing
# 0 fixup the library paths for all QGIS libraries with @loader_path
# 1 Qt frameworks
# 2 non-system libraries, "standard"
# 3 non-system frameworks, "standalone"
set (QGIS_MACAPP_BUNDLE 1 CACHE STRING "What to bundle into app package")
set (QGIS_MACAPP_BUNDLE_USER "" CACHE STRING "Path to user bundling script")
set (QGIS_MACAPP_INSTALL_DEV FALSE CACHE BOOL "Install developer frameworks")
set (QGIS_MACAPP_DEV_PREFIX "/Library/Frameworks" CACHE STRING "Path to install developer frameworks")
if(APPLE)
set(QGIS_MAC_BUNDLE TRUE CACHE BOOL "Install into a mac bundle")
endif()
set (DEFAULT_BIN_SUBDIR bin)
set (QGIS_BIN_SUBDIR_REV ..)
set (DEFAULT_CGIBIN_SUBDIR fcgi-bin)
set (QGIS_CGIBIN_SUBDIR_REV ..)
set (DEFAULT_LIB_SUBDIR lib)
set (QGIS_LIB_SUBDIR_REV ..)
set (QGIS_FW_SUBDIR ../Frameworks)
set (QGIS_FW_SUBDIR_REV ../MacOS)
set (DEFAULT_DATA_SUBDIR ../Resources)
set (QGIS_DATA_SUBDIR_REV ../MacOS)
set (DEFAULT_LIBEXEC_SUBDIR lib/qgis)
set (QGIS_LIBEXEC_SUBDIR_REV ../..)
set (DEFAULT_PLUGIN_SUBDIR ../PlugIns/qgis)
set (QGIS_PLUGIN_SUBDIR_REV ../../MacOS)
set (DEFAULT_INCLUDE_SUBDIR include/qgis)
set (DEFAULT_QML_SUBDIR qml)
if (APPLE AND QGIS_MAC_BUNDLE)
set(CMAKE_MACOSX_RPATH ON) # If this is off, the path will be stripped (completely) at install time, we want to preserve the `@rpath` prefix
set(CMAKE_SKIP_INSTALL_RPATH TRUE)
# Set server moodules path to DEFAULT_LIBEXEC_SUBDIR+'/server'
set (DEFAULT_SERVER_MODULE_SUBDIR ${DEFAULT_LIBEXEC_SUBDIR}/server)
set(CMAKE_INSTALL_PREFIX "${QGIS_APP_NAME}.app")
# path for framework references when running from build directory
# changed later to reference in-app resources upon install
set (CMAKE_INSTALL_NAME_DIR ${CMAKE_BINARY_DIR}/output/lib)
# recent cmakes force SDKs, recent SDKs don't have user symlinks
# need to find non-system frameworks
# cmake bug #0007250 - CMAKE_SHARED_LINKER_FLAGS ignored when creating
# a framework, so these need to be manually handled with LINK_FLAGS options
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -F/Library/Frameworks")
set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -F/Library/Frameworks")
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -F/Library/Frameworks")
set(APP_CONTENTS_DIR "Contents")
set(APP_MACOS_DIR "${APP_CONTENTS_DIR}/MacOS")
set(APP_FRAMEWORKS_DIR "${APP_CONTENTS_DIR}/Frameworks")
set(APP_RESOURCES_DIR "${APP_CONTENTS_DIR}/Resources")
set(APP_PLUGINS_DIR "${APP_CONTENTS_DIR}/PlugIns")
cmake_path(RELATIVE_PATH Python_SITEARCH BASE_DIRECTORY "${TARGET_SYSROOT}" OUTPUT_VARIABLE _RELATIVE_SITEARCH)
set(DEFAULT_BIN_SUBDIR ${APP_MACOS_DIR})
set(DEFAULT_LIB_SUBDIR ${APP_FRAMEWORKS_DIR})
set(DEFAULT_DATA_SUBDIR ${APP_RESOURCES_DIR}/qgis)
set(DEFAULT_LIBEXEC_SUBDIR ${APP_MACOS_DIR})
set(DEFAULT_PLUGIN_SUBDIR ${APP_PLUGINS_DIR}/qgis)
set(DEFAULT_INCLUDE_SUBDIR include/qgis)
set(DEFAULT_QML_SUBDIR ${APP_RESOURCES_DIR}/qgis/qml)
set(DEFAULT_PYTHON_SUBDIR ${APP_FRAMEWORKS_DIR}/${_RELATIVE_SITEARCH})
else()
# UNIX
set (DEFAULT_BIN_SUBDIR bin)
@ -1086,28 +1079,6 @@ option(ENABLE_UNITY_BUILDS "Enable Unity builds, that is compiling several .cpp
#############################################################
# Python
set(MIN_PYTHON_VERSION "3.9")
set(Python_FIND_FRAMEWORK "LAST")
if (WITH_BINDINGS)
find_package(Python ${MIN_PYTHON_VERSION} REQUIRED COMPONENTS Interpreter Development)
else()
find_package(Python ${MIN_PYTHON_VERSION} REQUIRED COMPONENTS Interpreter)
endif()
# Fix python site-packages for Fedora
# See https://github.com/qgis/QGIS/issues/54348#issuecomment-1694216152
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
if(EXISTS "/etc/fedora-release")
EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} -c "import sysconfig;print(sysconfig.get_path(\"platlib\", \"rpm_prefix\"), end=\"\")" OUTPUT_VARIABLE Python_SITEARCH)
endif()
endif()
message("-- Found Python executable: ${Python_EXECUTABLE} (version ${Python_VERSION})")
message("-- Python library: ${Python_LIBRARIES}")
message("-- Python site-packages: ${Python_SITEARCH}")
if (WITH_CORE AND WITH_BINDINGS)
set(PYTHON_OUTPUT_DIRECTORY ${QGIS_OUTPUT_DIRECTORY}/python)
set (QGIS_PYTHON_OUTPUT_DIRECTORY ${PYTHON_OUTPUT_DIRECTORY}/qgis)
@ -1140,8 +1111,12 @@ if (WITH_CORE AND WITH_BINDINGS)
set(SIP_INCLUDES ${PYQT_SIP_DIR} ${CMAKE_SOURCE_DIR}/python)
set(SIP_CONCAT_PARTS 25)
if (NOT BINDINGS_GLOBAL_INSTALL)
set(Python_SITEARCH ${QGIS_DATA_DIR}/python)
if(BINDINGS_GLOBAL_INSTALL)
set(QGIS_PYTHON_INSTALL_DIR ${Python_SITEARCH})
elseif(DEFINED DEFAULT_PYTHON_SUBDIR)
set(QGIS_PYTHON_INSTALL_DIR ${DEFAULT_PYTHON_SUBDIR})
else()
set(QGIS_PYTHON_INSTALL_DIR ${QGIS_DATA_DIR}/python)
endif()
if (WITH_CUSTOM_WIDGETS)
@ -1238,8 +1213,8 @@ endif()
#############################################################
# Enable packaging
if (WITH_CORE)
include(Bundle)
include(VcpkgInstallDeps)
include(Bundle)
endif()
if (UNIX AND NOT APPLE)

View File

@ -2,9 +2,9 @@ set(CPACK_GENERATOR)
set(CPACK_OUTPUT_CONFIG_FILE "${CMAKE_BINARY_DIR}/BundleConfig.cmake")
add_custom_target(bundle
COMMAND ${CMAKE_CPACK_COMMAND} "--config" "${CMAKE_BINARY_DIR}/BundleConfig.cmake"
COMMAND ${CMAKE_CPACK_COMMAND} "--config" "${CMAKE_BINARY_DIR}/BundleConfig.cmake" "--verbose"
COMMENT "Running CPACK. Please wait..."
DEPENDS qgis)
DEPENDS "${QGIS_APP_NAME}")
if(WIN32 AND NOT UNIX)
set (CREATE_NSIS FALSE CACHE BOOL "Create an installer using NSIS")
@ -22,7 +22,6 @@ endif()
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "QGIS")
set(CPACK_PACKAGE_VENDOR "Open Source Geospatial Foundation")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "QGIS ${COMPLETE_VERSION}")
set(CPACK_PACKAGE_EXECUTABLES "qgis" "QGIS")
@ -44,4 +43,76 @@ if(CREATE_ZIP)
list(APPEND CPACK_GENERATOR "ZIP")
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND QGIS_MAC_BUNDLE)
# TODO HINT relative to VCPKG_HOST_DIR
find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "../../macdeployqt-standalone/build/bin/" NO_DEFAULT_PATH)
configure_file("${CMAKE_SOURCE_DIR}/platform/macos/Info.plist.in" "${CMAKE_BINARY_DIR}/platform//macos/Info.plist" @ONLY)
install(FILES "${CMAKE_BINARY_DIR}/platform//macos/Info.plist" DESTINATION "${APP_CONTENTS_DIR}")
set(CPACK_DMG_VOLUME_NAME "${PROJECT_NAME}")
set(CPACK_DMG_FORMAT "UDBZ")
list(APPEND CPACK_GENERATOR "External")
message(STATUS " + macdeployqt/DMG YES ")
configure_file(${CMAKE_SOURCE_DIR}/platform/macos/CPackMacDeployQt.cmake.in "${CMAKE_BINARY_DIR}/CPackExternal.cmake" @ONLY)
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${CMAKE_BINARY_DIR}/CPackExternal.cmake")
set(CPACK_EXTERNAL_ENABLE_STAGING ON)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
# install(CODE "
# execute_process(
# COMMAND install_name_tool -add_rpath @executable_path/../Frameworks \"${APP_CONTENTS_DIR}/MacOS/QGIS\"
# WORKING_DIRECTORY \"${CMAKE_INSTALL_PREFIX}\"
# RESULT_VARIABLE result
# )
# if(NOT result EQUAL 0)
# message(FATAL_ERROR \"install_name_tool failed with error code: ${result}\")
# endif()
# ")
endif()
#
#
#
#
# if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
# set(CPACK_GENERATOR "Bundle")
# set(CPACK_PACKAGE_FILE_NAME "${QGIS_APP_NAME}")
# # DragNDrop
# set(CPACK_DMG_FORMAT "ULFO")
# # set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/packaging/osx/background.tiff")
# # Bundle
# set(CPACK_BUNDLE_NAME "${QGIS_APP_NAME}")
# configure_file("${CMAKE_SOURCE_DIR}/macos/app.info.plist.in" "${CMAKE_BINARY_DIR}/mac/Info.plist")
# set(CPACK_BUNDLE_PLIST "${CMAKE_BINARY_DIR}/mac/Info.plist")
# set(CPACK_BUNDLE_ICON "${CMAKE_SOURCE_DIR}/images/icons/mac/qgis.icns")
#
# if(WITH_DESKTOP)
# install(PROGRAMS $<TARGET_FILE:${QGIS_APP_NAME}> DESTINATION .)
# endif()
# install(FILES ${CPACK_BUNDLE_PLIST} DESTINATION .)
#
# set(VCPKG_BASE_DIR "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}")
# install(CODE "
# include(BundleUtilities)
# set(BU_CHMOD_BUNDLE_ITEMS ON)
# set(QT_PLUGIN_IN_BUNDLE \"\")
# message(WARNING \"Fixing plugins\")
# foreach(f ${QT_PLUGIN})
# message(WARNING \"Fixing ${f}\")
# get_filename_component(QT_PLUGIN_ABSOLUTE \"\${CMAKE_INSTALL_PREFIX}/\${f}\" ABSOLUTE)
# list(APPEND QT_PLUGIN_IN_BUNDLE \"\${QT_PLUGIN_ABSOLUTE}\")
# endforeach(f)
# get_filename_component(BUNDLE_PATH \"\${CMAKE_INSTALL_PREFIX}\" ABSOLUTE)
# fixup_bundle(\"\${BUNDLE_PATH}/${APP_BUNDLE_DIR}\" \"\" \"${VCPKG_BASE_DIR}/lib;\${BUNDLE_PATH}/${APP_BUNDLE_DIR}/Contents/Frameworks\")
# ")
# endif()
# set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/_CPack_Packages")
include(CPack)

View File

@ -204,5 +204,5 @@ MACRO(BUILD_SIP_PYTHON_MODULE MODULE_NAME SIP_FILES EXTRA_OBJECTS)
)
ENDIF(WIN32)
INSTALL(TARGETS ${_logical_name} DESTINATION "${Python_SITEARCH}/${_parent_module_path}")
INSTALL(TARGETS ${_logical_name} DESTINATION "${QGIS_PYTHON_INSTALL_DIR}/${_parent_module_path}")
ENDMACRO(BUILD_SIP_PYTHON_MODULE MODULE_NAME SIP_FILES EXTRA_OBJECTS)

View File

@ -5,12 +5,15 @@ endif()
set(VCPKG_BASE_DIR "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}")
if(MSVC)
# At least python3.dll, qgis_analysis.dll and gsl.dll are missing
# Copy everything
file(GLOB ALL_LIBS
"${VCPKG_BASE_DIR}/bin/*.dll"
)
install(FILES ${ALL_LIBS} DESTINATION "bin")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
file(GLOB ALL_LIBS
"${VCPKG_BASE_DIR}/bin/*.dylib"
)
install(FILES ${ALL_LIBS} DESTINATION "${QGIS_LIB_SUBDIR}")
endif()
set(PROJ_DATA_PATH "${VCPKG_BASE_DIR}/share/proj")
@ -19,12 +22,22 @@ if(NOT EXISTS "${PROJ_DATA_PATH}/proj.db")
message(FATAL_ERROR "proj.db not found at ${PROJ_DATA_PATH}/proj.db")
endif()
install(DIRECTORY "${PROJ_DATA_PATH}/" DESTINATION "${CMAKE_INSTALL_DATADIR}/proj")
install(DIRECTORY "${VCPKG_BASE_DIR}/share/gdal/" DESTINATION "${CMAKE_INSTALL_DATADIR}/gdal")
install(DIRECTORY "${VCPKG_BASE_DIR}/bin/Qca/" DESTINATION "bin/Qca") # QCA plugins
install(DIRECTORY "${VCPKG_BASE_DIR}/Qt6/" DESTINATION "bin/Qt6") # qt plugins (qml and others)
if(WITH_BINDINGS)
install(DIRECTORY "${VCPKG_BASE_DIR}/tools/python3/"
DESTINATION "bin"
PATTERN "*.sip" EXCLUDE)
install(DIRECTORY "${PROJ_DATA_PATH}/" DESTINATION "${QGIS_DATA_SUBDIR}/proj")
install(DIRECTORY "${VCPKG_BASE_DIR}/share/gdal/" DESTINATION "${QGIS_DATA_SUBDIR}/gdal")
install(DIRECTORY "${VCPKG_BASE_DIR}/bin/Qca/" DESTINATION "${QGIS_LIB_SUBDIR}/Qca") # QCA plugins
if(MSVC)
install(DIRECTORY "${VCPKG_BASE_DIR}/Qt6/" DESTINATION "${QGIS_LIB_SUBDIR}/Qt6") # qt plugins (qml and others)
else()
install(DIRECTORY "${VCPKG_BASE_DIR}/Qt6/" DESTINATION "${APP_PLUGINS_DIR}/") # qt plugins (qml and others)
endif()
if(WITH_BINDINGS)
# TODO: validate on windows
if(MSVC)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
cmake_path(GET Python_SITEARCH PARENT_PATH _PYTHON_DIR)
install(DIRECTORY "${_PYTHON_DIR}"
DESTINATION "${APP_FRAMEWORKS_DIR}/lib"
PATTERN "*.sip" EXCLUDE)
endif()
endif()

View File

@ -37,11 +37,6 @@
#define QSCINTILLA_VERSION_STR "${QSCINTILLA_VERSION_STR}"
#endif
#if defined( __APPLE__ )
//used by Mac to find system or bundle resources relative to amount of bundling
#define QGIS_MACAPP_BUNDLE ${QGIS_MACAPP_BUNDLE}
#endif
#define PYTHON_VERSION "${Python_VERSION}"
#define PYTHON_VERSION_MAJOR "${Python_VERSION_MAJOR}"
#define PYTHON_VERSION_MINOR "${Python_VERSION_MINOR}"
@ -51,6 +46,8 @@
#define PROJ_VERSION_MINOR ${PROJ_VERSION_MINOR}
#define PROJ_VERSION_PATCH ${PROJ_VERSION_PATCH}
#cmakedefine QGIS_MAC_BUNDLE
#cmakedefine USING_NMAKE
#cmakedefine USING_NINJA

View File

@ -2,5 +2,5 @@
if (WITH_DESKTOP)
file (GLOB ICONS *.icns)
install (FILES ${ICONS}
DESTINATION ${CMAKE_INSTALL_PREFIX}/../Resources)
DESTINATION ${APP_RESOURCES_DIR})
endif()

View File

@ -0,0 +1,34 @@
execute_process(COMMAND install_name_tool -add_rpath @loader_path/../Frameworks ${CPACK_TEMPORARY_DIRECTORY}/@QGIS_APP_NAME@.app/Contents/MacOS/QGIS
WORKING_DIRECTORY @CMAKE_BINARY_DIR@
COMMAND_ERROR_IS_FATAL ANY
)
if(NOT "$ENV{MACOS_CODE_SIGN_IDENTITY}" STREQUAL "")
# -appstore-compliant will strip away odbc, psql and webengine plugins
execute_process(COMMAND "@MACDEPLOYQT_EXECUTABLE@" @QGIS_APP_NAME@.app -codesign=${MACOS_CODE_SIGN_IDENTITY} -sign-for-notarization=${MACOS_CODE_SIGN_IDENTITY}
WORKING_DIRECTORY ${CPACK_TEMPORARY_DIRECTORY}
COMMAND_ERROR_IS_FATAL ANY
)
execute_process(COMMAND create-dmg --volname "@QGIS_APP_NAME@ Installer" --hide-extension @QGIS_APP_NAME@.app --volicon "@CMAKE_SOURCE_DIR@/images/icons/mac/qgis.icns" --background "@CMAKE_SOURCE_DIR@/platform/macos/installer_background.png" --window-pos 200 120 --window-size 512 320 --icon-size 100 --icon "@QGIS_APP_NAME@.app" 130 160 --app-drop-link 400 155 --codesign "${MACOS_CODE_SIGN_IDENTITY}" @CMAKE_BINARY_DIR@/@QGIS_APP_NAME@-Installer.dmg ${CPACK_TEMPORARY_DIRECTORY}/@QGIS_APP_NAME@.app
RESULT_VARIABLE CREATE_DMG_FAILURE)
if(CREATE_DMG_FAILURE)
message(STATUS "Creating dmg failed. Retrying ...")
execute_process(COMMAND create-dmg --volname "@QGIS_APP_NAME@ Installer" --hide-extension @QGIS_APP_NAME@.app --volicon "@CMAKE_SOURCE_DIR@/images/icons/mac/qgis.icns" --background "@CMAKE_SOURCE_DIR@/platform/macos/installer_background.png" --window-pos 200 120 --window-size 512 320 --icon-size 100 --icon "@QGIS_APP_NAME@.app" 130 160 --app-drop-link 400 155 --codesign "${MACOS_CODE_SIGN_IDENTITY}" @CMAKE_BINARY_DIR@/@QGIS_APP_NAME@-Installer.dmg ${CPACK_TEMPORARY_DIRECTORY}/@QGIS_APP_NAME@.app
COMMAND_ERROR_IS_FATAL ANY)
endif()
else()
# -appstore-compliant will strip away odbc, psql and webengine plugins
execute_process(COMMAND "@MACDEPLOYQT_EXECUTABLE@" "@QGIS_APP_NAME@.app"
WORKING_DIRECTORY ${CPACK_TEMPORARY_DIRECTORY}
COMMAND_ERROR_IS_FATAL ANY
)
execute_process(COMMAND create-dmg --volname "@QGIS_APP_NAME@ Installer" --hide-extension @QGIS_APP_NAME@.app --volicon "@CMAKE_SOURCE_DIR@/images/icons/mac/qgis.icns" --background "@CMAKE_SOURCE_DIR@/platform/macos/installer_background.png" --window-pos 200 120 --window-size 512 320 --icon-size 100 --icon "@QGIS_APP_NAME@.app" 130 160 --app-drop-link 400 155 @CMAKE_BINARY_DIR@/@QGIS_APP_NAME@-Installer.dmg ${CPACK_TEMPORARY_DIRECTORY}/@QGIS_APP_NAME@.app
RESULT_VARIABLE CREATE_DMG_FAILURE)
if(CREATE_DMG_FAILURE)
message(STATUS "Creating dmg failed.")
endif()
endif()

View File

@ -0,0 +1,329 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleName</key>
<string>QGIS</string>
<key>CFBundleIdentifier</key>
<string>org.qgis.qgis3</string>
<key>CFBundleExecutable</key>
<string>@QGIS_APP_NAME@</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>QGIS</string>
<key>CFBundleGetInfoString</key>
<string>@QGIS_APP_NAME@ @COMPLETE_VERSION@-@RELEASE_NAME@ (@SHA@), © 2002-2019 QGIS Development Team</string>
<key>CFBundleShortVersionString</key>
<string>@COMPLETE_VERSION@</string>
<key>CFBundleVersion</key>
<string>@COMPLETE_VERSION@ (@SHA@)</string>
<key>CFBundleIconFile</key>
<string>qgis.icns</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CSResourcesFileMapped</key>
<true/>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>QGIS Project document</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleTypeIconFile</key>
<string>qgs.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>qgs</string>
</array>
<key>CFBundleTypeOSTypes</key>
<array>
<string>QGIS</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>QGIS Project zipped container</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleTypeIconFile</key>
<string>qgz.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>qgz</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>ESRI Shape document</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleTypeIconFile</key>
<string>shp.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>shp</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>SDTS document</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleTypeIconFile</key>
<string>ddf.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>ddf</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>MapInfo document</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleTypeIconFile</key>
<string>mif.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>mif</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>GML document</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleTypeIconFile</key>
<string>gml.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>gml</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>GeoTIFF image</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleTypeIconFile</key>
<string>tiff.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>tiff</string>
<string>tif</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>image/tiff</string>
</array>
<key>CFBundleTypeOSTypes</key>
<array>
<string>TIFF</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>ERDAS IMAGINE document</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleTypeIconFile</key>
<string>img.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>img</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>Arc/Info ASCII Grid document</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleTypeIconFile</key>
<string>asc.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>asc</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>DTED document</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleTypeIconFile</key>
<string>dt0.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>dt0</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>JPEG 2000 image</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleTypeIconFile</key>
<string>jp2.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>jp2</string>
</array>
<key>CFBundleTypeMIMETypes</key>
<array>
<string>image/jp2</string>
</array>
<key>CFBundleTypeOSTypes</key>
<array>
<string>jp2 </string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>DEM document</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleTypeIconFile</key>
<string>dem.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>dem</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>QGIS style document</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleTypeIconFile</key>
<string>qml.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>qml</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>Memory layer document</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleTypeIconFile</key>
<string>mldata.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>mldata</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>QGIS composer template</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleTypeIconFile</key>
<string>qpt.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>qpt</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>QGIS layer definition document</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleTypeIconFile</key>
<string>qlr.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>qlr</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>DXF document</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleTypeIconFile</key>
<string>dxf.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>dxf</string>
</array>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>SQLite database</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleTypeIconFile</key>
<string>sqlite.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>sqlite</string>
</array>
</dict>
</array>
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>af</string>
<string>ar</string>
<string>bg</string>
<string>ca_ES</string>
<string>cs_CZ</string>
<string>da_DK</string>
<string>de</string>
<string>el_GR</string>
<string>es</string>
<string>fa</string>
<string>fi</string>
<string>fr</string>
<string>gl_ES</string>
<string>he</string>
<string>hr_HR</string>
<string>hu</string>
<string>id</string>
<string>is</string>
<string>it</string>
<string>ja</string>
<string>ka_GE</string>
<string>ko_KR</string>
<string>lo</string>
<string>lt</string>
<string>lv</string>
<string>mn</string>
<string>nl</string>
<string>no</string>
<string>pl_PL</string>
<string>pt_BR</string>
<string>pt_PT</string>
<string>ro</string>
<string>ru</string>
<string>sk</string>
<string>sl_SI</string>
<string>sq_AL</string>
<string>sr_CS-Latn</string>
<string>sv</string>
<string>ta</string>
<string>th</string>
<string>tr</string>
<string>uk</string>
<string>vi</string>
<string>xh</string>
<string>zh_CN</string>
<string>zh_TW</string>
</array>
<key>LSEnvironment</key>
<dict>
<key>QT_AUTO_SCREEN_SCALE_FACTOR</key>
<string>1</string>
</dict>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSHighResolutionCapable</key>
<string>True</string>
</dict>
</plist>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@ -91,7 +91,7 @@ ELSE()
SET(BINDING_FILES_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
ENDIF()
set(QGIS_PYTHON_DIR ${Python_SITEARCH}/qgis)
set(QGIS_PYTHON_DIR ${QGIS_PYTHON_INSTALL_DIR}/qgis)
# core module
file(GLOB_RECURSE sip_files_core ${BINDING_FILES_ROOT_DIR}/core/*.sip ${BINDING_FILES_ROOT_DIR}/core/*.sip.in)

View File

@ -1,4 +1,4 @@
set (QGIS_PYQT_DIR ${Python_SITEARCH}/qgis/PyQt)
set (QGIS_PYQT_DIR ${QGIS_PYTHON_INSTALL_DIR}/qgis/PyQt)
set(PYQT_COMPAT_FILES
__init__.py

View File

@ -1,6 +1,6 @@
# See ../CMakeLists.txt for info on staged-plugins* and clean-staged-plugins targets
set(QGIS_PYTHON_DIR ${Python_SITEARCH}/qgis)
set(QGIS_PYTHON_DIR ${QGIS_PYTHON_INSTALL_DIR}/qgis)
set(PY_FILES
__init__.py

View File

@ -1,6 +1,6 @@
# See ../CMakeLists.txt for info on staged-plugins* and clean-staged-plugins targets
set(QGIS_PYTHON_DIR ${Python_SITEARCH}/qgis)
set(QGIS_PYTHON_DIR ${QGIS_PYTHON_INSTALL_DIR}/qgis)
set(PY_FILES
__init__.py

View File

@ -351,8 +351,11 @@ void QgsApplication::init( QString profileFolder )
{
if ( sPrefixPath()->isNull() )
{
#if defined(Q_OS_MACOS) || defined(Q_OS_WIN)
#if defined(Q_OS_WIN) || defined(Q_OS_MACOS) && !defined(QGIS_MAC_BUNDLE)
setPrefixPath( applicationDirPath(), true );
#elif defined(QGIS_MAC_BUNDLE)
QDir myDir( applicationDirPath() + QLatin1String( "/../.." ) );
setPrefixPath( myDir.absolutePath(), true );
#elif defined(ANDROID)
// this is "/data/data/org.qgis.qgis" in android
QDir myDir( QDir::homePath() );

View File

@ -218,8 +218,27 @@ void QgsPythonUtilsImpl::init()
}
#endif
// initialize python
Py_Initialize();
PyConfig config;
PyConfig_InitPythonConfig( &config );
#ifdef QGIS_MAC_BUNDLE
// If we package QGIS as a mac app, we deploy Qt plugins into [app]/Contents/PlugIns
if ( qgetenv( "PYTHONHOME" ).isNull() )
{
status = PyConfig_SetString( &config, &config.home, QgsApplication::libraryPath().toStdWString().c_str() );
if ( PyStatus_Exception( status ) )
{
qWarning() << "Failed to set python home";
}
}
#endif
status = Py_InitializeFromConfig( &config );
if ( PyStatus_Exception( status ) )
{
qWarning() << "Failed to initialize from config";
}
PyConfig_Clear( &config );
mPythonEnabled = true;