# Copyright 2017 Edoardo Pasca # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # #.rst: # FindAnacondaEnvironment # -------------- # # Find Python executable and library for a specific Anaconda environment # # This module finds the Python interpreter for a specific Anaconda enviroment, # if installed and determines where the include files and libraries are. # This code sets the following variables: # # :: # PYTHONINTERP_FOUND - if the Python interpret has been found # PYTHON_EXECUTABLE - the Python interpret found # PYTHON_LIBRARY - path to the python library # PYTHON_INCLUDE_PATH - path to where Python.h is found (deprecated) # PYTHON_INCLUDE_DIRS - path to where Python.h is found # PYTHONLIBS_VERSION_STRING - version of the Python libs found (since CMake 2.8.8) # PYTHON_VERSION_MAJOR - major Python version # PYTHON_VERSION_MINOR - minor Python version # PYTHON_VERSION_PATCH - patch Python version function (findPythonForAnacondaEnvironment env) set (EXE "") if (WIN32) set (EXE ".exe") endif() file(TO_CMAKE_PATH ${env}/python${EXE} PYTHON_EXECUTABLE) message("Found " ${PYTHON_EXECUTABLE}) ####### FROM FindPythonInterpr ######## # determine python version string if(PYTHON_EXECUTABLE) execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))" OUTPUT_VARIABLE _VERSION RESULT_VARIABLE _PYTHON_VERSION_RESULT ERROR_QUIET) if(NOT _PYTHON_VERSION_RESULT) string(REPLACE ";" "." _PYTHON_VERSION_STRING "${_VERSION}") list(GET _VERSION 0 _PYTHON_VERSION_MAJOR) list(GET _VERSION 1 _PYTHON_VERSION_MINOR) list(GET _VERSION 2 _PYTHON_VERSION_PATCH) if(PYTHON_VERSION_PATCH EQUAL 0) # it's called "Python 2.7", not "2.7.0" string(REGEX REPLACE "\\.0$" "" _PYTHON_VERSION_STRING "${PYTHON_VERSION_STRING}") endif() else() # sys.version predates sys.version_info, so use that execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c "import sys; sys.stdout.write(sys.version)" OUTPUT_VARIABLE _VERSION RESULT_VARIABLE _PYTHON_VERSION_RESULT ERROR_QUIET) if(NOT _PYTHON_VERSION_RESULT) string(REGEX REPLACE " .*" "" _PYTHON_VERSION_STRING "${_VERSION}") string(REGEX REPLACE "^([0-9]+)\\.[0-9]+.*" "\\1" _PYTHON_VERSION_MAJOR "${PYTHON_VERSION_STRING}") string(REGEX REPLACE "^[0-9]+\\.([0-9])+.*" "\\1" _PYTHON_VERSION_MINOR "${PYTHON_VERSION_STRING}") if(PYTHON_VERSION_STRING MATCHES "^[0-9]+\\.[0-9]+\\.([0-9]+)") set(PYTHON_VERSION_PATCH "${CMAKE_MATCH_1}") else() set(PYTHON_VERSION_PATCH "0") endif() else() # sys.version was first documented for Python 1.5, so assume # this is older. set(PYTHON_VERSION_STRING "1.4" PARENT_SCOPE) set(PYTHON_VERSION_MAJOR "1" PARENT_SCOPE) set(PYTHON_VERSION_MINOR "4" PARENT_SCOPE) set(PYTHON_VERSION_PATCH "0" PARENT_SCOPE) endif() endif() unset(_PYTHON_VERSION_RESULT) unset(_VERSION) endif() ############################################### set (PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} PARENT_SCOPE) set (PYTHONINTERP_FOUND "ON" PARENT_SCOPE) set (PYTHON_VERSION_STRING ${_PYTHON_VERSION_STRING} PARENT_SCOPE) set (PYTHON_VERSION_MAJOR ${_PYTHON_VERSION_MAJOR} PARENT_SCOPE) set (PYTHON_VERSION_MINOR ${_PYTHON_VERSION_MINOR} PARENT_SCOPE) set (PYTHON_VERSION_PATCH ${_PYTHON_VERSION_PATCH} PARENT_SCOPE) message("My version found " ${PYTHON_VERSION_STRING}) endfunction() set(Python_ADDITIONAL_VERSIONS 3.5) find_package(PythonInterp) if (PYTHONINTERP_FOUND) message("Found interpret " ${PYTHON_EXECUTABLE}) message("Python Library " ${PYTHON_LIBRARY}) message("Python Include Dir " ${PYTHON_INCLUDE_DIR}) message("Python Include Path " ${PYTHON_INCLUDE_PATH}) foreach(pv ${PYTHON_VERSION_STRING}) message("Found interpret " ${pv}) endforeach() endif() find_package(PythonLibs) if (PYTHONLIB_FOUND) message("Found PythonLibs PYTHON_LIBRARIES " ${PYTHON_LIBRARIES}) message("Found PythonLibs PYTHON_INCLUDE_PATH " ${PYTHON_INCLUDE_PATH}) message("Found PythonLibs PYTHON_INCLUDE_DIRS " ${PYTHON_INCLUDE_DIRS}) message("Found PythonLibs PYTHONLIBS_VERSION_STRING " ${PYTHONLIBS_VERSION_STRING} ) else() message("No PythonLibs Found") endif() function(findPythonPackagesPath) ### https://openlab.ncl.ac.uk/gitlab/john.shearer/clappertracker/raw/549885e5decd37f7b23e9c1fd39e86f207156795/src/3rdparty/opencv/cmake/OpenCVDetectPython.cmake ### if(CMAKE_HOST_UNIX) execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import *; print get_python_lib()" RESULT_VARIABLE PYTHON_CVPY_PROCESS OUTPUT_VARIABLE PYTHON_STD_PACKAGES_PATH OUTPUT_STRIP_TRAILING_WHITESPACE) if("${PYTHON_STD_PACKAGES_PATH}" MATCHES "site-packages") set(_PYTHON_PACKAGES_PATH "python${PYTHON_VERSION_MAJOR_MINOR}/site-packages") else() #debian based assumed, install to the dist-packages. set(_PYTHON_PACKAGES_PATH "python${PYTHON_VERSION_MAJOR_MINOR}/dist-packages") endif() if(EXISTS "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/${PYTHON_PACKAGES_PATH}") set(_PYTHON_PACKAGES_PATH "lib${LIB_SUFFIX}/${_PYTHON_PACKAGES_PATH}") else() set(_PYTHON_PACKAGES_PATH "lib/${_PYTHON_PACKAGES_PATH}") endif() elseif(CMAKE_HOST_WIN32) get_filename_component(PYTHON_PATH "${PYTHON_EXECUTABLE}" PATH) file(TO_CMAKE_PATH "${PYTHON_PATH}" PYTHON_PATH) if(NOT EXISTS "${PYTHON_PATH}/Lib/site-packages") unset(PYTHON_PATH) get_filename_component(PYTHON_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${PYTHON_VERSION_MAJOR_MINOR}\\InstallPath]" ABSOLUTE) if(NOT PYTHON_PATH) get_filename_component(PYTHON_PATH "[HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${PYTHON_VERSION_MAJOR_MINOR}\\InstallPath]" ABSOLUTE) endif() file(TO_CMAKE_PATH "${PYTHON_PATH}" PYTHON_PATH) endif() set(_PYTHON_PACKAGES_PATH "${PYTHON_PATH}/Lib/site-packages") endif() SET(PYTHON_PACKAGES_PATH "${_PYTHON_PACKAGES_PATH}" PARENT_SCOPE) endfunction()