11add_subdirectory (gtest )
22
3- set (TEST_MAIN_SRC test-main.cc gtest-extra.cc gtest-extra.h util.cc)
3+ set (TEST_MAIN_SRC test-main.cc gtest-extra.cc util.cc)
44add_library (test -main STATIC ${TEST_MAIN_SRC} )
5- target_include_directories (
6- test -main PUBLIC $<BUILD_INTERFACE :${PROJECT_SOURCE_DIR} /include >)
7- target_link_libraries (test -main gtest fmt )
5+ target_include_directories (test -main PUBLIC
6+ $<BUILD_INTERFACE :${PROJECT_SOURCE_DIR} /include >)
7+ target_link_libraries (test -main gtest fmt::fmt )
8+ if (MSVC )
9+ target_compile_options (test -main PUBLIC /utf-8 )
10+ endif ()
811
912# Adds a test.
1013# Usage: add_fmt_test(name srcs...)
11- function (add_fmt_test name )
14+ function (add_fmt_test name )
1215 cmake_parse_arguments (ADD_FMT_TEST "HEADER_ONLY;MODULE" "" "" ${ARGN} )
13-
1416 set (sources ${name} .cc ${ADD_FMT_TEST_UNPARSED_ARGUMENTS} )
1517 if (ADD_FMT_TEST_HEADER_ONLY)
1618 set (sources ${sources} ${TEST_MAIN_SRC} ../src/os.cc)
17- set (libs gtest fmt-header-only)
19+ set (libs gtest fmt::fmt -header-only)
1820 if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
1921 set (PEDANTIC_COMPILE_FLAGS ${PEDANTIC_COMPILE_FLAGS} -Wno-weak-vtables)
2022 endif ()
2123 elseif (ADD_FMT_TEST_MODULE)
22- set (libs test-main)
24+ set (libs test-main fmt::fmt-module )
2325 else ()
24- set (libs test-main fmt )
26+ set (libs test-main)
2527 endif ()
2628 add_executable (${name} ${sources} )
27- target_link_libraries (${name} ${libs} )
29+ target_link_libraries (${name} PRIVATE ${libs} )
2830
2931 if (ADD_FMT_TEST_HEADER_ONLY AND NOT FMT_UNICODE)
3032 target_compile_definitions (${name} PUBLIC FMT_UNICODE=0 )
3133 endif ()
3234
35+
3336 # Define if certain C++ features can be used.
3437 if (FMT_PEDANTIC)
3538 target_compile_options (${name} PRIVATE ${PEDANTIC_COMPILE_FLAGS} )
@@ -38,7 +41,7 @@ function (add_fmt_test name)
3841 target_compile_options (${name} PRIVATE ${WERROR_FLAG} )
3942 endif ()
4043 add_test (NAME ${name} COMMAND ${name} )
41- endfunction ()
44+ endfunction ()
4245
4346add_fmt_test (args-test )
4447add_fmt_test (base-test )
@@ -60,10 +63,10 @@ add_fmt_test(ranges-test ranges-odr-test.cc)
6063add_fmt_test (no -builtin-types-test HEADER_ONLY )
6164add_fmt_test (scan-test HEADER_ONLY )
6265add_fmt_test (std-test )
63- try_compile (
64- compile_result_unused ${CMAKE_CURRENT_BINARY_DIR}
65- SOURCES ${CMAKE_CURRENT_LIST_DIR} /detect-stdfs.cc
66- OUTPUT_VARIABLE RAWOUTPUT )
66+ try_compile (compile_result_unused
67+ ${CMAKE_CURRENT_BINARY_DIR}
68+ SOURCES ${CMAKE_CURRENT_LIST_DIR} /detect-stdfs.cc
69+ OUTPUT_VARIABLE RAWOUTPUT )
6770string (REGEX REPLACE ".*libfound \" ([^\" ]*)\" .*" "\\ 1" STDLIBFS "${RAWOUTPUT} " )
6871if (STDLIBFS)
6972 target_link_libraries (std-test ${STDLIBFS} )
@@ -74,34 +77,36 @@ if (MSVC)
7477endif ()
7578add_fmt_test (xchar-test )
7679add_fmt_test (enforce-checks-test )
77- target_compile_definitions (enforce-checks-test
78- PRIVATE -DFMT_ENFORCE_COMPILE_STRING )
80+ target_compile_definitions (enforce-checks-test PRIVATE
81+ -DFMT_ENFORCE_COMPILE_STRING )
7982
8083add_executable (perf-sanity perf-sanity.cc )
8184target_link_libraries (perf-sanity fmt::fmt )
8285
8386if (FMT_MODULE)
84- # Module tests are currently disabled.
85- # add_fmt_test(module-test MODULE test-main.cc)
86- # target_link_libraries(module-test fmt-module)
87+ add_fmt_test (module-test MODULE )
88+ if (MSVC )
89+ target_compile_options (module-test PRIVATE /utf-8 /Zc:__cplusplus
90+ /Zc:externConstexpr /Zc:inline )
91+ endif ()
8792endif ()
8893
8994if (NOT DEFINED MSVC_STATIC_RUNTIME AND MSVC )
9095 foreach (flag_var
91- CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
92- CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO )
93- if (${flag_var} MATCHES "^(/|-)(MT|MTd)" )
94- set (MSVC_STATIC_RUNTIME ON )
95- break ()
96- endif ()
97- endforeach ()
96+ CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
97+ CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO )
98+ if (${flag_var} MATCHES "^(/|-)(MT|MTd)" )
99+ set (MSVC_STATIC_RUNTIME ON )
100+ break ()
101+ endif ()
102+ endforeach ()
98103endif ()
99104
100105if (NOT MSVC_STATIC_RUNTIME)
101- add_executable (posix-mock-test posix-mock-test.cc ../src/format.cc
102- ${TEST_MAIN_SRC} )
103- target_include_directories (posix-mock-test
104- PRIVATE ${PROJECT_SOURCE_DIR} /include )
106+ add_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 )
105110 target_link_libraries (posix-mock-test gtest )
106111 if (FMT_PEDANTIC)
107112 target_compile_options (posix-mock-test PRIVATE ${PEDANTIC_COMPILE_FLAGS} )
@@ -123,38 +128,34 @@ if (FMT_PEDANTIC)
123128 endif ()
124129 if (HAVE_FNO_EXCEPTIONS_FLAG)
125130 add_library (noexception-test ../src/format.cc noexception-test.cc )
126- target_include_directories (noexception-test
127- PRIVATE ${PROJECT_SOURCE_DIR} /include )
131+ target_include_directories (
132+ noexception-test PRIVATE ${PROJECT_SOURCE_DIR} /include )
128133 target_compile_options (noexception-test PRIVATE -fno-exceptions )
129134 target_compile_options (noexception-test PRIVATE ${PEDANTIC_COMPILE_FLAGS} )
130135 endif ()
131136
132137 # Test that the library compiles without locale.
133138 add_library (nolocale-test ../src/format.cc )
134- target_include_directories (nolocale-test
135- PRIVATE ${PROJECT_SOURCE_DIR} /include )
136- target_compile_definitions (nolocale-test
137- PRIVATE FMT_STATIC_THOUSANDS_SEPARATOR=1 )
139+ target_include_directories (
140+ nolocale-test PRIVATE ${PROJECT_SOURCE_DIR} /include )
141+ target_compile_definitions (
142+ nolocale-test PRIVATE FMT_STATIC_THOUSANDS_SEPARATOR=1 )
138143endif ()
139144
140145# These tests are disabled on Windows because they take too long.
141- # They are disabled on GCC < 4.9 because it can't parse UDLs without a space
142- # after operator"" but that is an incorrect syntax for any more modern compiler.
143- if (FMT_PEDANTIC
144- AND NOT WIN32
145- AND NOT ( CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION
146- VERSION_LESS 4.9))
146+ # They are disabled on GCC < 4.9 because it can not parse UDLs without
147+ # a space after ` operator""` but that is an incorrect syntax for any more
148+ # modern compiler.
149+ if (FMT_PEDANTIC AND NOT WIN32 AND NOT (
150+ CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND
151+ CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9))
147152 # Test if incorrect API usages produce compilation error.
148- add_test (
149- compile-error-test
150- ${CMAKE_CTEST_COMMAND}
153+ add_test (compile-error-test ${CMAKE_CTEST_COMMAND}
151154 --build-and-test
152155 "${CMAKE_CURRENT_SOURCE_DIR} /compile-error-test"
153156 "${CMAKE_CURRENT_BINARY_DIR} /compile-error-test"
154- --build-generator
155- ${CMAKE_GENERATOR}
156- --build-makeprogram
157- ${CMAKE_MAKE_PROGRAM}
157+ --build-generator ${CMAKE_GENERATOR}
158+ --build-makeprogram ${CMAKE_MAKE_PROGRAM}
158159 --build-options
159160 "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} "
160161 "-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} "
@@ -163,18 +164,13 @@ if (FMT_PEDANTIC
163164 "-DFMT_DIR=${CMAKE_SOURCE_DIR} " )
164165
165166 # Test if the targets are found from the build directory.
166- add_test (
167- find -package-test
168- ${CMAKE_CTEST_COMMAND}
169- -C
170- ${CMAKE_BUILD_TYPE}
167+ add_test (find -package-test ${CMAKE_CTEST_COMMAND}
168+ -C ${CMAKE_BUILD_TYPE}
171169 --build-and-test
172170 "${CMAKE_CURRENT_SOURCE_DIR} /find-package-test"
173171 "${CMAKE_CURRENT_BINARY_DIR} /find-package-test"
174- --build-generator
175- ${CMAKE_GENERATOR}
176- --build-makeprogram
177- ${CMAKE_MAKE_PROGRAM}
172+ --build-generator ${CMAKE_GENERATOR}
173+ --build-makeprogram ${CMAKE_MAKE_PROGRAM}
178174 --build-options
179175 "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} "
180176 "-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} "
@@ -184,18 +180,13 @@ if (FMT_PEDANTIC
184180 "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} " )
185181
186182 # Test if the targets are found when add_subdirectory is used.
187- add_test (
188- add-subdirectory-test
189- ${CMAKE_CTEST_COMMAND}
190- -C
191- ${CMAKE_BUILD_TYPE}
183+ add_test (add-subdirectory-test ${CMAKE_CTEST_COMMAND}
184+ -C ${CMAKE_BUILD_TYPE}
192185 --build-and-test
193186 "${CMAKE_CURRENT_SOURCE_DIR} /add-subdirectory-test"
194187 "${CMAKE_CURRENT_BINARY_DIR} /add-subdirectory-test"
195- --build-generator
196- ${CMAKE_GENERATOR}
197- --build-makeprogram
198- ${CMAKE_MAKE_PROGRAM}
188+ --build-generator ${CMAKE_GENERATOR}
189+ --build-makeprogram ${CMAKE_MAKE_PROGRAM}
199190 --build-options
200191 "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} "
201192 "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} "
@@ -205,18 +196,13 @@ endif ()
205196
206197# This test is disabled on Windows because it is POSIX-specific.
207198if (FMT_PEDANTIC AND NOT WIN32 )
208- add_test (
209- static -export-test
210- ${CMAKE_CTEST_COMMAND}
211- -C
212- ${CMAKE_BUILD_TYPE}
199+ add_test (static -export-test ${CMAKE_CTEST_COMMAND}
200+ -C ${CMAKE_BUILD_TYPE}
213201 --build-and-test
214202 "${CMAKE_CURRENT_SOURCE_DIR} /static-export-test"
215203 "${CMAKE_CURRENT_BINARY_DIR} /static-export-test"
216- --build-generator
217- ${CMAKE_GENERATOR}
218- --build-makeprogram
219- ${CMAKE_MAKE_PROGRAM}
204+ --build-generator ${CMAKE_GENERATOR}
205+ --build-makeprogram ${CMAKE_MAKE_PROGRAM}
220206 --build-options
221207 "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} "
222208 "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} "
0 commit comments