CMakeLists.txt 1.94 KB
Newer Older
1
2
3
add_custom_target(test_cmake_build)

function(pybind11_add_build_test name)
4
  cmake_parse_arguments(PARSE_ARGV 1 ARG "INSTALL" "" "")
5

Henry Schreiner's avatar
Henry Schreiner committed
6
7
8
9
  set(build_options
      "-DCMAKE_PREFIX_PATH=${pybind11_BINARY_DIR}/mock_install"
      "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
      "-DPYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE}")
10

Henry Schreiner's avatar
Henry Schreiner committed
11
  if(DEFINED CMAKE_CXX_STANDARD)
12
13
14
    list(APPEND build_options "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}")
  endif()

15
  if(NOT ARG_INSTALL)
16
    list(APPEND build_options "-DPYBIND11_PROJECT_DIR=${pybind11_SOURCE_DIR}")
17
18
  else()
    list(APPEND build_options "-DCMAKE_PREFIX_PATH=${pybind11_BINARY_DIR}/mock_install")
19
20
  endif()

Henry Schreiner's avatar
Henry Schreiner committed
21
  add_custom_target(
22
    test_build_${name}
Henry Schreiner's avatar
Henry Schreiner committed
23
24
25
26
27
28
    ${CMAKE_CTEST_COMMAND}
    --build-and-test
    "${CMAKE_CURRENT_SOURCE_DIR}/${name}"
    "${CMAKE_CURRENT_BINARY_DIR}/${name}"
    --build-config
    Release
29
    --build-noclean
Henry Schreiner's avatar
Henry Schreiner committed
30
31
32
33
34
35
36
    --build-generator
    ${CMAKE_GENERATOR}
    $<$<BOOL:${CMAKE_GENERATOR_PLATFORM}>:--build-generator-platform>
    ${CMAKE_GENERATOR_PLATFORM}
    --build-makeprogram
    ${CMAKE_MAKE_PROGRAM}
    --build-target
37
    check_${name}
Henry Schreiner's avatar
Henry Schreiner committed
38
39
    --build-options
    ${build_options})
40
  if(ARG_INSTALL)
41
    add_dependencies(test_build_${name} mock_install)
42
  endif()
43
  add_dependencies(test_cmake_build test_build_${name})
44
45
46
47
48
49
50
51
52
endfunction()

pybind11_add_build_test(subdirectory_function)
pybind11_add_build_test(subdirectory_target)
if(NOT ${PYTHON_MODULE_EXTENSION} MATCHES "pypy")
  pybind11_add_build_test(subdirectory_embed)
endif()

if(PYBIND11_INSTALL)
Henry Schreiner's avatar
Henry Schreiner committed
53
54
55
  add_custom_target(
    mock_install ${CMAKE_COMMAND} "-DCMAKE_INSTALL_PREFIX=${pybind11_BINARY_DIR}/mock_install" -P
                 "${pybind11_BINARY_DIR}/cmake_install.cmake")
56
57
58
59
60
61
62
63
64

  pybind11_add_build_test(installed_function INSTALL)
  pybind11_add_build_test(installed_target INSTALL)
  if(NOT ${PYTHON_MODULE_EXTENSION} MATCHES "pypy")
    pybind11_add_build_test(installed_embed INSTALL)
  endif()
endif()

add_dependencies(check test_cmake_build)