diff --git a/CMakeLists.txt b/CMakeLists.txt index c090f2a54b81..be4ef7d95488 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,14 +1,15 @@ ############################################################# # CMake settings -cmake_minimum_required(VERSION 3.10.0) +cmake_minimum_required(VERSION 3.12.0) set(CMAKE_COLOR_MAKEFILE ON) set(CMAKE_AUTORCC ON) # set path to additional CMake modules set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) # POLICIES -cmake_policy (SET CMP0048 NEW) -cmake_policy (SET CMP0053 NEW) -cmake_policy (SET CMP0071 NEW) +cmake_policy(SET CMP0048 NEW) +cmake_policy(SET CMP0053 NEW) +cmake_policy(SET CMP0071 NEW) +cmake_policy(SET CMP0094 NEW) # don't relink it only the shared object changes set(CMAKE_LINK_DEPENDS_NO_SHARED ON) @@ -932,16 +933,15 @@ endif() set(QGIS_INSTALL_SYS_LIBS TRUE CACHE BOOL "If set to TRUE install all required system libs in the output package") ############################################################# -# Python build dependency +# Python -find_package(PythonLibrary REQUIRED) set(MIN_PYTHON_VERSION "3.7") -if(${PYTHON_SHORT_VERSION} VERSION_LESS ${MIN_PYTHON_VERSION}) - message(FATAL_ERROR "Python version ${PYTHON_SHORT_VERSION} is too old. Minimum Python version is ${MIN_PYTHON_VERSION}.") -endif() +set(Python_FIND_FRAMEWORK "LAST") -############################################################# -# Python bindings +find_package(Python ${MIN_PYTHON_VERSION} REQUIRED COMPONENTS Interpreter Development) +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 AND NOT WITH_QT6) # python support: check for interpreter, sip, pyqt5 @@ -960,15 +960,15 @@ if (WITH_CORE AND WITH_BINDINGS AND NOT WITH_QT6) set(SIP_CONCAT_PARTS 11) if (NOT BINDINGS_GLOBAL_INSTALL) - set(PYTHON_SITE_PACKAGES_DIR ${QGIS_DATA_DIR}/python) + set(Python_SITEARCH ${QGIS_DATA_DIR}/python) endif() if (WITH_CUSTOM_WIDGETS) set(PYUIC_WIDGET_PLUGIN_DIRECTORY ${PYQT5_MOD_DIR}/uic/widget-plugins/) endif() - endif() + ############################################################# # create qgsconfig.h # installed with app target diff --git a/ChangeLog b/ChangeLog index 47406fef8ca2..02b4cb1c6bca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -256734,7 +256734,7 @@ Nathan Woodrow 2013-09-14 Jürgen E. Fischer 2013-09-13 - fix retrieval of PYTHON_SITE_PACKAGES_DIR - broke debian builds + fix retrieval of Python_SITEARCH - broke debian builds Merge: b14e13388e 2b4e13930d Marco Hugentobler 2013-09-13 diff --git a/cmake/FindLibPython.py b/cmake/FindLibPython.py deleted file mode 100644 index 1a9b1460c943..000000000000 --- a/cmake/FindLibPython.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2007, Simon Edwards -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of the Simon Edwards nor the -# names of its contributors may be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY Simon Edwards ''AS IS'' AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL Simon Edwards BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# FindLibPython.py -# Copyright (c) 2007, Simon Edwards -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - -import sys -import distutils.sysconfig - -print("exec_prefix:%s" % sys.exec_prefix) -print("short_version:%s" % sys.version[:3]) -print("long_version:%s" % sys.version.split()[0]) -print("py_inc_dir:%s" % distutils.sysconfig.get_python_inc()) -print("site_packages_dir:%s" % distutils.sysconfig.get_python_lib(plat_specific=1)) diff --git a/cmake/FindPyQt5.cmake b/cmake/FindPyQt5.cmake index b1a5e65d5ad9..88990331d136 100644 --- a/cmake/FindPyQt5.cmake +++ b/cmake/FindPyQt5.cmake @@ -29,7 +29,7 @@ ELSE(EXISTS PYQT5_VERSION) FIND_FILE(_find_pyqt5_py FindPyQt5.py PATHS ${CMAKE_MODULE_PATH} NO_CMAKE_FIND_ROOT_PATH) - EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${_find_pyqt5_py} OUTPUT_VARIABLE pyqt_config) + EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} ${_find_pyqt5_py} OUTPUT_VARIABLE pyqt_config) IF(pyqt_config) STRING(REGEX REPLACE "^pyqt_version:([^\n]+).*$" "\\1" PYQT5_VERSION ${pyqt_config}) STRING(REGEX REPLACE ".*\npyqt_version_str:([^\n]+).*$" "\\1" PYQT5_VERSION_STR ${pyqt_config}) diff --git a/cmake/FindPythonLibrary.cmake b/cmake/FindPythonLibrary.cmake deleted file mode 100644 index 062ce80dda80..000000000000 --- a/cmake/FindPythonLibrary.cmake +++ /dev/null @@ -1,121 +0,0 @@ -# Find Python -# ~~~~~~~~~~~ -# Find the Python interpreter and related Python directories. -# -# This file defines the following variables: -# -# PYTHON_EXECUTABLE - The path and filename of the Python interpreter. -# -# PYTHON_SHORT_VERSION - The version of the Python interpreter found, -# excluding the patch version number. (e.g. 2.5 and not 2.5.1)) -# -# PYTHON_LONG_VERSION - The version of the Python interpreter found as a human -# readable string. -# -# PYTHON_SITE_PACKAGES_DIR - Location of the Python site-packages directory. -# -# PYTHON_INCLUDE_PATH - Directory holding the python.h include file. -# -# PYTHON_LIBRARY, PYTHON_LIBRARIES- Location of the Python library. - -# Copyright (c) 2007, Simon Edwards -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - - - -INCLUDE(CMakeFindFrameworks) - -if(EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}") - # Already in cache, be silent - set(PYTHONLIBRARY_FOUND TRUE) -else(EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}") - - FIND_PACKAGE(PythonInterp 3) - - if(PYTHONINTERP_FOUND) - FIND_FILE(_find_lib_python_py FindLibPython.py PATHS ${CMAKE_MODULE_PATH} NO_CMAKE_FIND_ROOT_PATH) - EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${_find_lib_python_py} OUTPUT_VARIABLE python_config) - - if(python_config) - STRING(REGEX REPLACE ".*exec_prefix:([^\n]+).*$" "\\1" PYTHON_PREFIX ${python_config}) - STRING(REGEX REPLACE ".*\nshort_version:([^\n]+).*$" "\\1" PYTHON_SHORT_VERSION ${python_config}) - STRING(REGEX REPLACE ".*\nlong_version:([^\n]+).*$" "\\1" PYTHON_LONG_VERSION ${python_config}) - STRING(REGEX REPLACE ".*\npy_inc_dir:([^\n]+).*$" "\\1" PYTHON_INCLUDE_PATH ${python_config}) - if(NOT PYTHON_SITE_PACKAGES_DIR) - if(NOT PYTHON_LIBS_WITH_KDE_LIBS) - STRING(REGEX REPLACE ".*\nsite_packages_dir:([^\n]+).*$" "\\1" PYTHON_SITE_PACKAGES_DIR ${python_config}) - else(NOT PYTHON_LIBS_WITH_KDE_LIBS) - set(PYTHON_SITE_PACKAGES_DIR ${KDE4_LIB_INSTALL_DIR}/python${PYTHON_SHORT_VERSION}/site-packages) - endif(NOT PYTHON_LIBS_WITH_KDE_LIBS) - endif(NOT PYTHON_SITE_PACKAGES_DIR) - STRING(REGEX REPLACE "([0-9]+).([0-9]+)" "\\1\\2" PYTHON_SHORT_VERSION_NO_DOT ${PYTHON_SHORT_VERSION}) - set(PYTHON_LIBRARY_NAMES python${PYTHON_SHORT_VERSION} python${PYTHON_SHORT_VERSION_NO_DOT} python${PYTHON_SHORT_VERSION}m python${PYTHON_SHORT_VERSION_NO_DOT}m) - if(WIN32) - STRING(REPLACE "\\" "/" PYTHON_SITE_PACKAGES_DIR ${PYTHON_SITE_PACKAGES_DIR}) - FIND_LIBRARY(PYTHON_LIBRARY NAMES ${PYTHON_LIBRARY_NAMES} PATHS ${PYTHON_PREFIX}/lib ${PYTHON_PREFIX}/libs) - elseif(APPLE AND QGIS_MAC_DEPS_DIR) - FIND_LIBRARY(PYTHON_LIBRARY NAMES ${PYTHON_LIBRARY_NAMES} PATHS $ENV{LIB_DIR}/lib) - else(WIN32) - FIND_LIBRARY(PYTHON_LIBRARY NAMES ${PYTHON_LIBRARY_NAMES}) - endif(WIN32) - set(PYTHON_INCLUDE_PATH ${PYTHON_INCLUDE_PATH} CACHE FILEPATH "Directory holding the python.h include file" FORCE) - set(PYTHONLIBRARY_FOUND TRUE) - endif(python_config) - - # adapted from cmake's builtin FindPythonLibs - if(APPLE) - # If a framework has been detected in the include path, make sure - # framework's versioned library (not any .dylib) is used for linking - # NOTE: don't rely upon Python.framework/Versions/Current, since that may be 2.7 - if("${PYTHON_INCLUDE_PATH}" MATCHES "Python\\.framework") - set(PYTHON_LIBRARY "") - set(PYTHON_DEBUG_LIBRARY "") - # get clean path to just framework - STRING(REGEX REPLACE "^(.*/Python\\.framework).*$" "\\1" _py_fw "${PYTHON_INCLUDE_PATH}") - if("${_py_fw}" MATCHES "Cellar/python") - # Appears to be a Homebrew Python install; do specific fix ups - # get Homebrew prefix (may not be /usr/local) - STRING(REGEX REPLACE "^(.+)/Cellar.*$" "\\1" _hb_prefix "${_py_fw}") - # prefer the Homebrew prefix framework over only versioned Python keg - set(_py_fw "${_hb_prefix}/Frameworks/Python.framework") - # prefer the symlinked-to Homebrew site-packages over only versioned Python keg - set(PYTHON_SITE_PACKAGES_DIR "${_hb_prefix}/lib/python${PYTHON_SHORT_VERSION}/site-packages") - endif("${_py_fw}" MATCHES "Cellar/python") - # prefer the Headers subdirectory for includes - if(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Headers") - set(PYTHON_INCLUDE_PATH "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Headers" CACHE FILEPATH "Directory holding the python.h include file" FORCE) - endif(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Headers") - endif("${PYTHON_INCLUDE_PATH}" MATCHES "Python\\.framework") - if(NOT PYTHON_LIBRARY) - # ensure the versioned framework's library is defined, instead of relying upon -F search paths - if(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Python") - set(PYTHON_LIBRARY "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Python" CACHE FILEPATH "Python framework library" FORCE) - endif(EXISTS "${_py_fw}/Versions/${PYTHON_SHORT_VERSION}/Python") - endif(NOT PYTHON_LIBRARY) - if(PYTHON_LIBRARY) - set(PYTHONLIBRARY_FOUND TRUE) - endif(PYTHON_LIBRARY) - endif(APPLE) - endif(PYTHONINTERP_FOUND) - - if(PYTHONLIBRARY_FOUND) - if(APPLE) - # keep reference to system or custom python site-packages - # useful during app-bundling operations - set(PYTHON_SITE_PACKAGES_SYS ${PYTHON_SITE_PACKAGES_DIR} CACHE FILEPATH "Directory holding Python site packages") - endif(APPLE) - set(PYTHON_LIBRARIES ${PYTHON_LIBRARY}) - if(NOT PYTHONLIBRARY_FIND_QUIETLY) - message(STATUS "Found Python executable: ${PYTHON_EXECUTABLE}") - message(STATUS "Found Python version: ${PYTHON_LONG_VERSION}") - message(STATUS "Found Python library: ${PYTHON_LIBRARY}") - message(STATUS "Found Python site-packages: ${PYTHON_SITE_PACKAGES_DIR}") - endif(NOT PYTHONLIBRARY_FIND_QUIETLY) - else(PYTHONLIBRARY_FOUND) - if(PYTHONLIBRARY_FIND_REQUIRED) - message(FATAL_ERROR "Could not find Python") - endif(PYTHONLIBRARY_FIND_REQUIRED) - endif(PYTHONLIBRARY_FOUND) - -endif (EXISTS "${PYTHON_INCLUDE_PATH}" AND EXISTS "${PYTHON_LIBRARY}" AND EXISTS "${PYTHON_SITE_PACKAGES_DIR}") diff --git a/cmake/FindQsci.cmake b/cmake/FindQsci.cmake index 0fc5a28dc0a3..ecde37f62f0a 100644 --- a/cmake/FindQsci.cmake +++ b/cmake/FindQsci.cmake @@ -25,7 +25,7 @@ ELSE(QSCI_MOD_VERSION_STR) SET(QSCI_VER 5) - EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${_find_qsci_py} ${QSCI_VER} OUTPUT_VARIABLE qsci_ver) + EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} ${_find_qsci_py} ${QSCI_VER} OUTPUT_VARIABLE qsci_ver) IF(qsci_ver) STRING(REGEX REPLACE "^qsci_version_str:([^\n]+).*$" "\\1" QSCI_MOD_VERSION_STR ${qsci_ver}) diff --git a/cmake/FindSIP.cmake b/cmake/FindSIP.cmake index 35eb9e55f8bd..c61eabddaa23 100644 --- a/cmake/FindSIP.cmake +++ b/cmake/FindSIP.cmake @@ -33,7 +33,7 @@ ELSE(SIP_VERSION) FIND_FILE(_find_sip_py FindSIP.py PATHS ${CMAKE_MODULE_PATH} NO_CMAKE_FIND_ROOT_PATH) - EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config) + EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config) IF(sip_config) STRING(REGEX REPLACE "^sip_version:([^\n]+).*$" "\\1" SIP_VERSION ${sip_config}) STRING(REGEX REPLACE ".*\nsip_version_num:([^\n]+).*$" "\\1" SIP_VERSION_NUM ${sip_config}) diff --git a/cmake/PyQtMacros.cmake b/cmake/PyQtMacros.cmake index 774d0427861e..8458f496eac6 100644 --- a/cmake/PyQtMacros.cmake +++ b/cmake/PyQtMacros.cmake @@ -44,7 +44,7 @@ MACRO(PYQT_WRAP_UI outfiles ) GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE) SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.py) ADD_CUSTOM_COMMAND(OUTPUT ${outfile} - COMMAND ${PYUIC_WRAPPER} "${PYUIC_PROGRAM}" "${PYUIC_WRAPPER_PATH}" "${QGIS_OUTPUT_DIRECTORY}/python" "${PYTHON_EXECUTABLE}" ${infile} -o ${outfile} + COMMAND ${PYUIC_WRAPPER} "${PYUIC_PROGRAM}" "${PYUIC_WRAPPER_PATH}" "${QGIS_OUTPUT_DIRECTORY}/python" "${Python_EXECUTABLE}" ${infile} -o ${outfile} MAIN_DEPENDENCY ${infile} DEPENDS pygui pycore pyqtcompat ) diff --git a/cmake/PythonMacros.cmake b/cmake/PythonMacros.cmake index 222f65d813d7..18ecb29327d5 100644 --- a/cmake/PythonMacros.cmake +++ b/cmake/PythonMacros.cmake @@ -44,7 +44,7 @@ MACRO(PYTHON_INSTALL SOURCE_FILE DESTINATION_DIR) ADD_CUSTOM_COMMAND( TARGET compile_python_files COMMAND ${CMAKE_COMMAND} -E echo ${message} - COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py} + COMMAND ${Python_EXECUTABLE} ${_python_compile_py} ${_bin_py} DEPENDS ${_absfilename} ) ELSE(_abs_bin_py STREQUAL ${_absfilename}) @@ -52,7 +52,7 @@ MACRO(PYTHON_INSTALL SOURCE_FILE DESTINATION_DIR) TARGET compile_python_files COMMAND ${CMAKE_COMMAND} -E echo ${message} COMMAND ${CMAKE_COMMAND} -E copy ${_absfilename} ${_bin_py} - COMMAND ${PYTHON_EXECUTABLE} ${_python_compile_py} ${_bin_py} + COMMAND ${Python_EXECUTABLE} ${_python_compile_py} ${_bin_py} DEPENDS ${_absfilename} ) ENDIF(_abs_bin_py STREQUAL ${_absfilename}) diff --git a/cmake/SIPMacros.cmake b/cmake/SIPMacros.cmake index 520f081d6e94..2cd6505428ce 100644 --- a/cmake/SIPMacros.cmake +++ b/cmake/SIPMacros.cmake @@ -151,7 +151,7 @@ MACRO(BUILD_SIP_PYTHON_MODULE MODULE_NAME SIP_FILES EXTRA_OBJECTS) SET_TARGET_PROPERTIES(${_logical_name} PROPERTIES CXX_VISIBILITY_PRESET default) IF (NOT APPLE) - TARGET_LINK_LIBRARIES(${_logical_name} ${PYTHON_LIBRARY}) + TARGET_LINK_LIBRARIES(${_logical_name} ${Python_LIBRARIES}) ENDIF (NOT APPLE) TARGET_LINK_LIBRARIES(${_logical_name} ${EXTRA_LINK_LIBRARIES}) IF (APPLE) @@ -172,5 +172,5 @@ MACRO(BUILD_SIP_PYTHON_MODULE MODULE_NAME SIP_FILES EXTRA_OBJECTS) ) ENDIF(WIN32) - INSTALL(TARGETS ${_logical_name} DESTINATION "${PYTHON_SITE_PACKAGES_DIR}/${_parent_module_path}") + INSTALL(TARGETS ${_logical_name} DESTINATION "${Python_SITEARCH}/${_parent_module_path}") ENDMACRO(BUILD_SIP_PYTHON_MODULE MODULE_NAME SIP_FILES EXTRA_OBJECTS) diff --git a/cmake/UsePythonTest.cmake b/cmake/UsePythonTest.cmake index 3812c1641cc7..b8b61533b4a1 100644 --- a/cmake/UsePythonTest.cmake +++ b/cmake/UsePythonTest.cmake @@ -19,9 +19,6 @@ # For details see the accompanying COPYING-CMAKE-SCRIPTS # -# Need python interpreter: -FIND_PACKAGE(PythonInterp 3 REQUIRED) -MARK_AS_ADVANCED(PYTHON_EXECUTABLE) MACRO(ADD_PYTHON_TEST TESTNAME FILENAME) GET_SOURCE_FILE_PROPERTY(loc ${FILENAME} LOCATION) @@ -84,9 +81,9 @@ MESSAGE(\"export LD_LIBRARY_PATH=\$ENV{LD_LIBRARY_PATH}\") FILE(APPEND ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME}.cmake " MESSAGE(\"export PYTHONPATH=\$ENV{PYTHONPATH}\") -MESSAGE(STATUS \"Running ${PYTHON_TEST_WRAPPER_PROCESSED} ${PYTHON_EXECUTABLE} ${loc} ${wo_semicolon}\") +MESSAGE(STATUS \"Running ${PYTHON_TEST_WRAPPER_PROCESSED} ${Python_EXECUTABLE} ${loc} ${wo_semicolon}\") EXECUTE_PROCESS( - COMMAND ${PYTHON_TEST_WRAPPER_PROCESSED} ${PYTHON_EXECUTABLE} ${loc} ${wo_semicolon} + COMMAND ${PYTHON_TEST_WRAPPER_PROCESSED} ${Python_EXECUTABLE} ${loc} ${wo_semicolon} RESULT_VARIABLE import_res ) # Pass the output back to ctest @@ -114,5 +111,5 @@ MACRO(ADD_PYTHON_COMPILEALL_TEST DIRNAME) # Find the python script: GET_FILENAME_COMPONENT(PYTHON_COMPILE_ALL_PY "${temp_path}/../compileall.py" ABSOLUTE) # add test, use DIRNAME to create unique name for the test: - ADD_TEST(COMPILE_ALL-${DIRNAME} ${PYTHON_EXECUTABLE} "${PYTHON_COMPILE_ALL_PY}" -q ${DIRNAME}) + ADD_TEST(COMPILE_ALL-${DIRNAME} ${Python_EXECUTABLE} "${PYTHON_COMPILE_ALL_PY}" -q ${DIRNAME}) ENDMACRO(ADD_PYTHON_COMPILEALL_TEST) diff --git a/cmake/modules/coverage/CodeCoverage.cmake b/cmake/modules/coverage/CodeCoverage.cmake index e0b69e76ff55..b19a87acf0fe 100644 --- a/cmake/modules/coverage/CodeCoverage.cmake +++ b/cmake/modules/coverage/CodeCoverage.cmake @@ -145,9 +145,9 @@ ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE # Pass them in list form, e.g.: "-j;2" for -j 2 FUNCTION(SETUP_TARGET_FOR_COVERAGE_COBERTURA _targetname _testrunner _outputname) - IF(NOT PYTHON_EXECUTABLE) + IF(NOT Python_EXECUTABLE) MESSAGE(FATAL_ERROR "Python not found! Aborting...") - ENDIF() # NOT PYTHON_EXECUTABLE + ENDIF() # NOT Python_EXECUTABLE IF(NOT GCOVR_PATH) MESSAGE(FATAL_ERROR "gcovr not found! Aborting...") diff --git a/i18n/CMakeLists.txt b/i18n/CMakeLists.txt index c1ef505c006f..6105f23c22fb 100644 --- a/i18n/CMakeLists.txt +++ b/i18n/CMakeLists.txt @@ -31,7 +31,7 @@ if (UNIX AND NOT APPLE AND PYQT5_FOUND) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/org.qgis.qgis.desktop ${CMAKE_BINARY_DIR}/org.qgis.qgis.appdata.xml WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" - COMMAND ${PYTHON_EXECUTABLE} + COMMAND ${Python_EXECUTABLE} ARGS ${CMAKE_SOURCE_DIR}/scripts/ts2appinfo.py "${CMAKE_BINARY_DIR}" COMMENT "Updating appinfo files..." DEPENDS ${QM_FILES} ${CMAKE_SOURCE_DIR}/linux/org.qgis.qgis.desktop.in ${CMAKE_SOURCE_DIR}/linux/org.qgis.qgis.appdata.xml.in diff --git a/ms-windows/osgeo4w/package-nightly.cmd b/ms-windows/osgeo4w/package-nightly.cmd index 20091f62e7f3..f1e89aaf8332 100644 --- a/ms-windows/osgeo4w/package-nightly.cmd +++ b/ms-windows/osgeo4w/package-nightly.cmd @@ -143,7 +143,7 @@ cmake -G "%CMAKEGEN%" ^ -D SPATIALITE_LIBRARY=%O4W_ROOT%/lib/spatialite_i.lib ^ -D PYTHON_EXECUTABLE=%O4W_ROOT%/bin/python3.exe ^ -D SIP_BINARY_PATH=%PYTHONHOME:\=/%/sip.exe ^ - -D PYTHON_INCLUDE_PATH=%PYTHONHOME:\=/%/include ^ + -D PYTHON_INCLUDE_DIR=%PYTHONHOME:\=/%/include ^ -D PYTHON_LIBRARY=%PYTHONHOME:\=/%/libs/%PYVER%.lib ^ -D QT_LIBRARY_DIR=%O4W_ROOT%/lib ^ -D QT_HEADERS_DIR=%O4W_ROOT%/apps/qt5/include ^ diff --git a/ms-windows/osgeo4w/package.cmd b/ms-windows/osgeo4w/package.cmd index 00feaad36229..b305378b6ceb 100644 --- a/ms-windows/osgeo4w/package.cmd +++ b/ms-windows/osgeo4w/package.cmd @@ -142,7 +142,7 @@ cmake -G "%CMAKEGEN%" ^ -D SPATIALITE_LIBRARY=%O4W_ROOT%/lib/spatialite_i.lib ^ -D PYTHON_EXECUTABLE=%O4W_ROOT%/bin/python3.exe ^ -D SIP_BINARY_PATH=%PYTHONHOME:\=/%/sip.exe ^ - -D PYTHON_INCLUDE_PATH=%PYTHONHOME:\=/%/include ^ + -D PYTHON_INCLUDE_DIR=%PYTHONHOME:\=/%/include ^ -D PYTHON_LIBRARY=%PYTHONHOME:\=/%/libs/%PYVER%.lib ^ -D QT_LIBRARY_DIR=%O4W_ROOT%/lib ^ -D QT_HEADERS_DIR=%O4W_ROOT%/apps/qt5/include ^ diff --git a/postinstall/PostInstall.cmake.in b/postinstall/PostInstall.cmake.in index da6d2e8d10de..e4471dc3f4d5 100644 --- a/postinstall/PostInstall.cmake.in +++ b/postinstall/PostInstall.cmake.in @@ -5,7 +5,7 @@ CMAKE_POLICY(SET CMP0012 NEW) IF(@WITH_PY_COMPILE@) MESSAGE(STATUS "Byte-compiling core Python utilities and plugins...") # exclude Python 3 modules in PyQt4.uic package - EXECUTE_PROCESS(COMMAND @PYTHON_EXECUTABLE@ -m compileall -q -x ".*uic.port_v3.*" "$ENV{DESTDIR}@CMAKE_INSTALL_PREFIX@/@QGIS_DATA_DIR@/python") + EXECUTE_PROCESS(COMMAND @Python_EXECUTABLE@ -m compileall -q -x ".*uic.port_v3.*" "$ENV{DESTDIR}@CMAKE_INSTALL_PREFIX@/@QGIS_DATA_DIR@/python") ENDIF(@WITH_PY_COMPILE@) set(ENV{QGIS_PREFIX_PATH} "$ENV{DESTDIR}@CMAKE_INSTALL_PREFIX@") diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 6712b846a769..d4dd9277a947 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -25,7 +25,7 @@ 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}" + COMMAND ${Python_EXECUTABLE} -m compileall -q "${PYTHON_OUTPUT_DIRECTORY}" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" COMMENT "Byte-compiling build output/python directory..." ) @@ -40,7 +40,7 @@ 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} + COMMAND ${Python_EXECUTABLE} -m compileall -q ${RESOURCE_PATHS} WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" COMMENT "Byte-compiling staged resource..." ) @@ -51,7 +51,7 @@ endmacro(PY_COMPILE) 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} + 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" ) @@ -69,7 +69,7 @@ add_subdirectory(testing) add_subdirectory(processing) include_directories(SYSTEM - ${PYTHON_INCLUDE_PATH} + ${Python_INCLUDE_DIRS} ${SIP_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} @@ -273,7 +273,7 @@ if(WITH_ANALYSIS) BUILD_SIP_PYTHON_MODULE(qgis._analysis analysis/analysis.sip ${cpp_files} "" qgis_core qgis_analysis) endif() -set(QGIS_PYTHON_DIR ${PYTHON_SITE_PACKAGES_DIR}/qgis) +set(QGIS_PYTHON_DIR ${Python_SITEARCH}/qgis) if(WITH_QSCIAPI) # wait until after python module builds for api files to be available @@ -303,7 +303,7 @@ if(WITH_QSCIAPI) set(PAP_NAME "pyqgis.pap") add_custom_command(TARGET qsci-pap-src POST_BUILD - COMMAND ${PYTHON_EXECUTABLE} "${APIS_SRC_DIR}/generate_console_pap.py" "${APIS_SRC_DIR}/${PAP_NAME}" "${APIS_SRC_DIR}" "${APIS_BIN_DIR}" + COMMAND ${Python_EXECUTABLE} "${APIS_SRC_DIR}/generate_console_pap.py" "${APIS_SRC_DIR}/${PAP_NAME}" "${APIS_SRC_DIR}" "${APIS_BIN_DIR}" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" COMMENT "Generating ${PAP_NAME} for console auto-completion (MAY TAKE > 1 MINUTE!)" VERBATIM) endif() diff --git a/python/PyQt/CMakeLists.txt b/python/PyQt/CMakeLists.txt index a3fc2cab773d..60b08724ab74 100644 --- a/python/PyQt/CMakeLists.txt +++ b/python/PyQt/CMakeLists.txt @@ -1,4 +1,4 @@ -set (QGIS_PYQT_DIR ${PYTHON_SITE_PACKAGES_DIR}/qgis/PyQt) +set (QGIS_PYQT_DIR ${Python_SITEARCH}/qgis/PyQt) set (PYTHON_OUTPUT_DIRECTORY ${QGIS_OUTPUT_DIRECTORY}/python/qgis/PyQt) set(PYQT_COMPAT_FILES diff --git a/python/processing/CMakeLists.txt b/python/processing/CMakeLists.txt index 2efaa00aaa5b..0d828ae3b4a4 100644 --- a/python/processing/CMakeLists.txt +++ b/python/processing/CMakeLists.txt @@ -1,6 +1,6 @@ # See ../CMakeLists.txt for info on staged-plugins* and clean-staged-plugins targets -set(QGIS_PYTHON_DIR ${PYTHON_SITE_PACKAGES_DIR}/qgis) +set(QGIS_PYTHON_DIR ${Python_SITEARCH}/qgis) set (PYTHON_OUTPUT_DIRECTORY ${QGIS_OUTPUT_DIRECTORY}/python) set (NAME processing) diff --git a/python/testing/CMakeLists.txt b/python/testing/CMakeLists.txt index bca8fe0ffb0b..89b1244f2d09 100644 --- a/python/testing/CMakeLists.txt +++ b/python/testing/CMakeLists.txt @@ -1,6 +1,6 @@ # See ../CMakeLists.txt for info on staged-plugins* and clean-staged-plugins targets -set(QGIS_PYTHON_DIR ${PYTHON_SITE_PACKAGES_DIR}/qgis) +set(QGIS_PYTHON_DIR ${Python_SITEARCH}/qgis) set (PYTHON_OUTPUT_DIRECTORY ${QGIS_OUTPUT_DIRECTORY}/python) set(PY_FILES diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index f84a28e113f9..8b3c33cc91d6 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -783,7 +783,7 @@ endif() string(REPLACE "\(" "\\(" JSON_HELP_FILES "${JSON_HELP_FILES}") string(REPLACE "\)" "\\)" JSON_HELP_FILES "${JSON_HELP_FILES}") add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/qgsexpression_texts.cpp - COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripts/process_function_template.py ${CMAKE_CURRENT_BINARY_DIR}/qgsexpression_texts.cpp.temp + COMMAND ${Python_EXECUTABLE} ${CMAKE_SOURCE_DIR}/scripts/process_function_template.py ${CMAKE_CURRENT_BINARY_DIR}/qgsexpression_texts.cpp.temp COMMAND ${CMAKE_COMMAND} -DSRC=${CMAKE_CURRENT_BINARY_DIR}/qgsexpression_texts.cpp.temp -DDST=${CMAKE_CURRENT_BINARY_DIR}/qgsexpression_texts.cpp -P ${CMAKE_SOURCE_DIR}/cmake/CopyIfChanged.cmake DEPENDS ${JSON_HELP_FILES} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index ebf6d62a398c..308027a94055 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -10,7 +10,7 @@ target_include_directories(qgispython PUBLIC ${CMAKE_BINARY_DIR}/src/python ) target_include_directories(qgispython SYSTEM PRIVATE - ${PYTHON_INCLUDE_PATH} + ${Python_INCLUDE_DIRS} ) set_target_properties(qgispython PROPERTIES @@ -27,7 +27,7 @@ endif() target_link_libraries(qgispython qgis_core - ${PYTHON_LIBRARY} + ${Python_LIBRARIES} ${OPENPTY_LIBRARY} )