diff --git a/find-modules/FindPythonModuleGeneration.cmake b/find-modules/FindPythonModuleGeneration.cmake --- a/find-modules/FindPythonModuleGeneration.cmake +++ b/find-modules/FindPythonModuleGeneration.cmake @@ -132,6 +132,21 @@ add_library(Python::Libs${version} UNKNOWN IMPORTED) set_property(TARGET Python::Libs${version} PROPERTY IMPORTED_LOCATION ${GPB_PYTHON${version}_LIBRARY}) set_property(TARGET Python::Libs${version} PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${GPB_PYTHON${version}_INCLUDE_DIR}) + + set(_default_KDE_INSTALL_USE_PYTHON${version}_SYS_PATHS OFF) + if(NOT DEFINED KDE_INSTALL_USE_PYTHON${version}_SYS_PATHS) + execute_process ( + COMMAND "${GPB_PYTHON${version}_COMMAND}" -c "import sys; from distutils import sysconfig;sys.stdout.write(sysconfig.PREFIX)" + OUTPUT_VARIABLE gpb_python${version}_prefix + ) + if(gpb_python${version}_prefix STREQUAL "${CMAKE_INSTALL_PREFIX}") + message(STATUS "Installing in the same prefix as Python${version}, adopting their path scheme.") + set(_default_KDE_INSTALL_USE_PYTHON${version}_SYS_PATHS ON) + else() + message(STATUS "NOT installing in the same prefix as Python${version}.") + endif() + endif() + endif() endmacro() @@ -176,10 +191,41 @@ _find_python(2 7) _create_imported_python_target(2) +option (KDE_INSTALL_USE_PYTHON3_SYS_PATHS "Install Python3 bindings to the Python3 install dir" + "${_default_KDE_INSTALL_USE_PYTHON3_SYS_PATHS}") +option (KDE_INSTALL_USE_PYTHON2_SYS_PATHS "Install Python2 bindings to the Python2 install dir" + "${_default_KDE_INSTALL_USE_PYTHON2_SYS_PATHS}") + if (NOT _pyversions) _report_NOT_FOUND("At least one python version must be available to use ${CMAKE_FIND_PACKAGE_NAME}.") endif() +foreach(pyversion ${_pyversions}) + + if(KDE_INSTALL_PYTHON${pyversion}DIR) + # Use dir from command line + + elseif(KDE_INSTALL_USE_PYTHON${pyversion}_SYS_PATHS) + if (NOT GPB_PYTHON${pyversion}_SITEARCH) + execute_process ( + COMMAND "${GPB_PYTHON${pyversion}_COMMAND}" -c "import sys; from distutils import sysconfig;sys.stdout.write(sysconfig.get_python_lib(plat_specific=True,standard_lib=False))" + OUTPUT_VARIABLE KDE_INSTALL_PYTHON${pyversion}DIR + ) + endif() + + else() + set(KDE_INSTALL_PYTHON${pyversion}DIR lib/python${pyversion${pyversion}_maj_min}/site-packages) + endif() + + if(NOT IS_ABSOLUTE ${KDE_INSTALL_PYTHON${pyversion}DIR}) + set(KDE_INSTALL_FULL_PYTHON${pyversion}DIR + "${CMAKE_INSTALL_PREFIX}/${KDE_INSTALL_PYTHON${pyversion}DIR}") + else() + set(KDE_INSTALL_FULL_PYTHON${pyversion}DIR "${KDE_INSTALL_PYTHON${pyversion}DIR}") + endif() + +endforeach() + find_program(GBP_SIP_COMMAND sip) if (NOT GBP_SIP_COMMAND) @@ -419,6 +465,7 @@ foreach(pyversion ${_pyversions}) message(STATUS "Found dependencies for python${pyversion}, generating bindings") + message(STATUS "Python${pyversion} install dir: ${KDE_INSTALL_FULL_PYTHON${pyversion}DIR}") execute_process(COMMAND "${CMAKE_COMMAND}" "-DPYTHON_UMBRELLA_MODULE_FILE=${CMAKE_BINARY_DIR}/py${pyversion}/${GPB_PYTHONNAMESPACE}/__init__.py" @@ -442,7 +489,7 @@ OUTPUT_NAME "${GPB_MODULENAME}") if (GPB_SIP_DEPENDS MATCHES PyKF5) - set(_kf5_python_prefix ${CMAKE_INSTALL_PREFIX}/lib/python${pyversion${pyversion}_maj_min}/site-packages) + set(_kf5_python_prefix ${KDE_INSTALL_FULL_PYTHON${pyversion}DIR}) else() set(_kf5_python_prefix ${CMAKE_BINARY_DIR}/py${pyversion}) endif() @@ -452,7 +499,7 @@ ) install(DIRECTORY ${CMAKE_BINARY_DIR}/py${pyversion}/${GPB_PYTHONNAMESPACE} - DESTINATION lib/python${pyversion${pyversion}_maj_min}/site-packages) + DESTINATION ${KDE_INSTALL_PYTHON${pyversion}DIR}) install(FILES ${sip_files} "${CMAKE_CURRENT_BINARY_DIR}/sip/${GPB_PYTHONNAMESPACE}/${GPB_MODULENAME}/${GPB_MODULENAME}mod.sip" DESTINATION share/sip/${GPB_PYTHONNAMESPACE}/${GPB_MODULENAME} )