src/platform/python/CMakeLists.txt (view raw)
1find_package(PythonLibs ${USE_PYTHON_VERSION})
2find_package(PythonInterp ${USE_PYTHON_VERSION})
3list(APPEND DEPENDENCY_LIB ${PYTHON_LIBRARIES})
4include_directories(AFTER ${PYTHON_INCLUDE_DIRS})
5
6get_property(INCLUDE_DIRECTORIES DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
7set(INCLUDE_FLAGS)
8foreach(DIR IN LISTS INCLUDE_DIRECTORIES)
9 list(APPEND INCLUDE_FLAGS "-I${DIR}")
10endforeach()
11
12file(GLOB PYTHON_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
13
14add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lib.c
15 COMMAND BINDIR=${CMAKE_CURRENT_BINARY_DIR}/.. CPPFLAGS="${INCLUDE_FLAGS}" ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/_builder.py
16 COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/lib.c
17 DEPENDS ${PYTHON_HEADERS}
18 DEPENDS ${BINARY_NAME}
19 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/_builder.py)
20
21set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/lib.c PROPERTIES GENERATED ON)
22
23file(GLOB PYTHON_SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.c)
24add_library(${BINARY_NAME}-pylib STATIC ${CMAKE_CURRENT_BINARY_DIR}/lib.c ${PYTHON_SRC})
25set_target_properties(${BINARY_NAME}-pylib PROPERTIES INCLUDE_DIRECTORIES "${CMAKE_BINARY_DIR};${INCLUDE_DIRECTORIES}")
26set_target_properties(${BINARY_NAME}-pylib PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES}")
27
28add_custom_target(${BINARY_NAME}-py ALL
29 COMMAND BINDIR=${CMAKE_CURRENT_BINARY_DIR}/.. LIBDIR=${CMAKE_CURRENT_BINARY_DIR}/.. CPPFLAGS="${INCLUDE_FLAGS}" ${PYTHON_EXECUTABLE} setup.py build -b ${CMAKE_CURRENT_BINARY_DIR}
30 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
31 DEPENDS ${BINARY_NAME}
32 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/setup.py
33 DEPENDS ${PYTHON_HEADERS}
34 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/_builder.py
35 DEPENDS ${BINARY_NAME}-pylib)
36
37add_custom_target(${BINARY_NAME}-py-install
38 COMMAND BINDIR=${CMAKE_CURRENT_BINARY_DIR}/.. LIBDIR=${CMAKE_CURRENT_BINARY_DIR}/.. CPPFLAGS="${INCLUDE_FLAGS}" ${PYTHON_EXECUTABLE} setup.py install -b ${CMAKE_CURRENT_BINARY_DIR}
39 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
40 DEPENDS ${BINARY_NAME}-py)
41
42add_custom_target(${BINARY_NAME}-py-develop
43 COMMAND BINDIR=${CMAKE_CURRENT_BINARY_DIR}/.. LIBDIR=${CMAKE_CURRENT_BINARY_DIR}/.. CPPFLAGS="${INCLUDE_FLAGS}" ${PYTHON_EXECUTABLE} setup.py develop -b ${CMAKE_CURRENT_BINARY_DIR}
44 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
45 DEPENDS ${BINARY_NAME}-py)
46
47add_custom_target(${BINARY_NAME}-py-bdist
48 COMMAND BINDIR=${CMAKE_CURRENT_BINARY_DIR}/.. LIBDIR=${CMAKE_CURRENT_BINARY_DIR}/.. CPPFLAGS="${INCLUDE_FLAGS}" ${PYTHON_EXECUTABLE} setup.py bdist_wheel -b ${CMAKE_CURRENT_BINARY_DIR}
49 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
50 DEPENDS ${BINARY_NAME}-py)
51
52file(GLOB BASE_TESTS ${CMAKE_CURRENT_SOURCE_DIR}/test_*.py)
53file(GLOB SUBTESTS ${CMAKE_CURRENT_SOURCE_DIR}/tests/*/test_*.py)
54foreach(TEST IN LISTS BASE_TESTS SUBTESTS)
55 if(APPLE)
56 set(PATH DYLD_LIBRARY_PATH)
57 elseif(WIN32)
58 set(PATH PATH)
59 else()
60 set(PATH LD_LIBRARY_PATH)
61 endif()
62 string(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/(tests/.*/)?test_" "" TEST_NAME "${TEST}")
63 string(REPLACE ".py" "" TEST_NAME "${TEST_NAME}")
64 add_test(NAME python-${TEST_NAME}
65 COMMAND ${PYTHON_EXECUTABLE} setup.py build -b ${CMAKE_CURRENT_BINARY_DIR} pytest --extras --addopts ${TEST}
66 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
67 set_tests_properties(python-${TEST_NAME} PROPERTIES ENVIRONMENT "${PATH}=${CMAKE_CURRENT_BINARY_DIR}/..;BINDIR=${CMAKE_CURRENT_BINARY_DIR}/..;LIBDIR=${CMAKE_CURRENT_BINARY_DIR}/..;CPPFLAGS=${INCLUDE_FLAGS}")
68endforeach()