]> git.proxmox.com Git - ceph.git/blob - ceph/src/rapidjson/CMakeLists.txt
update sources to v12.1.0
[ceph.git] / ceph / src / rapidjson / CMakeLists.txt
1 CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
2 if(POLICY CMP0025)
3 # detect Apple's Clang
4 cmake_policy(SET CMP0025 NEW)
5 endif()
6 if(POLICY CMP0054)
7 cmake_policy(SET CMP0054 NEW)
8 endif()
9
10 SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules)
11
12 PROJECT(RapidJSON CXX)
13
14 set(LIB_MAJOR_VERSION "1")
15 set(LIB_MINOR_VERSION "1")
16 set(LIB_PATCH_VERSION "0")
17 set(LIB_VERSION_STRING "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_PATCH_VERSION}")
18
19 # compile in release with debug info mode by default
20 if(NOT CMAKE_BUILD_TYPE)
21 set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
22 endif()
23
24 # Build all binaries in a separate directory
25 SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
26
27 option(RAPIDJSON_BUILD_DOC "Build rapidjson documentation." ON)
28 option(RAPIDJSON_BUILD_EXAMPLES "Build rapidjson examples." ON)
29 option(RAPIDJSON_BUILD_TESTS "Build rapidjson perftests and unittests." ON)
30 option(RAPIDJSON_BUILD_THIRDPARTY_GTEST
31 "Use gtest installation in `thirdparty/gtest` by default if available" OFF)
32
33 option(RAPIDJSON_BUILD_CXX11 "Build rapidjson with C++11 (gcc/clang)" ON)
34
35 option(RAPIDJSON_BUILD_ASAN "Build rapidjson with address sanitizer (gcc/clang)" OFF)
36 option(RAPIDJSON_BUILD_UBSAN "Build rapidjson with undefined behavior sanitizer (gcc/clang)" OFF)
37
38 option(RAPIDJSON_HAS_STDSTRING "" OFF)
39 if(RAPIDJSON_HAS_STDSTRING)
40 add_definitions(-DRAPIDJSON_HAS_STDSTRING)
41 endif()
42
43 find_program(CCACHE_FOUND ccache)
44 if(CCACHE_FOUND)
45 set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
46 set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
47 if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
48 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments -fcolor-diagnostics")
49 endif()
50 endif(CCACHE_FOUND)
51
52 if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
53 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -Wall -Wextra -Werror")
54 if (RAPIDJSON_BUILD_CXX11)
55 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7.0")
56 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
57 else()
58 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
59 endif()
60 endif()
61 if (RAPIDJSON_BUILD_ASAN)
62 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.0")
63 message(FATAL_ERROR "GCC < 4.8 doesn't support the address sanitizer")
64 else()
65 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
66 endif()
67 endif()
68 if (RAPIDJSON_BUILD_UBSAN)
69 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9.0")
70 message(FATAL_ERROR "GCC < 4.9 doesn't support the undefined behavior sanitizer")
71 else()
72 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
73 endif()
74 endif()
75 elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
76 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -Wall -Wextra -Werror -Wno-missing-field-initializers")
77 if (RAPIDJSON_BUILD_CXX11)
78 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
79 endif()
80 if (RAPIDJSON_BUILD_ASAN)
81 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
82 endif()
83 if (RAPIDJSON_BUILD_UBSAN)
84 if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
85 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined-trap -fsanitize-undefined-trap-on-error")
86 else()
87 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
88 endif()
89 endif()
90 elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
91 add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
92 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
93 endif()
94
95 #add extra search paths for libraries and includes
96 SET(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "The directory the headers are installed in")
97 SET(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE STRING "Directory where lib will install")
98 SET(DOC_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}" CACHE PATH "Path to the documentation")
99
100 IF(UNIX OR CYGWIN)
101 SET(_CMAKE_INSTALL_DIR "${LIB_INSTALL_DIR}/cmake/${PROJECT_NAME}")
102 ELSEIF(WIN32)
103 SET(_CMAKE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/cmake")
104 ENDIF()
105 SET(CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR}" CACHE PATH "The directory cmake fiels are installed in")
106
107 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
108
109 if(RAPIDJSON_BUILD_DOC)
110 add_subdirectory(doc)
111 endif()
112
113 add_custom_target(travis_doc)
114 add_custom_command(TARGET travis_doc
115 COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/travis-doxygen.sh)
116
117 if(RAPIDJSON_BUILD_EXAMPLES)
118 add_subdirectory(example)
119 endif()
120
121 if(RAPIDJSON_BUILD_TESTS)
122 if(MSVC11)
123 # required for VS2012 due to missing support for variadic templates
124 add_definitions(-D_VARIADIC_MAX=10)
125 endif(MSVC11)
126 add_subdirectory(test)
127 include(CTest)
128 endif()
129
130 # pkg-config
131 IF (UNIX OR CYGWIN)
132 CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc.in
133 ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
134 @ONLY)
135 INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
136 DESTINATION "${LIB_INSTALL_DIR}/pkgconfig"
137 COMPONENT pkgconfig)
138 ENDIF()
139
140 install(FILES readme.md
141 DESTINATION "${DOC_INSTALL_DIR}"
142 COMPONENT doc)
143
144 install(DIRECTORY include/rapidjson
145 DESTINATION "${INCLUDE_INSTALL_DIR}"
146 COMPONENT dev)
147
148 install(DIRECTORY example/
149 DESTINATION "${DOC_INSTALL_DIR}/examples"
150 COMPONENT examples
151 # Following patterns are for excluding the intermediate/object files
152 # from an install of in-source CMake build.
153 PATTERN "CMakeFiles" EXCLUDE
154 PATTERN "Makefile" EXCLUDE
155 PATTERN "cmake_install.cmake" EXCLUDE)
156
157 # Provide config and version files to be used by other applications
158 # ===============================
159
160 export(PACKAGE ${PROJECT_NAME})
161
162 # cmake-modules
163 CONFIGURE_FILE(${PROJECT_NAME}Config.cmake.in
164 ${PROJECT_NAME}Config.cmake
165 @ONLY)
166 CONFIGURE_FILE(${PROJECT_NAME}ConfigVersion.cmake.in
167 ${PROJECT_NAME}ConfigVersion.cmake
168 @ONLY)
169 INSTALL(FILES
170 ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
171 ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
172 DESTINATION "${CMAKE_INSTALL_DIR}"
173 COMPONENT dev)