CMakeLists.txt 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. cmake_minimum_required(VERSION 3.1)
  2. project(TestPython3 C)
  3. include(CTest)
  4. find_package(Python3 2 QUIET)
  5. if (Python3_FOUND)
  6. message (FATAL_ERROR "Wrong python version found: ${Python3_VERSION}")
  7. endif()
  8. find_package(Python3 REQUIRED COMPONENTS Interpreter Development)
  9. if (NOT Python3_FOUND)
  10. message (FATAL_ERROR "Fail to found Python 3")
  11. endif()
  12. if(NOT TARGET Python3::Interpreter)
  13. message(SEND_ERROR "Python2::Interpreter not found")
  14. endif()
  15. if(NOT TARGET Python3::Python)
  16. message(SEND_ERROR "Python2::Python not found")
  17. endif()
  18. if(NOT TARGET Python3::Module)
  19. message(SEND_ERROR "Python2::Module not found")
  20. endif()
  21. Python3_add_library (spam3 MODULE ../spam.c)
  22. target_compile_definitions (spam3 PRIVATE PYTHON3)
  23. add_test (NAME python3_spam3
  24. COMMAND "${CMAKE_COMMAND}" -E env "PYTHONPATH=$<TARGET_FILE_DIR:spam3>"
  25. "${Python3_EXECUTABLE}" -c "import spam3; spam3.system(\"cd\")")
  26. add_test(NAME findpython3_script
  27. COMMAND "${CMAKE_COMMAND}" -DPYTHON_PACKAGE_NAME=Python3
  28. -DPython3_FIND_STRATEGY=${Python3_FIND_STRATEGY}
  29. -P "${CMAKE_CURRENT_LIST_DIR}/../FindPythonScript.cmake")
  30. ## Try a new search specifying only expected ABI
  31. # retrieve ABI of python interpreter
  32. execute_process (COMMAND "${Python3_EXECUTABLE}" -c
  33. "import sys; sys.stdout.write(sys.abiflags)"
  34. RESULT_VARIABLE result
  35. OUTPUT_VARIABLE abi
  36. ERROR_QUIET
  37. OUTPUT_STRIP_TRAILING_WHITESPACE)
  38. if (result)
  39. # assume ABI is not supported
  40. set (abi "")
  41. endif()
  42. # define FIND_ABI variable
  43. if (abi MATCHES "d")
  44. set (Python3_VALID_ABI "ON")
  45. else()
  46. set (Python3_VALID_ABI "OFF")
  47. endif()
  48. if (abi MATCHES "m")
  49. list (APPEND Python3_VALID_ABI "ON")
  50. else()
  51. list (APPEND Python3_VALID_ABI "OFF")
  52. endif()
  53. if (abi MATCHES "u")
  54. list (APPEND Python3_VALID_ABI "ON")
  55. else()
  56. list (APPEND Python3_VALID_ABI "OFF")
  57. endif()
  58. # build an invalid pattern for ABI
  59. set (Python3_INVALID_ABI)
  60. foreach (abi IN LISTS Python3_VALID_ABI)
  61. if (abi)
  62. list (APPEND Python3_INVALID_ABI "OFF")
  63. else()
  64. list (APPEND Python3_INVALID_ABI "ON")
  65. endif()
  66. endforeach()
  67. add_test(NAME python3_find_valid_abi
  68. COMMAND "${CMAKE_COMMAND}" -DPYTHON_PACKAGE_NAME=Python3
  69. -DPython3_FIND_STRATEGY=${Python3_FIND_STRATEGY}
  70. "-DPython3_FIND_ABI=${Python3_VALID_ABI}"
  71. -P "${CMAKE_CURRENT_LIST_DIR}/../FindPythonScript.cmake")
  72. add_test(NAME python3_find_invalid_abi
  73. COMMAND "${CMAKE_COMMAND}" -DPYTHON_PACKAGE_NAME=Python3
  74. -DPYTHON_MUST_NOT_BE_FOUND=ON
  75. -DPython3_FIND_STRATEGY=${Python3_FIND_STRATEGY}
  76. "-DPython3_FIND_ABI=${Python3_INVALID_ABI}"
  77. -P "${CMAKE_CURRENT_LIST_DIR}/../FindPythonScript.cmake")