]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/hana/test/CMakeLists.txt
52ee6c4aa5b08b61eef46955d631914a50bd7547
[ceph.git] / ceph / src / boost / libs / hana / test / CMakeLists.txt
1 # Copyright Louis Dionne 2013-2017
2 # Distributed under the Boost Software License, Version 1.0.
3 # (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
4
5 add_custom_target(tests COMMENT "Build all the unit tests.")
6 add_dependencies(check tests)
7
8
9 ##############################################################################
10 # Take note of files that depend on Boost
11 ##############################################################################
12 file(GLOB_RECURSE TESTS_REQUIRING_BOOST "ext/boost/*.cpp"
13 "experimental/printable/*.cpp")
14
15 file(GLOB_RECURSE PUBLIC_HEADERS_REQUIRING_BOOST
16 RELATIVE "${Boost.Hana_SOURCE_DIR}/include"
17 "${Boost.Hana_SOURCE_DIR}/include/boost/hana/ext/boost/*.hpp"
18 "${Boost.Hana_SOURCE_DIR}/include/boost/hana/ext/boost.hpp"
19 "${Boost.Hana_SOURCE_DIR}/include/boost/hana/experimental/printable.hpp"
20 )
21
22
23 ##############################################################################
24 # Caveats: Take note of public headers and tests that are not supported.
25 ##############################################################################
26 if (NOT Boost_FOUND)
27 list(APPEND EXCLUDED_UNIT_TESTS ${TESTS_REQUIRING_BOOST})
28 list(APPEND EXCLUDED_PUBLIC_HEADERS ${PUBLIC_HEADERS_REQUIRING_BOOST})
29 endif()
30
31 # The experimental::type_name test is only supported on Clang >= 3.6 and
32 # AppleClang >= 7.0
33 if (NOT ((${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" AND
34 NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 3.6)
35 OR (${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang" AND
36 NOT ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 7)))
37 list(APPEND EXCLUDED_PUBLIC_HEADERS
38 "boost/hana/experimental/type_name.hpp")
39 list(APPEND EXCLUDED_UNIT_TESTS "experimental/type_name.cpp")
40 endif()
41
42 # On Windows, Clang-cl emulates a MSVC bug that causes EBO not to be applied
43 # properly. We disable the tests that check for EBO.
44 if (MSVC AND ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
45 list(APPEND EXCLUDED_UNIT_TESTS
46 "detail/ebo.cpp"
47 "issues/github_202.cpp"
48 "pair/empty_storage.cpp"
49 "tuple/empty_member.cpp"
50 )
51 endif()
52
53
54 ##############################################################################
55 # Generate tests that include each public header.
56 # The headers that were excluded above due to caveats are ignored here.
57 ##############################################################################
58 add_custom_target(test.headers COMMENT "Build all the header-inclusion unit tests.")
59 add_dependencies(tests test.headers)
60
61 file(GLOB_RECURSE PUBLIC_HEADERS
62 RELATIVE "${Boost.Hana_SOURCE_DIR}/include"
63 "${Boost.Hana_SOURCE_DIR}/include/*.hpp"
64 )
65 list(REMOVE_ITEM PUBLIC_HEADERS ${PUBLIC_HEADERS_REQUIRING_BOOST})
66
67 include(TestHeaders)
68 add_header_test(test.headers.standalone EXCLUDE_FROM_ALL
69 HEADERS ${PUBLIC_HEADERS}
70 EXCLUDE ${EXCLUDED_PUBLIC_HEADERS})
71 target_link_libraries(test.headers.standalone PRIVATE hana)
72 add_dependencies(test.headers test.headers.standalone)
73
74 if (Boost_FOUND)
75 add_header_test(test.headers.boost EXCLUDE_FROM_ALL
76 HEADERS ${PUBLIC_HEADERS_REQUIRING_BOOST}
77 EXCLUDE ${EXCLUDED_PUBLIC_HEADERS})
78 target_link_libraries(test.headers.boost PRIVATE hana Boost::boost)
79 add_dependencies(test.headers test.headers.boost)
80 endif()
81
82
83 ##############################################################################
84 # Check for ODR violations when linking several translation units
85 # (GitHub issue 75)
86 ##############################################################################
87 list(APPEND EXCLUDED_UNIT_TESTS "issues/github_75/*.cpp")
88 boost_hana_target_name_for(github_75 "${CMAKE_CURRENT_LIST_DIR}/issues/github_75")
89 add_executable(${github_75} EXCLUDE_FROM_ALL "issues/github_75/tu1.cpp" "issues/github_75/tu2.cpp")
90 boost_hana_set_test_properties(${github_75})
91 add_test(${github_75} "${CMAKE_CURRENT_BINARY_DIR}/${github_75}")
92 add_dependencies(tests ${github_75})
93
94
95 ##############################################################################
96 # Add all the remaining unit tests
97 ##############################################################################
98 file(GLOB_RECURSE UNIT_TESTS "*.cpp")
99 file(GLOB_RECURSE EXCLUDED_UNIT_TESTS ${EXCLUDED_UNIT_TESTS})
100 list(REMOVE_ITEM UNIT_TESTS ${EXCLUDED_UNIT_TESTS})
101
102 foreach(_file IN LISTS UNIT_TESTS)
103 boost_hana_target_name_for(_target "${_file}")
104 add_executable(${_target} EXCLUDE_FROM_ALL "${_file}")
105 boost_hana_set_test_properties(${_target})
106 if (_file IN_LIST TESTS_REQUIRING_BOOST)
107 target_link_libraries(${_target} PRIVATE Boost::boost)
108 endif()
109 target_include_directories(${_target} PRIVATE _include)
110 add_test(${_target} "${CMAKE_CURRENT_BINARY_DIR}/${_target}")
111 add_dependencies(tests ${_target})
112 endforeach()
113
114
115 ##############################################################################
116 # Add the deployment test, which checks that we can indeed install `hana` and
117 # then use the provided `HanaConfig.cmake` config file to use `hana` from an
118 # external project.
119 ##############################################################################
120 include(ExternalProject)
121 set(HANA_FAKE_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/deploy/fakeroot")
122 ExternalProject_Add(test.deploy.fakeroot
123 SOURCE_DIR "${PROJECT_SOURCE_DIR}"
124 EXCLUDE_FROM_ALL TRUE
125 BUILD_ALWAYS TRUE
126 CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${HANA_FAKE_INSTALL_DIR}
127 -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
128 -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
129 TEST_COMMAND "" # Disable test step
130 UPDATE_COMMAND "" # Disable source work-tree update
131 )
132
133 add_custom_target(test.deploy
134 DEPENDS test.deploy.fakeroot
135 COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/deploy/build"
136 COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}/deploy/build"
137 ${CMAKE_COMMAND} "${CMAKE_CURRENT_SOURCE_DIR}/deploy"
138 -DCMAKE_CXX_COMPILER="${CMAKE_CXX_COMPILER}"
139 -DCMAKE_PREFIX_PATH="${HANA_FAKE_INSTALL_DIR}"
140 -DCMAKE_GENERATOR=${CMAKE_GENERATOR}
141 -DCMAKE_TOOLCHAIN_FILE="${CMAKE_TOOLCHAIN_FILE}"
142 COMMAND ${CMAKE_COMMAND} --build "${CMAKE_CURRENT_BINARY_DIR}/deploy/build"
143 USES_TERMINAL
144 )
145 add_dependencies(check test.deploy)