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