CMakeLists.txt revision 12391:ceeca8b41e4b
1add_custom_target(test_cmake_build)
2
3if(CMAKE_VERSION VERSION_LESS 3.1)
4  # 3.0 needed for interface library for subdirectory_target/installed_target
5  # 3.1 needed for cmake -E env for testing
6  return()
7endif()
8
9include(CMakeParseArguments)
10function(pybind11_add_build_test name)
11  cmake_parse_arguments(ARG "INSTALL" "" "" ${ARGN})
12
13  set(build_options "-DCMAKE_PREFIX_PATH=${PROJECT_BINARY_DIR}/mock_install"
14                    "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
15                    "-DPYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE}"
16                    "-DPYBIND11_CPP_STANDARD=${PYBIND11_CPP_STANDARD}")
17  if(NOT ARG_INSTALL)
18    list(APPEND build_options "-DPYBIND11_PROJECT_DIR=${PROJECT_SOURCE_DIR}")
19  endif()
20
21  add_custom_target(test_${name} ${CMAKE_CTEST_COMMAND}
22    --quiet --output-log ${name}.log
23    --build-and-test "${CMAKE_CURRENT_SOURCE_DIR}/${name}"
24                     "${CMAKE_CURRENT_BINARY_DIR}/${name}"
25    --build-config Release
26    --build-noclean
27    --build-generator ${CMAKE_GENERATOR}
28    $<$<BOOL:${CMAKE_GENERATOR_PLATFORM}>:--build-generator-platform> ${CMAKE_GENERATOR_PLATFORM}
29    --build-makeprogram ${CMAKE_MAKE_PROGRAM}
30    --build-target check
31    --build-options ${build_options}
32  )
33  if(ARG_INSTALL)
34    add_dependencies(test_${name} mock_install)
35  endif()
36  add_dependencies(test_cmake_build test_${name})
37endfunction()
38
39pybind11_add_build_test(subdirectory_function)
40pybind11_add_build_test(subdirectory_target)
41if(NOT ${PYTHON_MODULE_EXTENSION} MATCHES "pypy")
42  pybind11_add_build_test(subdirectory_embed)
43endif()
44
45if(PYBIND11_INSTALL)
46  add_custom_target(mock_install ${CMAKE_COMMAND}
47    "-DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR}/mock_install"
48    -P "${PROJECT_BINARY_DIR}/cmake_install.cmake"
49  )
50
51  pybind11_add_build_test(installed_function INSTALL)
52  pybind11_add_build_test(installed_target INSTALL)
53  if(NOT ${PYTHON_MODULE_EXTENSION} MATCHES "pypy")
54    pybind11_add_build_test(installed_embed INSTALL)
55  endif()
56endif()
57
58add_dependencies(check test_cmake_build)
59