diff --git a/cmake/python.cmake b/cmake/python.cmake index b84be86aba9..9926e944d42 100644 --- a/cmake/python.cmake +++ b/cmake/python.cmake @@ -9,5 +9,29 @@ if (WIN32) set(ENV{PYTHONIOENCODING} "utf-8") endif() -find_package(Python3 3.6 REQUIRED) +set(PYTHON_MINIMUM_REQUIRED 3.6) + +# We are using foreach here, instead of find_program(PYTHON_EXECUTABLE_SYSTEM_DEFAULT "python" "python3") +# cause just using find_program directly could result in a python2.7 as python, and not finding a valid python3. +foreach(PYTHON_PREFER ${PYTHON_PREFER} "python" "python3") + find_program(PYTHON_PREFER_EXECUTABLE ${PYTHON_PREFER}) + if(PYTHON_PREFER_EXECUTABLE) + execute_process (COMMAND "${PYTHON_PREFER_EXECUTABLE}" -c + "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:2]]))" + RESULT_VARIABLE result + OUTPUT_VARIABLE version + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + + if(version VERSION_LESS PYTHON_MINIMUM_REQUIRED) + set_property (CACHE PYTHON_PREFER_EXECUTABLE PROPERTY VALUE "PYTHON_PREFER_EXECUTABLE-NOTFOUND") + else() + set(PYTHON_MINIMUM_REQUIRED ${version}) + set(PYTHON_EXACT EXACT) + break() + endif() + endif() +endforeach() + +find_package(Python3 ${PYTHON_MINIMUM_REQUIRED} REQUIRED ${PYTHON_EXACT}) set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})