1 include(CheckCXXCompilerFlag)
13 istreamwrappertest.cpp
18 ostreamwrappertest.cpp
30 find_program(CCACHE_FOUND ccache)
32 set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
33 set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
34 if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
35 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments -fcolor-diagnostics")
39 if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
40 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal")
41 elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
42 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything")
43 # If the user is running a newer version of Clang that includes the
44 # -Wdouble-promotion, we will ignore that warning.
45 if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 3.7)
46 CHECK_CXX_COMPILER_FLAG("-Wno-double-promotion" HAS_NO_DOUBLE_PROMOTION)
47 if (HAS_NO_DOUBLE_PROMOTION)
48 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-double-promotion")
51 elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
52 # Force to always compile with /W4
53 if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
54 string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
56 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
59 # Force to always compile with /WX
60 if(CMAKE_CXX_FLAGS MATCHES "/WX-")
61 string(REGEX REPLACE "/WX-" "/WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
63 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
67 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRAPIDJSON_HAS_STDSTRING=1")
69 add_library(namespacetest STATIC namespacetest.cpp)
71 add_executable(unittest ${UNITTEST_SOURCES})
72 target_link_libraries(unittest ${TEST_LIBRARIES} namespacetest)
74 add_dependencies(tests unittest)
76 add_test(NAME unittest
77 COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/unittest
78 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
81 # Not running SIMD.* unit test cases for Valgrind
82 add_test(NAME valgrind_unittest
83 COMMAND valgrind --leak-check=full --error-exitcode=1 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/unittest --gtest_filter=-SIMD.*
84 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
86 if(CMAKE_BUILD_TYPE STREQUAL "Debug")
87 add_test(NAME symbol_check
88 COMMAND sh -c "objdump -t -C libnamespacetest.a | grep rapidjson ; test $? -ne 0"
89 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
90 endif(CMAKE_BUILD_TYPE STREQUAL "Debug")