CMakeLists.txt 2.47 KB
Newer Older
1
2
3
# Built-in in CMake 3.5+
include(CMakeParseArguments)

4
5
6
add_custom_target(test_cmake_build)

function(pybind11_add_build_test name)
7
8
9
10
11
12
  cmake_parse_arguments(ARG "INSTALL" "" "" ${ARGN})

  set(build_options "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}")

  if(PYBIND11_FINDPYTHON)
    list(APPEND build_options "-DPYBIND11_FINDPYTHON=${PYBIND11_FINDPYTHON}")
13

14
15
16
17
18
19
20
21
    if(DEFINED Python_ROOT_DIR)
      list(APPEND build_options "-DPython_ROOT_DIR=${Python_ROOT_DIR}")
    endif()

    list(APPEND build_options "-DPython_EXECUTABLE=${Python_EXECUTABLE}")
  else()
    list(APPEND build_options "-DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}")
  endif()
22

Henry Schreiner's avatar
Henry Schreiner committed
23
  if(DEFINED CMAKE_CXX_STANDARD)
24
25
26
    list(APPEND build_options "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}")
  endif()

27
  if(NOT ARG_INSTALL)
28
    list(APPEND build_options "-DPYBIND11_PROJECT_DIR=${pybind11_SOURCE_DIR}")
29
30
  else()
    list(APPEND build_options "-DCMAKE_PREFIX_PATH=${pybind11_BINARY_DIR}/mock_install")
31
32
  endif()

Henry Schreiner's avatar
Henry Schreiner committed
33
  add_custom_target(
34
    test_build_${name}
Henry Schreiner's avatar
Henry Schreiner committed
35
36
37
38
39
40
    ${CMAKE_CTEST_COMMAND}
    --build-and-test
    "${CMAKE_CURRENT_SOURCE_DIR}/${name}"
    "${CMAKE_CURRENT_BINARY_DIR}/${name}"
    --build-config
    Release
41
    --build-noclean
Henry Schreiner's avatar
Henry Schreiner committed
42
43
44
45
46
47
48
    --build-generator
    ${CMAKE_GENERATOR}
    $<$<BOOL:${CMAKE_GENERATOR_PLATFORM}>:--build-generator-platform>
    ${CMAKE_GENERATOR_PLATFORM}
    --build-makeprogram
    ${CMAKE_MAKE_PROGRAM}
    --build-target
49
    check_${name}
Henry Schreiner's avatar
Henry Schreiner committed
50
51
    --build-options
    ${build_options})
52
  if(ARG_INSTALL)
53
    add_dependencies(test_build_${name} mock_install)
54
  endif()
55
  add_dependencies(test_cmake_build test_build_${name})
56
57
endfunction()

58
59
possibly_uninitialized(PYTHON_MODULE_EXTENSION Python_INTERPRETER_ID)

60
61
pybind11_add_build_test(subdirectory_function)
pybind11_add_build_test(subdirectory_target)
62
63
64
if("${PYTHON_MODULE_EXTENSION}" MATCHES "pypy" OR "${Python_INTERPRETER_ID}" STREQUAL "PyPy")
  message(STATUS "Skipping embed test on PyPy")
else()
65
66
67
68
  pybind11_add_build_test(subdirectory_embed)
endif()

if(PYBIND11_INSTALL)
Henry Schreiner's avatar
Henry Schreiner committed
69
70
71
  add_custom_target(
    mock_install ${CMAKE_COMMAND} "-DCMAKE_INSTALL_PREFIX=${pybind11_BINARY_DIR}/mock_install" -P
                 "${pybind11_BINARY_DIR}/cmake_install.cmake")
72
73
74

  pybind11_add_build_test(installed_function INSTALL)
  pybind11_add_build_test(installed_target INSTALL)
75
76
  if(NOT ("${PYTHON_MODULE_EXTENSION}" MATCHES "pypy" OR "${Python_INTERPRETER_ID}" STREQUAL "PyPy"
         ))
77
78
79
80
81
    pybind11_add_build_test(installed_embed INSTALL)
  endif()
endif()

add_dependencies(check test_cmake_build)