mirror of https://github.com/microsoft/vcpkg.git
88 lines
3.4 KiB
CMake
88 lines
3.4 KiB
CMake
cmake_minimum_required(VERSION 3.12)
|
|
project(python3-test)
|
|
|
|
set(Python_ARTIFACTS_PREFIX "_MEOW")
|
|
|
|
# We need to opt-out of CMP0148 to be able to test the pre-CMake 3.12 Python
|
|
# find modules. The old policy is deprecated, so, at some point, this aspect
|
|
# of the test will have to go away.
|
|
if(POLICY CMP0148)
|
|
cmake_policy(SET CMP0148 OLD)
|
|
endif()
|
|
|
|
# The purpose of this test is to ensure that we get the expected values
|
|
# from the finders, not crosscompiling. So, let's not even go there.
|
|
# These find_package() calls aren't required because FindPythonInterp
|
|
# seems to not return a result in CI. Probably because FindPythonInterp
|
|
# prefers the system Python instead of the executable from the python3
|
|
# port.
|
|
if(NOT CMAKE_CROSSCOMPILING)
|
|
find_package(PythonInterp)
|
|
endif()
|
|
find_package(PythonLibs)
|
|
|
|
# The old find modules should NOT be prefixed.
|
|
if(DEFINED PythonInterp_MEOW_FOUND OR DEFINED PYTHON_MEOW_EXECUTABLE)
|
|
message(FATAL_ERROR "FindPythonInterp prefixed the result variables")
|
|
endif()
|
|
if(DEFINED PythonLibs_MEOW_FOUND OR DEFINED PYTHON_MEOW_LIBRARIES)
|
|
message(FATAL_ERROR "FindPythonLibs prefixed the result variables")
|
|
endif()
|
|
|
|
function(test_result NAME TYPE EXPECTED UNEXPECTED)
|
|
if(NOT ${TYPE} ${EXPECTED}${NAME})
|
|
message(FATAL_ERROR "${EXPECTED}${NAME} should be ${TYPE}")
|
|
endif()
|
|
if(${TYPE} ${UNEXPECTED}${NAME})
|
|
message(FATAL_ERROR "${UNEXPECTED}${NAME} should not be ${TYPE}")
|
|
endif()
|
|
endfunction()
|
|
|
|
function(test_new_finder EXPECTED UNEXPECTED)
|
|
test_result(::Python TARGET ${EXPECTED} ${UNEXPECTED})
|
|
test_result(_LIBRARIES DEFINED ${EXPECTED} ${UNEXPECTED})
|
|
|
|
if(NOT CMAKE_CROSSCOMPILING)
|
|
test_result(_EXECUTABLE DEFINED ${EXPECTED} ${UNEXPECTED})
|
|
test_result(_STDLIB DEFINED ${EXPECTED} ${UNEXPECTED})
|
|
test_result(::Interpreter TARGET ${EXPECTED} ${UNEXPECTED})
|
|
endif()
|
|
endfunction()
|
|
|
|
if(NOT CMAKE_CROSSCOMPILING)
|
|
set(_INTERPRETER "Interpreter")
|
|
endif()
|
|
|
|
# The new find modules should be prefixed if CMake is 4.0+
|
|
find_package(Python REQUIRED COMPONENTS ${_INTERPRETER} Development)
|
|
if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.0)
|
|
set(EXPECTED_PYTHON Python_MEOW)
|
|
set(UNEXPECTED_PYTHON Python)
|
|
else()
|
|
set(EXPECTED_PYTHON Python)
|
|
set(UNEXPECTED_PYTHON Python_MEOW)
|
|
endif()
|
|
test_new_finder(${EXPECTED_PYTHON} ${UNEXPECTED_PYTHON})
|
|
|
|
# Also test non-prefixed. Use Python3:: to avoid conflicts with Python_MEOW::
|
|
# The test against Python3_MEOW should never happen because the prefix variable
|
|
# should be Python3_ARTIFACT_PREFIX, but we set Python_ARTIFACT_PREFIX.
|
|
find_package(Python3 REQUIRED COMPONENTS ${_INTERPRETER} Development)
|
|
test_new_finder(Python3 Python3_MEOW)
|
|
|
|
# Test embedding the libraries found.
|
|
function(add_test_executable TARGET LIBRARIES INCLUDES)
|
|
add_executable(${TARGET} main.c)
|
|
target_link_libraries(${TARGET} PRIVATE ${LIBRARIES})
|
|
if(INCLUDES)
|
|
target_include_directories(${TARGET} PRIVATE ${INCLUDES})
|
|
endif()
|
|
endfunction()
|
|
|
|
# We're purposefully not testing the result of the old finders.
|
|
# The python3 port never added a vcpkg-cmake-wrapper for FindPythonLibs,
|
|
# and it seems like a poor use of time to do so at this point - the
|
|
# old finders are soft removed as of CMake 3.27.
|
|
add_test_executable(new_with_prefix "${EXPECTED_PYTHON}::Python" "")
|
|
add_test_executable(new_without_prefix "${Python3_LIBRARIES}" "${Python3_INCLUDE_DIRS}")
|