]> git.proxmox.com Git - ceph.git/blob - ceph/src/seastar/fmt/test/CMakeLists.txt
update download target update for octopus release
[ceph.git] / ceph / src / seastar / fmt / test / CMakeLists.txt
1 #------------------------------------------------------------------------------
2 # Build the google test library
3
4 # We compile Google Test ourselves instead of using pre-compiled libraries.
5 # See the Google Test FAQ "Why is it not recommended to install a
6 # pre-compiled copy of Google Test (for example, into /usr/local)?"
7 # at http://code.google.com/p/googletest/wiki/FAQ for more details.
8 add_library(gmock STATIC
9 gmock-gtest-all.cc gmock/gmock.h gtest/gtest.h gtest/gtest-spi.h)
10 target_compile_definitions(gmock PUBLIC GTEST_HAS_STD_WSTRING=1)
11 target_include_directories(gmock SYSTEM PUBLIC . gmock gtest)
12
13 find_package(Threads)
14 if (Threads_FOUND)
15 target_link_libraries(gmock ${CMAKE_THREAD_LIBS_INIT})
16 else ()
17 target_compile_definitions(gmock PUBLIC GTEST_HAS_PTHREAD=0)
18 endif ()
19
20 if (NOT SUPPORTS_VARIADIC_TEMPLATES OR NOT SUPPORTS_INITIALIZER_LIST)
21 target_compile_definitions(gmock PUBLIC GTEST_LANG_CXX11=0)
22 endif ()
23
24 # Workaround a bug in implementation of variadic templates in MSVC11.
25 if (MSVC)
26 target_compile_definitions(gmock PUBLIC _VARIADIC_MAX=10)
27 endif ()
28
29 # GTest doesn't detect <tuple> with clang.
30 if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
31 target_compile_definitions(gmock PUBLIC GTEST_USE_OWN_TR1_TUPLE=1)
32 endif ()
33
34 # Silence MSVC tr1 deprecation warning in gmock.
35 target_compile_definitions(gmock
36 PUBLIC _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING=0)
37
38 #------------------------------------------------------------------------------
39 # Build the actual library tests
40
41 set(TEST_MAIN_SRC test-main.cc gtest-extra.cc gtest-extra.h util.cc)
42 add_library(test-main STATIC ${TEST_MAIN_SRC})
43 target_compile_definitions(test-main PUBLIC
44 FMT_USE_FILE_DESCRIPTORS=$<BOOL:${HAVE_OPEN}>)
45 target_include_directories(test-main SYSTEM PUBLIC gtest gmock)
46 target_link_libraries(test-main gmock fmt)
47
48 include(CheckCXXCompilerFlag)
49
50 # Workaround GTest bug https://github.com/google/googletest/issues/705.
51 check_cxx_compiler_flag(
52 -fno-delete-null-pointer-checks HAVE_FNO_DELETE_NULL_POINTER_CHECKS)
53 if (HAVE_FNO_DELETE_NULL_POINTER_CHECKS)
54 target_compile_options(test-main PUBLIC -fno-delete-null-pointer-checks)
55 endif ()
56
57 # Use less strict pedantic flags for the tests because GMock doesn't compile
58 # cleanly with -pedantic and -std=c++98.
59 if (CMAKE_COMPILER_IS_GNUCXX OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
60 #set(PEDANTIC_COMPILE_FLAGS -Wall -Wextra -Wno-long-long -Wno-variadic-macros)
61 endif ()
62
63 function(add_fmt_executable name)
64 add_executable(${name} ${ARGN})
65 if (MINGW)
66 target_link_libraries(${name} -static-libgcc -static-libstdc++)
67 endif ()
68 endfunction()
69
70 # Adds a test.
71 # Usage: add_fmt_test(name srcs...)
72 function(add_fmt_test name)
73 add_fmt_executable(${name} ${name}.cc ${ARGN})
74 target_link_libraries(${name} test-main)
75
76 # Define if certain C++ features can be used.
77 target_compile_definitions(${name} PRIVATE
78 FMT_USE_TYPE_TRAITS=$<BOOL:${SUPPORTS_TYPE_TRAITS}>
79 FMT_USE_ENUM_BASE=$<BOOL:${SUPPORTS_ENUM_BASE}>)
80 if (FMT_PEDANTIC)
81 target_compile_options(${name} PRIVATE ${PEDANTIC_COMPILE_FLAGS})
82 endif ()
83 target_include_directories(${name} SYSTEM PUBLIC gtest gmock)
84 add_test(NAME ${name} COMMAND ${name})
85 endfunction()
86
87 add_fmt_test(assert-test)
88 add_fmt_test(chrono-test)
89 add_fmt_test(core-test)
90 add_fmt_test(gtest-extra-test)
91 add_fmt_test(format-test mock-allocator.h)
92 if (NOT (MSVC AND BUILD_SHARED_LIBS))
93 add_fmt_test(format-impl-test)
94 endif ()
95 add_fmt_test(locale-test)
96 add_fmt_test(ostream-test)
97 add_fmt_test(printf-test)
98 add_fmt_test(time-test)
99 add_fmt_test(custom-formatter-test)
100 add_fmt_test(ranges-test)
101
102 if (HAVE_OPEN)
103 add_fmt_executable(posix-mock-test
104 posix-mock-test.cc ../src/format.cc ${TEST_MAIN_SRC})
105 target_include_directories(
106 posix-mock-test PRIVATE ${PROJECT_SOURCE_DIR}/include)
107 target_compile_definitions(posix-mock-test PRIVATE FMT_USE_FILE_DESCRIPTORS=1)
108 target_link_libraries(posix-mock-test gmock)
109 target_include_directories(posix-mock-test SYSTEM PUBLIC gtest gmock)
110 if (FMT_PEDANTIC)
111 target_compile_options(posix-mock-test PRIVATE ${PEDANTIC_COMPILE_FLAGS})
112 endif ()
113 add_test(NAME posix-mock-test COMMAND posix-mock-test)
114 add_fmt_test(posix-test)
115 endif ()
116
117 add_fmt_executable(header-only-test
118 header-only-test.cc header-only-test2.cc test-main.cc)
119 target_link_libraries(header-only-test gmock)
120 target_include_directories(header-only-test SYSTEM PUBLIC gtest gmock)
121 if (TARGET fmt-header-only)
122 target_link_libraries(header-only-test fmt-header-only)
123 else ()
124 target_include_directories(
125 header-only-test PRIVATE ${PROJECT_SOURCE_DIR}/include)
126 target_compile_definitions(header-only-test PRIVATE FMT_HEADER_ONLY=1)
127 endif ()
128
129 # Test that the library can be compiled with exceptions disabled.
130 # -fno-exception is broken in icc: https://github.com/fmtlib/fmt/issues/822.
131 if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
132 check_cxx_compiler_flag(-fno-exceptions HAVE_FNO_EXCEPTIONS_FLAG)
133 endif ()
134 if (HAVE_FNO_EXCEPTIONS_FLAG)
135 add_library(noexception-test ../src/format.cc)
136 target_include_directories(
137 noexception-test PRIVATE ${PROJECT_SOURCE_DIR}/include)
138 target_compile_options(noexception-test PRIVATE -fno-exceptions)
139 if (FMT_PEDANTIC)
140 target_compile_options(noexception-test PRIVATE ${PEDANTIC_COMPILE_FLAGS})
141 endif ()
142 target_include_directories(noexception-test SYSTEM PUBLIC gtest gmock)
143 endif ()
144
145 message(STATUS "FMT_PEDANTIC: ${FMT_PEDANTIC}")
146
147 if (FMT_PEDANTIC)
148 # Test that the library compiles without windows.h.
149 if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
150 add_library(no-windows-h-test ../src/format.cc)
151 target_include_directories(
152 no-windows-h-test PRIVATE ${PROJECT_SOURCE_DIR}/include)
153 target_compile_definitions(no-windows-h-test PRIVATE FMT_USE_WINDOWS_H=0)
154 if (FMT_PEDANTIC)
155 target_compile_options(no-windows-h-test PRIVATE ${PEDANTIC_COMPILE_FLAGS})
156 endif ()
157 target_include_directories(no-windows-h-test SYSTEM PUBLIC gtest gmock)
158 endif ()
159
160 add_test(compile-test ${CMAKE_CTEST_COMMAND}
161 --build-and-test
162 "${CMAKE_CURRENT_SOURCE_DIR}/compile-test"
163 "${CMAKE_CURRENT_BINARY_DIR}/compile-test"
164 --build-generator ${CMAKE_GENERATOR}
165 --build-makeprogram ${CMAKE_MAKE_PROGRAM}
166 --build-options
167 "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
168 "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}"
169 "-DCXX_STANDARD_FLAG=${CXX_STANDARD_FLAG}"
170 "-DPEDANTIC_COMPILE_FLAGS=${PEDANTIC_COMPILE_FLAGS}"
171 "-DSUPPORTS_USER_DEFINED_LITERALS=${SUPPORTS_USER_DEFINED_LITERALS}")
172 endif ()
173
174 # These tests are disabled on Windows because they take too long.
175 if (FMT_PEDANTIC AND NOT WIN32)
176 # Test if the targets are found from the build directory.
177 add_test(find-package-test ${CMAKE_CTEST_COMMAND}
178 -C ${CMAKE_BUILD_TYPE}
179 --build-and-test
180 "${CMAKE_CURRENT_SOURCE_DIR}/find-package-test"
181 "${CMAKE_CURRENT_BINARY_DIR}/find-package-test"
182 --build-generator ${CMAKE_GENERATOR}
183 --build-makeprogram ${CMAKE_MAKE_PROGRAM}
184 --build-options
185 "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
186 "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}"
187 "-DFMT_DIR=${PROJECT_BINARY_DIR}"
188 "-DPEDANTIC_COMPILE_FLAGS=${PEDANTIC_COMPILE_FLAGS}"
189 "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
190
191 # Test if the targets are found when add_subdirectory is used.
192 add_test(add-subdirectory-test ${CMAKE_CTEST_COMMAND}
193 -C ${CMAKE_BUILD_TYPE}
194 --build-and-test
195 "${CMAKE_CURRENT_SOURCE_DIR}/add-subdirectory-test"
196 "${CMAKE_CURRENT_BINARY_DIR}/add-subdirectory-test"
197 --build-generator ${CMAKE_GENERATOR}
198 --build-makeprogram ${CMAKE_MAKE_PROGRAM}
199 --build-options
200 "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
201 "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}"
202 "-DPEDANTIC_COMPILE_FLAGS=${PEDANTIC_COMPILE_FLAGS}"
203 "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
204 endif ()