mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-22 00:06:12 -05:00
424 lines
18 KiB
CMake
424 lines
18 KiB
CMake
file (MAKE_DIRECTORY ${QGIS_PYTHON_OUTPUT_DIRECTORY})
|
|
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${QGIS_PYTHON_OUTPUT_DIRECTORY})
|
|
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${QGIS_PYTHON_OUTPUT_DIRECTORY})
|
|
|
|
# Python plugins and support packages can be staged to PYTHON_OUTPUT_DIRECTORY
|
|
# so plugins will function when app is run from build directory
|
|
|
|
# When staging all plugins, use the following make targets:
|
|
# staged-plugins - stage plugins (usually after repo pull/build and project make)
|
|
# staged-plugins-pyc - stage and byte-compile all
|
|
# clean-staged-plugins - removes the staged plugins' directories
|
|
#
|
|
# NOTE: regular project 'make install' is unaffected
|
|
|
|
# Other target dependencies will be added, per staged resource
|
|
add_custom_target(staged-plugins)
|
|
|
|
# Plugins can also be staged with CMake option at build time
|
|
if(WITH_STAGED_PLUGINS)
|
|
add_custom_target(staged-plugins-on-build ALL DEPENDS staged-plugins)
|
|
endif()
|
|
|
|
# Non-default/non-option-controlled target to stage and compile plugins and extras
|
|
add_custom_target(staged-plugins-pyc DEPENDS staged-plugins
|
|
COMMAND ${Python_EXECUTABLE} -m compileall -q "${PYTHON_OUTPUT_DIRECTORY}"
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
|
COMMENT "Byte-compiling build output/python directory..."
|
|
)
|
|
|
|
# Other custom commands will be added, per staged resource
|
|
add_custom_target(clean-staged-plugins
|
|
COMMAND ${CMAKE_COMMAND} -E remove_directory "${PYTHON_OUTPUT_DIRECTORY}/plugins"
|
|
)
|
|
|
|
# Macro to byte-compile a target's staged Python resource(s)
|
|
macro(PY_COMPILE TARGET_NAME RESOURCE_PATHS)
|
|
if(WITH_PY_COMPILE)
|
|
add_custom_command(TARGET ${TARGET_NAME}
|
|
POST_BUILD
|
|
COMMAND ${Python_EXECUTABLE} -m compileall -q ${RESOURCE_PATHS}
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
|
COMMENT "Byte-compiling staged resource..."
|
|
)
|
|
endif()
|
|
endmacro(PY_COMPILE)
|
|
|
|
add_subdirectory(plugins)
|
|
if (WITH_GUI)
|
|
add_subdirectory(qsci_apis)
|
|
add_subdirectory(console)
|
|
add_subdirectory(pyplugin_installer)
|
|
endif()
|
|
add_subdirectory(PyQt)
|
|
add_subdirectory(ext-libs)
|
|
add_subdirectory(testing)
|
|
add_subdirectory(processing)
|
|
|
|
if(NOT ENABLE_TESTS)
|
|
set(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} TESTS)
|
|
endif()
|
|
|
|
if(NOT ANDROID)
|
|
set(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} ANDROID)
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
|
|
else()
|
|
set(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} ARM)
|
|
endif()
|
|
|
|
# SIP 4.19.7+ can:
|
|
# * prepend auto-generated Python signature to existing Docstrings
|
|
# * document template based classes
|
|
set(DOCSTRINGSTEMPLATE "//")
|
|
if(${SIP_VERSION_STR} VERSION_GREATER 4.19.6)
|
|
set(DEFAULTDOCSTRINGSIGNATURE "%DefaultDocstringSignature \"prepended\"")
|
|
set(DOCSTRINGSTEMPLATE "")
|
|
endif()
|
|
|
|
if(${SIP_VERSION_STR} VERSION_GREATER 4.19.0)
|
|
set(SIP_FINAL "final")
|
|
else()
|
|
set(SIP_FINAL "")
|
|
endif()
|
|
|
|
IF(BUILD_WITH_QT6)
|
|
SET(QSCI_SIP_MOD_NAME Qsci/qscimod6.sip)
|
|
SET(BINDING_FILES_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/PyQt6)
|
|
ELSE()
|
|
SET(QSCI_SIP_MOD_NAME Qsci/qscimod5.sip)
|
|
SET(BINDING_FILES_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
|
ENDIF()
|
|
|
|
set(QGIS_PYTHON_DIR ${Python_SITEARCH}/qgis)
|
|
|
|
# core module
|
|
file(GLOB_RECURSE sip_files_core ${BINDING_FILES_ROOT_DIR}/core/*.sip ${BINDING_FILES_ROOT_DIR}/core/*.sip.in)
|
|
set(SIP_EXTRA_FILES_DEPEND ${sip_files_core})
|
|
set(SIP_EXTRA_OPTIONS ${PYQT_SIP_FLAGS} -g -o -a ${CMAKE_BINARY_DIR}/python/qgis.core.api)
|
|
if((${SIP_VERSION_STR} VERSION_EQUAL 4.19.11) OR (${SIP_VERSION_STR} VERSION_GREATER 4.19.11))
|
|
set(SIP_EXTRA_OPTIONS ${SIP_EXTRA_OPTIONS} -n ${PYQT_SIP_IMPORT})
|
|
endif()
|
|
if(SIP_BUILD_EXECUTABLE)
|
|
install(FILES ${CMAKE_BINARY_DIR}/python/core/build/_core/_core.pyi DESTINATION ${QGIS_PYTHON_DIR})
|
|
elseif((${SIP_VERSION_STR} VERSION_EQUAL 4.18) OR (${SIP_VERSION_STR} VERSION_GREATER 4.18))
|
|
set(SIP_EXTRA_OPTIONS ${SIP_EXTRA_OPTIONS} -y ${QGIS_PYTHON_OUTPUT_DIRECTORY}/_core.pyi)
|
|
install(FILES ${QGIS_PYTHON_OUTPUT_DIRECTORY}/_core.pyi DESTINATION ${QGIS_PYTHON_DIR})
|
|
endif()
|
|
|
|
if((${PYQT_VERSION_STR} VERSION_EQUAL 5.15) OR (${PYQT_VERSION_STR} VERSION_GREATER 5.15))
|
|
set(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} VECTOR_MAPPED_TYPE)
|
|
endif()
|
|
|
|
if(NOT WITH_GUI)
|
|
set(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} HAVE_GUI)
|
|
endif()
|
|
|
|
if(NOT WITH_QTSERIALPORT)
|
|
set(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} HAVE_QTSERIALPORT)
|
|
endif()
|
|
|
|
if(NOT WITH_QTPRINTER)
|
|
set(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} HAVE_QTPRINTER)
|
|
endif()
|
|
|
|
if(NOT WITH_QTWEBENGINE)
|
|
set(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} HAVE_WEBENGINE_SIP)
|
|
endif()
|
|
|
|
# Deprecated annotation supports message only since version 6.9.0 with abi-version 12.16 / 13.9 and above
|
|
if(${SIP_VERSION_STR} VERSION_LESS 6.9.0)
|
|
set(sipabi "")
|
|
elseif(BUILD_WITH_QT6)
|
|
set(sipabi "\n[tool.sip.project]\nabi-version = \"13.9\"")
|
|
else()
|
|
set(sipabi "\n[tool.sip.project]\nabi-version = \"12.16\"")
|
|
endif()
|
|
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/core/project.py.in ${CMAKE_CURRENT_BINARY_DIR}/core/project.py @ONLY)
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/core/pyproject.toml.in ${CMAKE_CURRENT_BINARY_DIR}/core/pyproject.toml @ONLY)
|
|
GENERATE_SIP_PYTHON_MODULE_CODE(qgis._core core/core.sip "${sip_files_core}" cpp_files)
|
|
BUILD_SIP_PYTHON_MODULE(qgis._core core/core.sip ${cpp_files} "" qgis_core)
|
|
set(SIP_CORE_CPP_FILES ${cpp_files})
|
|
|
|
# TODO QGIS 4 : remove this hack when we switch completely to Qt 6 which supports only c++17
|
|
if( ${QT_VERSION_MAJOR} EQUAL 5 AND ( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" ) )
|
|
# Bad hack to fix compilation with gcc 11 - for some reason it's ignoring
|
|
# the c++ standard version set for the target in BUILD_SIP_PYTHON_MODULE!
|
|
add_definitions(-std=c++14)
|
|
endif()
|
|
|
|
if((UNIX OR MINGW) AND SIP_VERSION_STR VERSION_GREATER_EQUAL 4.10 AND SIP_VERSION_STR VERSION_LESS 5.0)
|
|
set(SIP_EXTRA_OPTIONS -P ${SIP_EXTRA_OPTIONS})
|
|
add_definitions(-Dprotected=public)
|
|
elseif((UNIX OR MINGW) AND SIP_VERSION_STR VERSION_GREATER_EQUAL 5.0)
|
|
add_definitions(-Dprotected=public)
|
|
endif()
|
|
|
|
set (PY_MODULES core)
|
|
|
|
if(WITH_ANALYSIS)
|
|
set(PY_MODULES ${PY_MODULES} analysis)
|
|
|
|
if (NOT WITH_PDAL OR (WITH_PDAL AND NOT PDAL_2_5_OR_HIGHER))
|
|
set(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} HAVE_PDAL_PROVIDER)
|
|
endif()
|
|
endif()
|
|
|
|
# gui module
|
|
if (WITH_GUI)
|
|
set(PY_MODULES ${PY_MODULES} gui)
|
|
|
|
file(GLOB_RECURSE sip_files_gui ${BINDING_FILES_ROOT_DIR}/gui/*.sip ${BINDING_FILES_ROOT_DIR}/gui/*.sip.in)
|
|
set(SIP_EXTRA_FILES_DEPEND ${sip_files_core} ${sip_files_gui})
|
|
set(SIP_EXTRA_OPTIONS ${PYQT_SIP_FLAGS} -g -o -a ${CMAKE_BINARY_DIR}/python/qgis.gui.api)
|
|
if((${SIP_VERSION_STR} VERSION_EQUAL 4.19.11) OR (${SIP_VERSION_STR} VERSION_GREATER 4.19.11))
|
|
set(SIP_EXTRA_OPTIONS ${SIP_EXTRA_OPTIONS} -n ${PYQT_SIP_IMPORT})
|
|
endif()
|
|
if(SIP_BUILD_EXECUTABLE)
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/gui/build/_gui/_gui.pyi DESTINATION ${QGIS_PYTHON_DIR})
|
|
elseif((${SIP_VERSION_STR} VERSION_EQUAL 4.18) OR (${SIP_VERSION_STR} VERSION_GREATER 4.18))
|
|
set(SIP_EXTRA_OPTIONS ${SIP_EXTRA_OPTIONS} -y ${QGIS_PYTHON_OUTPUT_DIRECTORY}/_gui.pyi)
|
|
install(FILES ${QGIS_PYTHON_OUTPUT_DIRECTORY}/_gui.pyi DESTINATION ${QGIS_PYTHON_DIR})
|
|
endif()
|
|
if(QSCI_SIP_DIR)
|
|
set(SIP_EXTRA_OPTIONS ${SIP_EXTRA_OPTIONS} -I ${QSCI_SIP_DIR})
|
|
else()
|
|
message(STATUS "Qsci sip file not found - disabling bindings for derived classes")
|
|
set(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} HAVE_QSCI_SIP)
|
|
endif()
|
|
|
|
if(NOT WITH_QTGAMEPAD)
|
|
message(STATUS "QtGamepad not enabled - disabling bindings for derived classes")
|
|
set(SIP_DISABLE_FEATURES ${SIP_DISABLE_FEATURES} HAVE_QTGAMEPAD)
|
|
endif()
|
|
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/gui/project.py.in ${CMAKE_CURRENT_BINARY_DIR}/gui/project.py @ONLY)
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/gui/pyproject.toml.in ${CMAKE_CURRENT_BINARY_DIR}/gui/pyproject.toml @ONLY)
|
|
GENERATE_SIP_PYTHON_MODULE_CODE(qgis._gui gui/gui.sip "${sip_files_gui}" cpp_files)
|
|
BUILD_SIP_PYTHON_MODULE(qgis._gui gui/gui.sip ${cpp_files} "" qgis_core qgis_gui)
|
|
endif()
|
|
|
|
# 3D module
|
|
if (WITH_3D)
|
|
set(PY_MODULES ${PY_MODULES} 3d)
|
|
|
|
file(GLOB_RECURSE sip_files_3d ${BINDING_FILES_ROOT_DIR}/3d/*.sip ${BINDING_FILES_ROOT_DIR}/3d/*.sip.in)
|
|
set(SIP_EXTRA_FILES_DEPEND ${sip_files_core} ${sip_files_3d})
|
|
set(SIP_EXTRA_OPTIONS ${PYQT_SIP_FLAGS} -g -o -a ${CMAKE_BINARY_DIR}/python/qgis.3d_p.api)
|
|
if((${SIP_VERSION_STR} VERSION_EQUAL 4.19.11) OR (${SIP_VERSION_STR} VERSION_GREATER 4.19.11))
|
|
set(SIP_EXTRA_OPTIONS ${SIP_EXTRA_OPTIONS} -n ${PYQT_SIP_IMPORT})
|
|
endif()
|
|
if(SIP_BUILD_EXECUTABLE)
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/3d/build/_3d_p/_3d_p.pyi DESTINATION ${QGIS_PYTHON_DIR})
|
|
elseif((${SIP_VERSION_STR} VERSION_EQUAL 4.18) OR (${SIP_VERSION_STR} VERSION_GREATER 4.18))
|
|
set(SIP_EXTRA_OPTIONS ${SIP_EXTRA_OPTIONS} -y ${QGIS_PYTHON_OUTPUT_DIRECTORY}/3d_p.pyi)
|
|
install(FILES ${QGIS_PYTHON_OUTPUT_DIRECTORY}/_3d_p.pyi DESTINATION ${QGIS_PYTHON_DIR})
|
|
endif()
|
|
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/3d/project.py.in ${CMAKE_CURRENT_BINARY_DIR}/3d/project.py @ONLY)
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/3d/pyproject.toml.in ${CMAKE_CURRENT_BINARY_DIR}/3d/pyproject.toml @ONLY)
|
|
GENERATE_SIP_PYTHON_MODULE_CODE(qgis._3d_p 3d/3d.sip "${sip_files_3d}" cpp_files)
|
|
BUILD_SIP_PYTHON_MODULE(qgis._3d_p 3d/3d.sip ${cpp_files} "" qgis_core qgis_3d)
|
|
endif()
|
|
|
|
# server module
|
|
if (WITH_SERVER AND WITH_SERVER_PLUGINS)
|
|
include_directories(
|
|
../src/server
|
|
${CMAKE_BINARY_DIR}/src/server
|
|
)
|
|
|
|
set(PY_MODULES ${PY_MODULES} server)
|
|
|
|
file(GLOB_RECURSE sip_files_server ${BINDING_FILES_ROOT_DIR}/server/*.sip ${BINDING_FILES_ROOT_DIR}/server/*.sip.in)
|
|
set(SIP_EXTRA_FILES_DEPEND ${sip_files_core} ${sip_files_server})
|
|
set(SIP_EXTRA_OPTIONS ${PYQT_SIP_FLAGS} -g -o -a ${CMAKE_BINARY_DIR}/python/qgis.server.api)
|
|
if((${SIP_VERSION_STR} VERSION_EQUAL 4.19.11) OR (${SIP_VERSION_STR} VERSION_GREATER 4.19.11))
|
|
set(SIP_EXTRA_OPTIONS ${SIP_EXTRA_OPTIONS} -n ${PYQT_SIP_IMPORT})
|
|
endif()
|
|
if(SIP_BUILD_EXECUTABLE)
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/server/build/_server/_server.pyi DESTINATION ${QGIS_PYTHON_DIR})
|
|
elseif((${SIP_VERSION_STR} VERSION_EQUAL 4.18) OR (${SIP_VERSION_STR} VERSION_GREATER 4.18))
|
|
set(SIP_EXTRA_OPTIONS ${SIP_EXTRA_OPTIONS} -y ${QGIS_PYTHON_OUTPUT_DIRECTORY}/_server.pyi)
|
|
install(FILES ${QGIS_PYTHON_OUTPUT_DIRECTORY}/_server.pyi DESTINATION ${QGIS_PYTHON_DIR})
|
|
endif()
|
|
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/server/project.py.in ${CMAKE_CURRENT_BINARY_DIR}/server/project.py @ONLY)
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/server/pyproject.toml.in ${CMAKE_CURRENT_BINARY_DIR}/server/pyproject.toml @ONLY)
|
|
GENERATE_SIP_PYTHON_MODULE_CODE(qgis._server server/server.sip "${sip_files_server}" cpp_files)
|
|
BUILD_SIP_PYTHON_MODULE(qgis._server server/server.sip ${cpp_files} "" qgis_core qgis_server)
|
|
endif()
|
|
|
|
# additional analysis includes
|
|
if(WITH_ANALYSIS)
|
|
include_directories(BEFORE
|
|
${CMAKE_BINARY_DIR}/src/analysis/processing
|
|
${CMAKE_BINARY_DIR}/src/analysis/georeferencing
|
|
${CMAKE_BINARY_DIR}/src/analysis/vector
|
|
${CMAKE_BINARY_DIR}/src/analysis/mesh
|
|
${CMAKE_BINARY_DIR}/src/analysis/raster
|
|
${CMAKE_BINARY_DIR}/src/analysis/network
|
|
${CMAKE_BINARY_DIR}/src/analysis/interpolation
|
|
|
|
if (WITH_PDAL AND NOT PDAL_2_5_OR_HIGHER)
|
|
${CMAKE_SOURCE_DIR}/src/analysis/processing/pdal
|
|
endif()
|
|
)
|
|
|
|
# analysis module
|
|
file(GLOB_RECURSE sip_files_analysis ${BINDING_FILES_ROOT_DIR}/analysis/*.sip ${BINDING_FILES_ROOT_DIR}/analysis/*.sip.in)
|
|
|
|
set(SIP_EXTRA_FILES_DEPEND ${sip_files_core} ${sip_files_analysis})
|
|
set(SIP_EXTRA_OPTIONS ${PYQT_SIP_FLAGS} -g -o -a ${CMAKE_BINARY_DIR}/python/qgis.analysis.api)
|
|
if((${SIP_VERSION_STR} VERSION_EQUAL 4.19.11) OR (${SIP_VERSION_STR} VERSION_GREATER 4.19.11))
|
|
set(SIP_EXTRA_OPTIONS ${SIP_EXTRA_OPTIONS} -n ${PYQT_SIP_IMPORT})
|
|
endif()
|
|
if(SIP_BUILD_EXECUTABLE)
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/analysis/build/_analysis/_analysis.pyi DESTINATION ${QGIS_PYTHON_DIR})
|
|
elseif((${SIP_VERSION_STR} VERSION_EQUAL 4.18) OR (${SIP_VERSION_STR} VERSION_GREATER 4.18))
|
|
set(SIP_EXTRA_OPTIONS ${SIP_EXTRA_OPTIONS} -y ${QGIS_PYTHON_OUTPUT_DIRECTORY}/_analysis.pyi)
|
|
install(FILES ${QGIS_PYTHON_OUTPUT_DIRECTORY}/_analysis.pyi DESTINATION ${QGIS_PYTHON_DIR})
|
|
endif()
|
|
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/analysis/project.py.in ${CMAKE_CURRENT_BINARY_DIR}/analysis/project.py @ONLY)
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/analysis/pyproject.toml.in ${CMAKE_CURRENT_BINARY_DIR}/analysis/pyproject.toml @ONLY)
|
|
GENERATE_SIP_PYTHON_MODULE_CODE(qgis._analysis analysis/analysis.sip "${sip_files_analysis}" cpp_files)
|
|
BUILD_SIP_PYTHON_MODULE(qgis._analysis analysis/analysis.sip ${cpp_files} "" qgis_core qgis_analysis)
|
|
endif()
|
|
|
|
if(WITH_QSCIAPI)
|
|
set(APIS_SRC_DIR "${CMAKE_SOURCE_DIR}/python/qsci_apis")
|
|
set(APIS_OUT_DIR "${CMAKE_BINARY_DIR}/python/qsci_apis")
|
|
|
|
# wait until after python module builds for api files to be available
|
|
set(QGIS_PYTHON_API_FILE "${APIS_OUT_DIR}/PyQGIS.api")
|
|
set(QGIS_PYTHON_PAP_FILE "${APIS_OUT_DIR}/PyQGIS.pap")
|
|
|
|
set(api_modules)
|
|
set(api_files)
|
|
foreach(module ${PY_MODULES})
|
|
set(module_out ${module})
|
|
if(${module} EQUAL "3d")
|
|
set(module_out "3d_p")
|
|
endif()
|
|
set(api_modules ${api_modules} python_module_qgis__${module_out})
|
|
if(NOT SIP_BUILD_EXECUTABLE)
|
|
set(api_files ${api_files} "${CMAKE_BINARY_DIR}/python/qgis.${module}.api")
|
|
else()
|
|
set(api_files ${api_files} "${CMAKE_BINARY_DIR}/python/${module}/build/QGIS.api")
|
|
endif()
|
|
endforeach()
|
|
|
|
# run update/concatenate command
|
|
add_custom_command(
|
|
OUTPUT "${QGIS_PYTHON_API_FILE}"
|
|
DEPENDS ${api_modules}
|
|
COMMAND "${CMAKE_COMMAND}" -D "APIS=${api_files}" -P "${CMAKE_SOURCE_DIR}/cmake/QsciAPI.cmake"
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
|
COMMENT "Generating pyqgis api file" VERBATIM)
|
|
|
|
# generate a .pap file to be immediately installed in QGIS source tree (the default .pap)
|
|
if(NATIVE_Python_EXECUTABLE)
|
|
set(_python ${NATIVE_Python_EXECUTABLE})
|
|
else()
|
|
set(_python ${Python_EXECUTABLE})
|
|
endif()
|
|
|
|
if (QSCI_SIP_DIR)
|
|
configure_file("${APIS_SRC_DIR}/generate_console_pap.py.in" ${CMAKE_BINARY_DIR}/generate_console_pap.py)
|
|
|
|
add_custom_command(
|
|
OUTPUT "${QGIS_PYTHON_PAP_FILE}"
|
|
DEPENDS "${QGIS_PYTHON_API_FILE}"
|
|
COMMAND ${_python} "${CMAKE_BINARY_DIR}/generate_console_pap.py" -platform offscreen "${QGIS_PYTHON_PAP_FILE}" "${APIS_SRC_DIR}" "${APIS_OUT_DIR}"
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
|
COMMENT "Generating pap file for console auto-completion" VERBATIM)
|
|
|
|
ADD_QGIS_RESOURCES("${APIS_OUT_DIR}" "python/qsci_apis" DEST_DATA_FILES "PyQGIS.api;PyQGIS.pap")
|
|
|
|
add_custom_target(pyqgis-pap ALL DEPENDS ${QGIS_PYTHON_API_FILE} ${QGIS_PYTHON_PAP_FILE} ${DEST_DATA_FILES})
|
|
endif()
|
|
|
|
endif()
|
|
|
|
if(WITH_CUSTOM_WIDGETS)
|
|
install(FILES custom_widgets/qgis_customwidgets.py DESTINATION "${PYUIC_WIDGET_PLUGIN_DIRECTORY}")
|
|
endif()
|
|
|
|
# Plugin utilities files to copy to staging or install
|
|
set(PY_FILES
|
|
__init__.py
|
|
utils.py
|
|
user.py
|
|
)
|
|
|
|
add_custom_target(pyutils ALL)
|
|
install(FILES ${PY_FILES} DESTINATION "${QGIS_PYTHON_DIR}")
|
|
|
|
# stage to output to make available when QGIS is run from build directory
|
|
foreach(pyfile ${PY_FILES})
|
|
add_custom_command(TARGET pyutils
|
|
POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${QGIS_PYTHON_OUTPUT_DIRECTORY}"
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${pyfile} "${QGIS_PYTHON_OUTPUT_DIRECTORY}"
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
# DEPENDS ${pyfile}
|
|
)
|
|
PY_COMPILE(pyutils "${QGIS_PYTHON_OUTPUT_DIRECTORY}/${pyfile}")
|
|
endforeach(pyfile)
|
|
|
|
foreach(module ${PY_MODULES})
|
|
set(module_out ${module})
|
|
if(${module} EQUAL "3d")
|
|
set(module_out "3d_p")
|
|
endif()
|
|
set(module_name ${module})
|
|
if(${module} EQUAL "3d")
|
|
set(module_name "_3d")
|
|
endif()
|
|
add_custom_target(py${module} ALL)
|
|
add_dependencies(py${module} python_module_qgis__${module_out})
|
|
|
|
# concat auto_additions/*.py in _module_/__init__.py
|
|
file(GLOB PY_FILES_AUTO_ADDITIONS ${BINDING_FILES_ROOT_DIR}/${module}/auto_additions/*.py)
|
|
set(MONKEYPATCH_INJECTIONS "")
|
|
foreach(pyfile ${PY_FILES_AUTO_ADDITIONS})
|
|
file(READ ${pyfile} CONTENTS)
|
|
string(APPEND MONKEYPATCH_INJECTIONS "${CONTENTS}")
|
|
endforeach(pyfile)
|
|
configure_file(${BINDING_FILES_ROOT_DIR}/${module}/__init__.py.in ${QGIS_PYTHON_OUTPUT_DIRECTORY}/${module_name}/__init__.py @ONLY)
|
|
install(FILES ${QGIS_PYTHON_OUTPUT_DIRECTORY}/${module_name}/__init__.py DESTINATION "${QGIS_PYTHON_DIR}/${module_name}")
|
|
|
|
file(GLOB PY_FILES ${BINDING_FILES_ROOT_DIR}/${module}/*.py)
|
|
install(FILES ${PY_FILES} DESTINATION "${QGIS_PYTHON_DIR}/${module_name}")
|
|
file(GLOB PY_FILES_ADDITIONS ${BINDING_FILES_ROOT_DIR}/${module}/additions/*.py)
|
|
|
|
install(FILES ${PY_FILES_ADDITIONS} DESTINATION "${QGIS_PYTHON_DIR}/${module_name}/additions")
|
|
set(PY_FILES ${PY_FILES} ${PY_FILES_ADDITIONS})
|
|
foreach(pyfile ${PY_FILES})
|
|
file(RELATIVE_PATH rel_pyfile ${BINDING_FILES_ROOT_DIR} ${pyfile})
|
|
get_filename_component(subdir ${rel_pyfile} DIRECTORY)
|
|
|
|
add_custom_command(TARGET py${module}
|
|
POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${QGIS_PYTHON_OUTPUT_DIRECTORY}/${subdir}"
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${pyfile} "${QGIS_PYTHON_OUTPUT_DIRECTORY}/${subdir}"
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
# DEPENDS ${PY_FILES}
|
|
)
|
|
endforeach(pyfile)
|
|
PY_COMPILE(py${module} "${QGIS_PYTHON_OUTPUT_DIRECTORY}/${module_name}")
|
|
|
|
# install class map file
|
|
install(FILES ${BINDING_FILES_ROOT_DIR}/${module}/class_map.yaml DESTINATION "${QGIS_PYTHON_DIR}/${module_name}")
|
|
|
|
# install source sip files
|
|
if(SIP_GLOBAL_INSTALL)
|
|
file(GLOB sip_files ${CMAKE_CURRENT_BINARY_DIR}/${module}/*.sip)
|
|
install(FILES ${sip_files} DESTINATION ${SIP_DEFAULT_SIP_DIR}/qgis/${module})
|
|
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${module}/auto_generated DESTINATION ${SIP_DEFAULT_SIP_DIR}/qgis/${module})
|
|
endif()
|
|
endforeach(module)
|