]> git.proxmox.com Git - ceph.git/blob - ceph/src/fmt/test/CMakeLists.txt
import 15.2.0 Octopus source
[ceph.git] / ceph / src / 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(color-test)
90 add_fmt_test(core-test)
91 add_fmt_test(grisu-test)
92 target_compile_definitions(grisu-test PRIVATE FMT_USE_GRISU=1)
93 add_fmt_test(gtest-extra-test)
94 add_fmt_test(format-test mock-allocator.h)
95 if (NOT (MSVC AND BUILD_SHARED_LIBS))
96 add_fmt_test(format-impl-test)
97 endif ()
98 add_fmt_test(locale-test)
99 add_fmt_test(ostream-test)
100 add_fmt_test(prepare-test)
101 add_fmt_test(printf-test)
102 add_fmt_test(custom-formatter-test)
103 add_fmt_test(ranges-test)
104
105 if (HAVE_OPEN)
106 add_fmt_executable(posix-mock-test
107 posix-mock-test.cc ../src/format.cc ${TEST_MAIN_SRC})
108 target_include_directories(
109 posix-mock-test PRIVATE ${PROJECT_SOURCE_DIR}/include)
110 target_compile_definitions(posix-mock-test PRIVATE FMT_USE_FILE_DESCRIPTORS=1)
111 target_link_libraries(posix-mock-test gmock)
112 target_include_directories(posix-mock-test SYSTEM PUBLIC gtest gmock)
113 if (FMT_PEDANTIC)
114 target_compile_options(posix-mock-test PRIVATE ${PEDANTIC_COMPILE_FLAGS})
115 endif ()
116 add_test(NAME posix-mock-test COMMAND posix-mock-test)
117 add_fmt_test(posix-test)
118 endif ()
119
120 add_fmt_executable(header-only-test
121 header-only-test.cc header-only-test2.cc test-main.cc)
122 target_link_libraries(header-only-test gmock)
123 target_include_directories(header-only-test SYSTEM PUBLIC gtest gmock)
124 if (TARGET fmt-header-only)
125 target_link_libraries(header-only-test fmt-header-only)
126 else ()
127 target_include_directories(
128 header-only-test PRIVATE ${PROJECT_SOURCE_DIR}/include)
129 target_compile_definitions(header-only-test PRIVATE FMT_HEADER_ONLY=1)
130 endif ()
131
132 message(STATUS "FMT_PEDANTIC: ${FMT_PEDANTIC}")
133
134 if (FMT_PEDANTIC)
135 # Test that the library can be compiled with exceptions disabled.
136 # -fno-exception is broken in icc: https://github.com/fmtlib/fmt/issues/822.
137 if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
138 check_cxx_compiler_flag(-fno-exceptions HAVE_FNO_EXCEPTIONS_FLAG)
139 endif ()
140 if (HAVE_FNO_EXCEPTIONS_FLAG)
141 add_library(noexception-test ../src/format.cc)
142 target_include_directories(
143 noexception-test PRIVATE ${PROJECT_SOURCE_DIR}/include)
144 target_compile_options(noexception-test PRIVATE -fno-exceptions)
145 if (FMT_PEDANTIC)
146 target_compile_options(noexception-test PRIVATE ${PEDANTIC_COMPILE_FLAGS})
147 endif ()
148 endif ()
149
150 # Test that the library compiles without locale.
151 add_library(nolocale-test ../src/format.cc)
152 target_include_directories(
153 nolocale-test PRIVATE ${PROJECT_SOURCE_DIR}/include)
154 target_compile_definitions(
155 nolocale-test PRIVATE FMT_STATIC_THOUSANDS_SEPARATOR=1)
156
157 # Test that the library compiles without windows.h.
158 if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
159 add_library(no-windows-h-test ../src/format.cc)
160 target_include_directories(
161 no-windows-h-test PRIVATE ${PROJECT_SOURCE_DIR}/include)
162 target_compile_definitions(no-windows-h-test PRIVATE FMT_USE_WINDOWS_H=0)
163 if (FMT_PEDANTIC)
164 target_compile_options(no-windows-h-test PRIVATE ${PEDANTIC_COMPILE_FLAGS})
165 endif ()
166 target_include_directories(no-windows-h-test SYSTEM PUBLIC gtest gmock)
167 endif ()
168
169 add_test(compile-test ${CMAKE_CTEST_COMMAND}
170 --build-and-test
171 "${CMAKE_CURRENT_SOURCE_DIR}/compile-test"
172 "${CMAKE_CURRENT_BINARY_DIR}/compile-test"
173 --build-generator ${CMAKE_GENERATOR}
174 --build-makeprogram ${CMAKE_MAKE_PROGRAM}
175 --build-options
176 "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
177 "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}"
178 "-DCXX_STANDARD_FLAG=${CXX_STANDARD_FLAG}"
179 "-DPEDANTIC_COMPILE_FLAGS=${PEDANTIC_COMPILE_FLAGS}"
180 "-DSUPPORTS_USER_DEFINED_LITERALS=${SUPPORTS_USER_DEFINED_LITERALS}")
181 endif ()
182
183 # These tests are disabled on Windows because they take too long.
184 if (FMT_PEDANTIC AND NOT WIN32)
185 # Test if the targets are found from the build directory.
186 add_test(find-package-test ${CMAKE_CTEST_COMMAND}
187 -C ${CMAKE_BUILD_TYPE}
188 --build-and-test
189 "${CMAKE_CURRENT_SOURCE_DIR}/find-package-test"
190 "${CMAKE_CURRENT_BINARY_DIR}/find-package-test"
191 --build-generator ${CMAKE_GENERATOR}
192 --build-makeprogram ${CMAKE_MAKE_PROGRAM}
193 --build-options
194 "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
195 "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}"
196 "-DFMT_DIR=${PROJECT_BINARY_DIR}"
197 "-DPEDANTIC_COMPILE_FLAGS=${PEDANTIC_COMPILE_FLAGS}"
198 "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
199
200 # Test if the targets are found when add_subdirectory is used.
201 add_test(add-subdirectory-test ${CMAKE_CTEST_COMMAND}
202 -C ${CMAKE_BUILD_TYPE}
203 --build-and-test
204 "${CMAKE_CURRENT_SOURCE_DIR}/add-subdirectory-test"
205 "${CMAKE_CURRENT_BINARY_DIR}/add-subdirectory-test"
206 --build-generator ${CMAKE_GENERATOR}
207 --build-makeprogram ${CMAKE_MAKE_PROGRAM}
208 --build-options
209 "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
210 "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}"
211 "-DPEDANTIC_COMPILE_FLAGS=${PEDANTIC_COMPILE_FLAGS}"
212 "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
213 endif ()