VersionRange.cmake 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. enable_language(C)
  2. find_package (${PYTHON} ${Python_REQUESTED_VERSION} EXACT COMPONENTS Interpreter)
  3. if (NOT ${PYTHON}_FOUND)
  4. message (FATAL_ERROR "Failed to find ${PYTHON} ${Python_REQUESTED_VERSION}")
  5. endif()
  6. if (Python_REQUESTED_VERSION VERSION_LESS 3.0)
  7. set (IN_VERSION_RANGE 2.0...<3.0)
  8. set (OUT_VERSION_RANGE 2.0...<${${PYTHON}_VERSION})
  9. else()
  10. set (IN_VERSION_RANGE 3.0...<4.0)
  11. set (OUT_VERSION_RANGE 3.0...<${${PYTHON}_VERSION})
  12. endif()
  13. function (FIND_PYTHON EXPECTED_VERSION RANGE)
  14. macro (FIND_PYTHON_PACKAGE)
  15. unset (_${PYTHON}_EXECUTABLE CACHE)
  16. unset (_${PYTHON}_LIBRARY_RELEASE CACHE)
  17. unset (_${PYTHON}_INCLUDE_DIR CACHE)
  18. unset (${PYTHON}_FOUND)
  19. find_package (${PYTHON} ${ARGV})
  20. endmacro()
  21. find_python_package(${RANGE} ${ARGN})
  22. if (EXPECTED_VERSION STREQUAL "NONE")
  23. while (${PYTHON}_FOUND AND ${PYTHON}_VERSION VERSION_GREATER ${Python_REQUESTED_VERSION})
  24. # Possible if multiple versions are installed
  25. # Try with a different range
  26. find_python_package(${Python_REQUESTED_VERSION}.0...<${${PYTHON}_VERSION} ${ARGN})
  27. endwhile()
  28. if (${PYTHON}_FOUND)
  29. message (SEND_ERROR "Unexpectedly found version: ${${PYTHON}_VERSION} for '${PYTHON} ${Python_REQUESTED_VERSION}.0...<${${PYTHON}_VERSION} ${ARGN}'")
  30. endif()
  31. return()
  32. endif()
  33. if (NOT ${PYTHON}_FOUND)
  34. message (SEND_ERROR "Not found: ${PYTHON} ${RANGE} ${ARGN}")
  35. elseif (NOT ${PYTHON}_VERSION VERSION_EQUAL EXPECTED_VERSION)
  36. message (SEND_ERROR "Wrong version: ${${PYTHON}_VERSION} for '${PYTHON} ${RANGE} ${ARGN}'")
  37. endif()
  38. endfunction()
  39. find_python (${${PYTHON}_VERSION} ${IN_VERSION_RANGE} COMPONENTS Interpreter)
  40. if (${PYTHON}_FIND_IMPLEMENTATIONS STREQUAL "IronPython")
  41. find_python (${${PYTHON}_VERSION} ${IN_VERSION_RANGE} COMPONENTS Compiler)
  42. else()
  43. find_python (${${PYTHON}_VERSION} ${IN_VERSION_RANGE} COMPONENTS Development)
  44. endif()
  45. find_python ("NONE" ${OUT_VERSION_RANGE} COMPONENTS Interpreter)
  46. if (${PYTHON}_FIND_IMPLEMENTATIONS STREQUAL "IronPython")
  47. find_python ("NONE" ${OUT_VERSION_RANGE} COMPONENTS Compiler)
  48. else()
  49. find_python ("NONE" ${OUT_VERSION_RANGE} COMPONENTS Development)
  50. endif()
  51. find_python ("NONE" 5...6 COMPONENTS Interpreter)