| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367 | include(RunCMake)if(RunCMake_BUILD_TYPE)  set(Python_BUILD_TYPE "${RunCMake_BUILD_TYPE}")else()  set(Python_BUILD_TYPE "Release")endif()function(run_python test)  set(options_args CHECK_RESULT)  set(one_value_args TYPE ACTION VARIANT STRATEGY)  set(multi_value_args OPTIONS)  cmake_parse_arguments(PARSE_ARGV 1 RP "${options_args}" "${one_value_args}" "${multi_value_args}")  if(RP_UNPARSED_ARGUMENTS)    message(FATAL_ERROR "run_python: unparsed arguments: ${RP_UNPARSED_ARGUMENTS}")  endif()  set(test_name "${test}")  if(RP_VARIANT)    string(APPEND test_name ".${RP_VARIANT}")    set(RunCMake_TEST_VARIANT_DESCRIPTION ".${RP_VARIANT}")  endif()  set(options ${RP_OPTIONS})  if(RP_STRATEGY)    string(APPEND test_name ".${RP_STRATEGY}")    string(APPEND RunCMake_TEST_VARIANT_DESCRIPTION ".${RP_STRATEGY}")    if (NOT RP_TYPE)      set(RP_TYPE ${test})    endif()    list(APPEND options -D${RP_TYPE}_FIND_STRATEGY=${RP_STRATEGY})  endif()  if(RP_TYPE)    list(APPEND options -DPYTHON=${RP_TYPE})  endif()  if(NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)    list(APPEND options -DCMAKE_BUILD_TYPE=${Python_BUILD_TYPE})  endif()  if(RP_CHECK_RESULT)    set(RunCMake_TEST_EXPECT_RESULT 1)    file(READ "${RunCMake_SOURCE_DIR}/${test_name}-stderr.txt" RunCMake_TEST_EXPECT_stderr)  endif()  set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${test_name}-build")  if(options)    run_cmake_with_options(${test} ${options})  else()    run_cmake(${test})  endif()  if(NOT RP_ACTION)    return()  endif()  set(RunCMake_TEST_NO_CLEAN 1)  unset(RunCMake_TEST_VARIANT_DESCRIPTION)  run_cmake_command(${test_name}-build ${CMAKE_COMMAND} --build . --config ${Python_BUILD_TYPE})  if(RP_ACTION STREQUAL "BUILD")    return()  endif()  run_cmake_command(${test_name}-run ${CMAKE_CTEST_COMMAND} -C ${Python_BUILD_TYPE} -V)endfunction()function(run_python_with_virtualenv test)  set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${test}-build")  set(virtual_env "${RunCMake_TEST_BINARY_DIR}/py3venv")  run_cmake_with_options(${test} "-DPYTHON3_VIRTUAL_ENV=${virtual_env}")  set(RunCMake_TEST_NO_CLEAN 1)  set(tests Default Standard)  if(CMake_TEST_FindPython2)    list(APPEND tests Only)  endif()  if(test MATCHES "Conda")    set(RunCMake_TEST_VARIANT_DESCRIPTION ".Conda")    set(init_venv --unset=VIRTUAL_ENV "CONDA_PREFIX=${virtual_env}")  else()    set(RunCMake_TEST_VARIANT_DESCRIPTION ".CPython")    set(init_venv --unset=CONDA_PREFIX "VIRTUAL_ENV=${virtual_env}")  endif()  foreach(test IN LISTS tests)    run_cmake_script(VirtualEnv${test} -E env --unset=PYTHONHOME ${init_venv}                                       "${CMAKE_COMMAND}" "-DPYTHON3_VIRTUAL_ENV=${virtual_env}")  endforeach()  if(CMake_TEST_FindPython2)    string(APPEND RunCMake_TEST_VARIANT_DESCRIPTION ".Unset")    run_cmake_script(VirtualEnvOnly -E env --unset=PYTHONHOME --unset=VIRTUAL_ENV --unset=CONDA_PREFIX                                    "${CMAKE_COMMAND}")  endif()endfunction()macro(required_artifacts_check variant)  run_python(RequiredArtifactsCheck VARIANT ${variant}                                    OPTIONS "-DPYTHON_ARTIFACTS=${RunCMake_BINARY_DIR}/RequiredArtifacts-build/PythonArtifacts.cmake"                                            ${ARGN})endmacro()function(required_artifacts)  set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/RequiredArtifacts-build")  run_cmake_with_options(RequiredArtifacts "-DCMake_TEST_FindPython2=${CMake_TEST_FindPython2}"                                           "-DCMake_TEST_FindPython3_SABIModule=${CMake_TEST_FindPython3_SABIModule}")  if(EXISTS "${RunCMake_TEST_BINARY_DIR}/PythonArtifacts.cmake")    required_artifacts_check("Interpreter.VALID" -DPYTHON_IS_FOUND=TRUE                                                 -DCHECK_INTERPRETER=ON)    required_artifacts_check("Interpreter.INVALID" -DPYTHON_IS_FOUND=FALSE -DINVALID_ARTIFACTS=INTERPRETER                                                   -DCHECK_INTERPRETER=ON)    required_artifacts_check("Library.VALID" -DPYTHON_IS_FOUND=TRUE                                             -DCHECK_LIBRARY=ON)    required_artifacts_check("Library.INVALID" -DPYTHON_IS_FOUND=FALSE -DINVALID_ARTIFACTS=LIBRARY                                               -DCHECK_LIBRARY=ON)    required_artifacts_check("Include.VALID" -DPYTHON_IS_FOUND=TRUE                                             -DCHECK_INCLUDE=ON)    required_artifacts_check("Include.INVALID" -DPYTHON_IS_FOUND=FALSE -DINVALID_ARTIFACTS=INCLUDE                                               -DCHECK_INCLUDE=ON)    required_artifacts_check("Interpreter.VALID,Library.INVALID" -DPYTHON_IS_FOUND=FALSE -DINVALID_ARTIFACTS=LIBRARY                                                                 -DCHECK_INTERPRETER=ON -DCHECK_LIBRARY=ON)    required_artifacts_check("Library.VALID,Include.INVALID" -DPYTHON_IS_FOUND=FALSE -DINVALID_ARTIFACTS=INCLUDE                                                             -DCHECK_LIBRARY=ON -DCHECK_INCLUDE=ON)    if (CMake_TEST_FindPython3_SABIModule AND WIN32)      required_artifacts_check("SABILibrary.VALID" -DPYTHON_IS_FOUND=TRUE                                                   -DCHECK_SABI_LIBRARY=ON)      required_artifacts_check("SABILibrary.INVALID" -DPYTHON_IS_FOUND=FALSE -DINVALID_ARTIFACTS=SABI_LIBRARY                                                     -DCHECK_SABI_LIBRARY=ON)    endif()  endif()endfunction()macro(custom_failure_message_check name components)  run_python(CustomFailureMessage VARIANT "${name}" CHECK_RESULT OPTIONS "-DCHECK_COMPONENTS=${components}" ${ARGN})endmacro()if(CMake_TEST_FindPython2_CPython)  run_cmake(Python2-BadComponent)  run_python(Python2Module ACTION RUN)  run_python(Python2Embedded ACTION RUN)  run_python(Python2 STRATEGY LOCATION ACTION RUN)  run_python(Python2 STRATEGY VERSION ACTION RUN)  run_python(Python STRATEGY LOCATION VARIANT V2 ACTION RUN OPTIONS -DPython_REQUESTED_VERSION=2)  run_python(Python STRATEGY VERSION VARIANT V2 OPTIONS ACTION RUN OPTIONS -DPython_REQUESTED_VERSION=2)  run_python(ExactVersion TYPE Python2 STRATEGY LOCATION VARIANT Python2                          OPTIONS -DPython_REQUESTED_VERSION=2.1.2)  run_python(ExactVersion TYPE Python2 STRATEGY VERSION VARIANT Python2                          OPTIONS -DPython_REQUESTED_VERSION=2.1.2)  run_python(ExactVersion TYPE Python STRATEGY LOCATION VARIANT Python.V2                          OPTIONS -DPython_REQUESTED_VERSION=2.1.2)  run_python(ExactVersion TYPE Python STRATEGY VERSION VARIANT Python.V2                          OPTIONS -DPython_REQUESTED_VERSION=2.1.2)  run_python(VersionRange TYPE Python2 STRATEGY LOCATION VARIANT Python2                          OPTIONS -DPython_REQUESTED_VERSION=2)  run_python(VersionRange TYPE Python2 STRATEGY VERSION VARIANT Python2                          OPTIONS -DPython_REQUESTED_VERSION=2)  run_python(VersionRange TYPE Python STRATEGY LOCATION VARIANT Python.V2                          OPTIONS -DPython_REQUESTED_VERSION=2)  run_python(VersionRange TYPE Python STRATEGY VERSION VARIANT Python.V2                          OPTIONS -DPython_REQUESTED_VERSION=2)  run_python(CrossCompiling-CMP0190-OLD TYPE Python2 VARIANT Python2)  run_python(CrossCompiling-CMP0190-NEW TYPE Python2 VARIANT Python2 CHECK_RESULT)  run_python(CrossCompiling-CMP0190-OLD TYPE Python VARIANT Python.V2                                        OPTIONS -DPython_REQUESTED_VERSION=2)  run_python(CrossCompiling-CMP0190-NEW TYPE Python VARIANT Python.V2 CHECK_RESULT                                        OPTIONS -DPython_REQUESTED_VERSION=2)  run_python(CrossCompiling-HOST TYPE Python2 VARIANT Python2)  run_python(CrossCompiling-HOST TYPE Python VARIANT Python.V2                                 OPTIONS -DPython_REQUESTED_VERSION=2)  if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin" AND NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)    run_python(CrossCompiling-TARGET TYPE Python2 VARIANT Python2)    run_python(CrossCompiling-TARGET TYPE Python VARIANT Python.V2                                     OPTIONS -DPython_REQUESTED_VERSION=2)    run_python(CrossCompiling-BOTH TYPE Python2 VARIANT Python2)    run_python(CrossCompiling-BOTH TYPE Python VARIANT Python.V2                                   OPTIONS -DPython_REQUESTED_VERSION=2)  endif()endif()if(CMake_TEST_FindPython3_CPython)  run_cmake(Python3-BadComponent)  run_cmake(DifferentComponents)  run_python(Python3Module ACTION RUN)  if(NOT CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 4.8)    run_python(Python3Embedded ACTION RUN)  endif()  if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")    run_cmake(UnversionedNames)  endif()  run_python(Python3 STRATEGY LOCATION ACTION RUN)  run_python(Python3 STRATEGY VERSION ACTION RUN)  run_python(Python STRATEGY LOCATION VARIANT V3 ACTION RUN OPTIONS -DPython_REQUESTED_VERSION=3)  run_python(Python STRATEGY VERSION VARIANT V3 ACTION RUN OPTIONS -DPython_REQUESTED_VERSION=3)  run_python(ExactVersion TYPE Python3 STRATEGY LOCATION VARIANT Python3                          OPTIONS -DPython_REQUESTED_VERSION=3.1.2)  run_python(ExactVersion TYPE Python3 STRATEGY VERSION VARIANT Python3                          OPTIONS -DPython_REQUESTED_VERSION=3.1.2)  run_python(ExactVersion TYPE Python STRATEGY LOCATION VARIANT Python.V3                          OPTIONS -DPython_REQUESTED_VERSION=3.1.2)  run_python(ExactVersion TYPE Python STRATEGY VERSION VARIANT Python.V3                          OPTIONS -DPython_REQUESTED_VERSION=3.1.2)  run_python(VersionRange TYPE Python3 STRATEGY LOCATION VARIANT Python3                          OPTIONS -DPython_REQUESTED_VERSION=3)  run_python(VersionRange TYPE Python3 STRATEGY VERSION VARIANT Python3                          OPTIONS -DPython_REQUESTED_VERSION=3)  run_python(VersionRange TYPE Python STRATEGY LOCATION VARIANT Python.V3                          OPTIONS -DPython_REQUESTED_VERSION=3)  run_python(VersionRange TYPE Python STRATEGY VERSION VARIANT Python.V3                          OPTIONS -DPython_REQUESTED_VERSION=3)  custom_failure_message_check("Interpreter" "Interpreter" -DPython3_EXECUTABLE=/not/found/interpreter)  custom_failure_message_check("Library" "Development" -DPython3_LIBRARY=/not/found/library)  custom_failure_message_check("Include" "Development" -DPython3_INCLUDE_DIR=/not/found/include)  custom_failure_message_check("Multiple" "Interpreter:Development" -DPython3_EXECUTABLE=/not/found/interpreter                                                                    -DPython3_LIBRARY=/not/found/library)  run_python(CrossCompiling-CMP0190-OLD TYPE Python3 VARIANT Python3)  run_python(CrossCompiling-CMP0190-NEW TYPE Python3 VARIANT Python3 CHECK_RESULT)  run_python(CrossCompiling-CMP0190-OLD TYPE Python VARIANT Python.V3                                        OPTIONS -DPython_REQUESTED_VERSION=3)  run_python(CrossCompiling-CMP0190-NEW TYPE Python VARIANT Python.V3 CHECK_RESULT                                        OPTIONS -DPython_REQUESTED_VERSION=3)  run_python(CrossCompiling-HOST TYPE Python3 VARIANT Python3)  run_python(CrossCompiling-HOST TYPE Python VARIANT Python.V3                                 OPTIONS -DPython_REQUESTED_VERSION=3)  if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin" AND NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)    run_python(CrossCompiling-TARGET TYPE Python3 VARIANT Python3)    run_python(CrossCompiling-TARGET TYPE Python VARIANT Python.V3                                     OPTIONS -DPython_REQUESTED_VERSION=3)    run_python(CrossCompiling-BOTH TYPE Python3 VARIANT Python3)    run_python(CrossCompiling-BOTH TYPE Python VARIANT Python.V3                                        OPTIONS -DPython_REQUESTED_VERSION=3)  endif()endif()if(CMake_TEST_FindPython2_CPython OR CMake_TEST_FindPython3_CPython)  run_python(Python STRATEGY LOCATION VARIANT Python ACTION RUN)  run_python(Python STRATEGY VERSION VARIANT Python ACTION RUN)endif()if(CMake_TEST_FindPython2_IronPython)  run_python(IronPython TYPE Python2 STRATEGY LOCATION VARIANT IronPython2)  run_python(IronPython TYPE Python2 STRATEGY VERSION VARIANT IronPython2)  run_python(IronPython TYPE Python STRATEGY LOCATION VARIANT V2 OPTIONS -DPython_REQUESTED_VERSION=2)  run_python(IronPython TYPE Python STRATEGY VERSION VARIANT V2 OPTIONS -DPython_REQUESTED_VERSION=2)  run_python(VersionRange TYPE Python2 STRATEGY LOCATION VARIANT IronPython2                          OPTIONS -DPython_REQUESTED_VERSION=2                                  -DPython2_FIND_IMPLEMENTATIONS=IronPython)  run_python(VersionRange TYPE Python2 STRATEGY VERSION VARIANT IronPython2                          OPTIONS -DPython_REQUESTED_VERSION=2                                  -DPython2_FIND_IMPLEMENTATIONS=IronPython)  run_python(VersionRange TYPE Python STRATEGY LOCATION VARIANT IronPython.V2                          OPTIONS -DPython_REQUESTED_VERSION=2                                  -DPython2_FIND_IMPLEMENTATIONS=IronPython)  run_python(VersionRange TYPE Python STRATEGY VERSION VARIANT IronPython.V2                          OPTIONS -DPython_REQUESTED_VERSION=2                                  -DPython2_FIND_IMPLEMENTATIONS=IronPython)endif()if(CMake_TEST_FindPython3_IronPython)  run_python(IronPython TYPE Python3 STRATEGY LOCATION VARIANT IronPython3)  run_python(IronPython TYPE Python3 STRATEGY VERSION VARIANT IronPython3)  run_python(IronPython TYPE Python STRATEGY LOCATION VARIANT V3 OPTIONS -DPython_REQUESTED_VERSION=3)  run_python(IronPython TYPE Python STRATEGY VERSION VARIANT V3 OPTIONS -DPython_REQUESTED_VERSION=3)  run_python(VersionRange TYPE Python3 STRATEGY LOCATION VARIANT IronPython3                          OPTIONS -DPython_REQUESTED_VERSION=3                                  -DPython2_FIND_IMPLEMENTATIONS=IronPython)  run_python(VersionRange TYPE Python3 STRATEGY VERSION VARIANT IronPython3                          OPTIONS -DPython_REQUESTED_VERSION=3                                  -DPython2_FIND_IMPLEMENTATIONS=IronPython)  run_python(VersionRange TYPE Python STRATEGY LOCATION VARIANT IronPython.V3                          OPTIONS -DPython_REQUESTED_VERSION=3                                  -DPython2_FIND_IMPLEMENTATIONS=IronPython)  run_python(VersionRange TYPE Python STRATEGY VERSION VARIANT IronPython.V3                          OPTIONS -DPython_REQUESTED_VERSION=3                                  -DPython2_FIND_IMPLEMENTATIONS=IronPython)endif()if(CMake_TEST_FindPython2_IronPython OR CMake_TEST_FindPython3_IronPython)  run_python(IronPython TYPE Python STRATEGY LOCATION VARIANT IronPython)  run_python(IronPython TYPE Python STRATEGY VERSION VARIANT IronPython)endif()if (CMake_TEST_FindPython2 AND CMake_TEST_FindPython2_IronPython)  run_python(Implementation VARIANT CPython2 OPTIONS -DPython_REQUESTED_VERSION=2                                                     -DPython_REQUESTED_IMPLEMENTATIONS=CPython)  run_python(Implementation VARIANT IronPython2 OPTIONS -DPython_REQUESTED_VERSION=2                                                        -DPython_REQUESTED_IMPLEMENTATIONS=IronPython)endif()if (CMake_TEST_FindPython3 AND CMake_TEST_FindPython3_IronPython)  run_python(Implementation VARIANT CPython3 OPTIONS -DPython_REQUESTED_VERSION=3                                                     -DPython_REQUESTED_IMPLEMENTATIONS=CPython)  run_python(Implementation VARIANT IronPython3 OPTIONS -DPython_REQUESTED_VERSION=3                                                        -DPython_REQUESTED_IMPLEMENTATIONS=IronPython)endif()if(CMake_TEST_FindPython2_PyPy)  run_python(PyPy TYPE Python2 STRATEGY LOCATION VARIANT PyPy2)  run_python(PyPy TYPE Python2 STRATEGY VERSION VARIANT PyPy2)  run_python(PyPy TYPE Python STRATEGY LOCATION VARIANT V2 OPTIONS -DPython_REQUESTED_VERSION=2)  run_python(PyPy TYPE Python STRATEGY VERSION VARIANT V2 OPTIONS -DPython_REQUESTED_VERSION=2)endif()if(CMake_TEST_FindPython3_PyPy)  run_python(PyPy TYPE Python3 STRATEGY LOCATION VARIANT PyPy3)  run_python(PyPy TYPE Python3 STRATEGY VERSION VARIANT PyPy3)  run_python(PyPy TYPE Python STRATEGY LOCATION VARIANT V3 OPTIONS -DPython_REQUESTED_VERSION=3)  run_python(PyPy TYPE Python STRATEGY VERSION VARIANT V3 OPTIONS -DPython_REQUESTED_VERSION=3)endif()if(CMake_TEST_FindPython2_PyPy OR CMake_TEST_FindPython3_PyPy)  run_python(PyPy TYPE Python STRATEGY LOCATION VARIANT PyPy)  run_python(PyPy TYPE Python STRATEGY VERSION VARIANT PyPy)endif()if(CMake_TEST_FindPython_Various)  if(CMake_TEST_FindPython3)    run_python_with_virtualenv(VirtualEnv)    required_artifacts()    run_python(ArtifactsInteractive VARIANT "ON"                                    OPTIONS -DCMake_TEST_FindPython3_NumPy=${CMake_TEST_FindPython3_NumPy}                                            -DPython3_ARTIFACTS_INTERACTIVE=ON)    run_python(ArtifactsInteractive VARIANT "OFF"                                    OPTIONS -DCMake_TEST_FindPython3_NumPy=${CMake_TEST_FindPython3_NumPy}                                            -DPython3_ARTIFACTS_INTERACTIVE=OFF)  endif()  if(CMake_TEST_FindPython2 OR CMake_TEST_FindPython3)    if (CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")      run_python(SOABI VARIANT "Interpreter" ACTION BUILD                       OPTIONS -DCMake_TEST_FindPython2=${CMake_TEST_FindPython2}                               -DCMake_TEST_FindPython3=${CMake_TEST_FindPython3}                               -DCMake_TEST_FindPython_COMPONENT=Interpreter)      run_python(SOABI VARIANT "Development" ACTION BUILD                       OPTIONS -DCMake_TEST_FindPython2=${CMake_TEST_FindPython2}                               -DCMake_TEST_FindPython3=${CMake_TEST_FindPython3}                               -DCMake_TEST_FindPython_COMPONENT=Development)    endif()    run_python(MultiplePackages ACTION RUN                                OPTIONS -DCMake_TEST_FindPython2=${CMake_TEST_FindPython2}                                        -DCMake_TEST_FindPython3=${CMake_TEST_FindPython3})  endif()  if(CMake_TEST_FindPython2 AND CMake_TEST_FindPython3)    run_cmake(ArtifactsPrefix)  endif()  if(CMake_TEST_FindPython2_SABIModule)    run_cmake(Python2SABIModule)  endif()  if(CMake_TEST_FindPython3_SABIModule)    run_python(Python3SABIModule)  endif()  if(CMake_TEST_FindPython2_NumPy OR CMake_TEST_FindPython3_NumPy)    run_python(NumPy ACTION RUN                     OPTIONS -DCMake_TEST_FindPython2_NumPy=${CMake_TEST_FindPython2_NumPy}                             -DCMake_TEST_FindPython3_NumPy=${CMake_TEST_FindPython3_NumPy})    run_python(NumPyOnly ACTION RUN                         OPTIONS -DCMake_TEST_FindPython2_NumPy=${CMake_TEST_FindPython2_NumPy}                                 -DCMake_TEST_FindPython3_NumPy=${CMake_TEST_FindPython3_NumPy})    if(CMake_TEST_FindPython3_NumPy)      custom_failure_message_check("NumPy" "Interpreter:Development:NumPy" -DPython3_NumPy_INCLUDE_DIR=/not/found/numpy/include)    endif()  endif()  if(CMake_TEST_FindPython3_Conda)    run_python_with_virtualenv(VirtualEnvConda)  endif()endif()
 |