mirror of
				https://github.com/qgis/QGIS.git
				synced 2025-10-31 00:06:02 -04:00 
			
		
		
		
	map controller classes which expose QGamepad functionality Especially handy because the underlying QGamepad classes are not accessible to Python
		
			
				
	
	
		
			439 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			439 lines
		
	
	
		
			17 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)
 | |
| 
 | |
| # Macro to auto migrate resources
 | |
| macro(PY_2TO3 TARGET_NAME RESOURCE_PATHS)
 | |
|   add_custom_command(TARGET ${TARGET_NAME}
 | |
|     POST_BUILD
 | |
|     COMMAND "${Python_EXECUTABLE}" "${CMAKE_SOURCE_DIR}/scripts/2to3" --no-diffs -w ${RESOURCE_PATHS}
 | |
|     WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
 | |
|     COMMENT "Porting ${RESOURCE_PATHS} to Python 3 and Qt5"
 | |
|   )
 | |
| endmacro(PY_2TO3)
 | |
| 
 | |
| 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)
 | |
| 
 | |
| include_directories(SYSTEM
 | |
|   ${Python_INCLUDE_DIRS}
 | |
|   ${SIP_INCLUDE_DIR}
 | |
|   ${QT_QTCORE_INCLUDE_DIR}
 | |
|   ${QT_QTGUI_INCLUDE_DIR}
 | |
|   ${QT_QTNETWORK_INCLUDE_DIR}
 | |
|   ${QT_QTSVG_INCLUDE_DIR}
 | |
|   ${QT_QTXML_INCLUDE_DIR}
 | |
|   ${GDAL_INCLUDE_DIR}
 | |
|   ${GEOS_INCLUDE_DIR}
 | |
|   ${QWT_INCLUDE_DIR}
 | |
|   ${QCA_INCLUDE_DIR}
 | |
|   ${QTKEYCHAIN_INCLUDE_DIR}
 | |
|   ${SQLITE3_INCLUDE_DIR}
 | |
|   ${SPATIALINDEX_INCLUDE_DIR}
 | |
| )
 | |
| 
 | |
| if (${SIP_VERSION_STR} VERSION_LESS 5)
 | |
|   include_directories(SYSTEM
 | |
|     ${SIP_INCLUDE_DIR}
 | |
|   )
 | |
| endif()
 | |
| 
 | |
| if (WITH_GUI)
 | |
|   include_directories(SYSTEM
 | |
|     ${QSCINTILLA_INCLUDE_DIR}
 | |
|   )
 | |
| endif()
 | |
| 
 | |
| include_directories(
 | |
|   ${CMAKE_SOURCE_DIR}/src/plugins
 | |
| 
 | |
|   ${CMAKE_BINARY_DIR}  # qgsconfig.h, qgsversion.h
 | |
|   ${CMAKE_BINARY_DIR}/src/ui
 | |
|   ${CMAKE_BINARY_DIR}/src/analysis
 | |
| )
 | |
| 
 | |
| if (WITH_GUI)
 | |
|   include_directories(
 | |
| 
 | |
|   )
 | |
| endif()
 | |
| 
 | |
| if (WITH_PDAL)
 | |
|   include_directories(SYSTEM "${PDAL_INCLUDE_DIR}")
 | |
| endif()
 | |
| 
 | |
| 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)
 | |
| ELSE()
 | |
|   SET(QSCI_SIP_MOD_NAME Qsci/qscimod5.sip)
 | |
| ENDIF()
 | |
| 
 | |
| set(QGIS_PYTHON_DIR ${Python_SITEARCH}/qgis)
 | |
| 
 | |
| # core module
 | |
| file(GLOB_RECURSE sip_files_core core/*.sip 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()
 | |
| 
 | |
| 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})
 | |
| 
 | |
| if(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 gui/*.sip 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)
 | |
|   include_directories(
 | |
|     ${QT5_3DEXTRA_INCLUDE_DIR}
 | |
|   )
 | |
|   set(PY_MODULES ${PY_MODULES} 3d)
 | |
| 
 | |
|   file(GLOB_RECURSE sip_files_3d 3d/*.sip 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.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/_3d.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}/_qgis3d.pyi)
 | |
|     install(FILES ${QGIS_PYTHON_OUTPUT_DIRECTORY}/_qgis3d.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 3d/3d.sip "${sip_files_3d}" cpp_files)
 | |
|   BUILD_SIP_PYTHON_MODULE(qgis._3d 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 server/*.sip 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 analysis/*.sip 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(api_modules ${api_modules} python_module_qgis__${module})
 | |
|     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()
 | |
|   add_custom_command(
 | |
|     OUTPUT "${QGIS_PYTHON_PAP_FILE}"
 | |
|     DEPENDS "${QGIS_PYTHON_API_FILE}"
 | |
|     COMMAND ${_python} "${APIS_SRC_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()
 | |
| 
 | |
| 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})
 | |
|   add_custom_target(py${module} ALL)
 | |
|   add_dependencies(py${module} python_module_qgis__${module})
 | |
| 
 | |
|   # concat auto_additions/*.py in _module_/__init__.py
 | |
|   file(GLOB PY_FILES_AUTO_ADDITIONS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${module}/auto_additions/*.py)
 | |
|   configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${module}/__init__.py.in ${QGIS_PYTHON_OUTPUT_DIRECTORY}/${module}/__init__.py COPYONLY)
 | |
|   foreach(pyfile ${PY_FILES_AUTO_ADDITIONS})
 | |
|     file(READ ${pyfile} CONTENTS)
 | |
|     file(APPEND ${QGIS_PYTHON_OUTPUT_DIRECTORY}/${module}/__init__.py "${CONTENTS}")
 | |
|   endforeach(pyfile)
 | |
|   install(FILES ${QGIS_PYTHON_OUTPUT_DIRECTORY}/${module}/__init__.py DESTINATION "${QGIS_PYTHON_DIR}/${module}")
 | |
| 
 | |
|   file(GLOB PY_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${module}/*.py)
 | |
|   install(FILES ${PY_FILES} DESTINATION "${QGIS_PYTHON_DIR}/${module}")
 | |
|   file(GLOB PY_FILES_ADDITIONS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${module}/additions/*.py)
 | |
|   install(FILES ${PY_FILES_ADDITIONS} DESTINATION "${QGIS_PYTHON_DIR}/${module}/additions")
 | |
|   set(PY_FILES ${PY_FILES} ${PY_FILES_ADDITIONS})
 | |
|   foreach(pyfile ${PY_FILES})
 | |
|     get_filename_component(subdir ${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}")
 | |
| 
 | |
|   # 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)
 |