Mercurial > embed
annotate jansson/CMakeLists.txt @ 5:9870264521f7
jansson: fix MSVC 2015 compilation
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 25 Feb 2016 09:01:37 +0100 |
parents | 0047655db1aa |
children | b63f9c593c90 |
rev | line source |
---|---|
0 | 1 # |
2 # CMakeLists.txt -- CMake build system for jansson | |
3 # | |
4 # Copyright (c) 2016 David Demelier <markand@malikania.fr> | |
5 # | |
6 # Permission to use, copy, modify, and/or distribute this software for any | |
7 # purpose with or without fee is hereby granted, provided that the above | |
8 # copyright notice and this permission notice appear in all copies. | |
9 # | |
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 # | |
18 | |
19 # | |
20 # This CMakeLists has been modified from vanilla jansson source. | |
21 # ------------------------------------------------------------------- | |
22 # | |
23 # - installation stuff has been removed, | |
24 # - documentation process has been removed. | |
25 # - style has been adapted to match our conventions. | |
26 # - comments and unneeded stuff have been removed. | |
27 # | |
28 | |
29 cmake_minimum_required(VERSION 3.0) | |
30 project(jansson C) | |
31 | |
32 option(USE_URANDOM "Use /dev/urandom to seed the hash function." On) | |
33 option(USE_WINDOWS_CRYPTOAPI "Use CryptGenRandom to seed the hash function." On) | |
34 | |
35 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${jansson_SOURCE_DIR}/cmake) | |
36 | |
37 include(CheckCSourceCompiles) | |
38 include(CheckFunctionExists) | |
39 include(CheckFunctionKeywords) | |
40 include(CheckIncludeFiles) | |
41 include(CheckTypeSize) | |
42 | |
43 check_include_files(endian.h HAVE_ENDIAN_H) | |
44 check_include_files(fcntl.h HAVE_FCNTL_H) | |
45 check_include_files(sched.h HAVE_SCHED_H) | |
46 check_include_files(unistd.h HAVE_UNISTD_H) | |
47 check_include_files(stdint.h HAVE_STDINT_H) | |
48 check_include_files(sys/param.h HAVE_SYS_PARAM_H) | |
49 check_include_files(sys/stat.h HAVE_SYS_STAT_H) | |
50 check_include_files(sys/time.h HAVE_SYS_TIME_H) | |
51 check_include_files(sys/time.h HAVE_SYS_TYPES_H) | |
52 | |
53 check_function_exists(close HAVE_CLOSE) | |
54 check_function_exists(getpid HAVE_GETPID) | |
55 check_function_exists(gettimeofday HAVE_GETTIMEOFDAY) | |
56 check_function_exists(open HAVE_OPEN) | |
57 check_function_exists(read HAVE_READ) | |
58 check_function_exists(sched_yield HAVE_SCHED_YIELD) | |
59 | |
60 check_type_size(__int64 __INT64) | |
61 check_type_size(int64_t INT64_T) | |
62 check_type_size("long long" LONG_LONG_INT) | |
63 check_type_size(int32_t INT32_T) | |
64 check_type_size(__int32 __INT32) | |
65 check_type_size("long" LONG_INT) | |
66 check_type_size("int" INT) | |
67 | |
68 if (HAVE_INT32_T) | |
69 set(JSON_INT32 int32_t) | |
70 elseif (HAVE___INT32) | |
71 set(JSON_INT32 __int32) | |
72 elseif (HAVE_LONG_INT AND (${LONG_INT} EQUAL 4)) | |
73 set(JSON_INT32 long) | |
74 elseif (HAVE_INT AND (${INT} EQUAL 4)) | |
75 set(JSON_INT32 int) | |
76 else () | |
77 message (FATAL_ERROR "Could not detect a valid 32-bit integer type") | |
78 endif () | |
79 | |
80 check_type_size("unsigned long" UNSIGNED_LONG_INT) | |
81 check_type_size("unsigned int" UNSIGNED_INT) | |
82 check_type_size("unsigned short" UNSIGNED_SHORT) | |
83 check_type_size(uint32_t UINT32_T) | |
84 check_type_size(__uint32 __UINT32) | |
85 | |
86 if (HAVE_UINT32_T) | |
87 set(JSON_UINT32 uint32_t) | |
88 elseif (HAVE___UINT32) | |
89 set(JSON_UINT32 __uint32) | |
90 elseif (HAVE_UNSIGNED_LONG_INT AND (${UNSIGNED_LONG_INT} EQUAL 4)) | |
91 set(JSON_UINT32 "unsigned long") | |
92 elseif (HAVE_UNSIGNED_INT AND (${UNSIGNED_INT} EQUAL 4)) | |
93 set(JSON_UINT32 "unsigned int") | |
94 else () | |
95 message(FATAL_ERROR "Could not detect a valid unsigned 32-bit integer type") | |
96 endif () | |
97 | |
98 check_type_size(uint16_t UINT16_T) | |
99 check_type_size(__uint16 __UINT16) | |
100 | |
101 if (HAVE_UINT16_T) | |
102 set(JSON_UINT16 uint16_t) | |
103 elseif (HAVE___UINT16) | |
104 set(JSON_UINT16 __uint16) | |
105 elseif (HAVE_UNSIGNED_INT AND (${UNSIGNED_INT} EQUAL 2)) | |
106 set(JSON_UINT16 "unsigned int") | |
107 elseif (HAVE_UNSIGNED_SHORT AND (${UNSIGNED_SHORT} EQUAL 2)) | |
108 set(JSON_UINT16 "unsigned short") | |
109 else () | |
110 message(FATAL_ERROR "Could not detect a valid unsigned 16-bit integer type") | |
111 endif () | |
112 | |
113 check_type_size(uint8_t UINT8_T) | |
114 check_type_size(__uint8 __UINT8) | |
115 | |
116 if (HAVE_UINT8_T) | |
117 set(JSON_UINT8 uint8_t) | |
118 elseif (HAVE___UINT8) | |
119 set(JSON_UINT8 __uint8) | |
120 else () | |
121 set(JSON_UINT8 "unsigned char") | |
122 endif () | |
123 | |
124 check_type_size(ssize_t SSIZE_T) | |
125 check_type_size(SSIZE_T UPPERCASE_SSIZE_T) | |
126 | |
127 if(NOT HAVE_SSIZE_T) | |
128 if(HAVE_UPPERCASE_SSIZE_T) | |
129 set(JSON_SSIZE SSIZE_T) | |
130 else() | |
131 set(JSON_SSIZE int) | |
132 endif() | |
133 endif() | |
134 | |
135 set(CMAKE_EXTRA_INCLUDE_FILES "") | |
136 | |
137 check_function_exists(strtoll HAVE_STRTOLL) | |
138 check_function_exists(strtoq HAVE_STRTOQ) | |
139 check_function_exists(_strtoi64 HAVE__STRTOI64) | |
140 | |
141 if (HAVE_STRTOLL) | |
142 set(JSON_STRTOINT strtoll) | |
143 elseif (HAVE_STRTOQ) | |
144 set(JSON_STRTOINT strtoq) | |
145 elseif (HAVE__STRTOI64) | |
146 set(JSON_STRTOINT _strtoi64) | |
147 else () | |
148 set (JSON_STRTOINT strtol) | |
149 set (JSON_INT_T long) | |
150 set (JSON_INTEGER_FORMAT "\"ld\"") | |
151 endif () | |
152 | |
153 if (NOT DEFINED JSON_INT_T) | |
154 if (HAVE_LONG_LONG_INT AND (${LONG_LONG_INT} EQUAL 8)) | |
155 set(JSON_INT_T "long long") | |
156 elseif (HAVE_INT64_T) | |
157 set(JSON_INT_T int64_t) | |
158 elseif (HAVE___INT64) | |
159 set(JSON_INT_T __int64) | |
160 else () | |
161 message(FATAL_ERROR "Could not detect 64 bit type, although I detected the strtoll equivalent") | |
162 endif () | |
163 | |
164 if (WIN32) | |
165 set(JSON_INTEGER_FORMAT "\"I64d\"") | |
166 else () | |
167 set(JSON_INTEGER_FORMAT "\"lld\"") | |
168 endif () | |
169 endif () | |
170 | |
171 check_include_files (locale.h HAVE_LOCALE_H) | |
172 check_function_exists (localeconv HAVE_LOCALECONV) | |
173 | |
174 if (HAVE_LOCALECONV AND HAVE_LOCALE_H) | |
175 set(JSON_HAVE_LOCALECONV 1) | |
176 else () | |
177 set(JSON_HAVE_LOCALECONV 0) | |
178 endif() | |
179 | |
180 check_function_exists(setlocale HAVE_SETLOCALE) | |
181 | |
182 check_function_keywords("inline") | |
183 check_function_keywords("__inline") | |
184 check_function_keywords("__inline__") | |
185 | |
186 if (HAVE_INLINE) | |
187 set(JSON_INLINE inline) | |
188 elseif (HAVE___INLINE) | |
189 set(JSON_INLINE __inline) | |
190 elseif (HAVE___INLINE__) | |
191 set(JSON_INLINE __inline__) | |
192 else() | |
193 set (JSON_INLINE) | |
194 endif() | |
195 | |
196 check_function_exists(snprintf HAVE_SNPRINTF) | |
197 check_function_exists(_snprintf HAVE__SNPRINTF) | |
198 | |
199 if (HAVE_SNPRINTF) | |
200 set(JSON_SNPRINTF snprintf) | |
201 elseif (HAVE__SNPRINTF) | |
202 set(JSON_SNPRINTF _snprintf) | |
203 endif () | |
204 | |
205 check_c_source_compiles("int main() { unsigned long val; __sync_bool_compare_and_swap(&val, 0, 1); return 0; } " HAVE_SYNC_BUILTINS) | |
206 check_c_source_compiles("int main() { char l; unsigned long v; __atomic_test_and_set(&l, __ATOMIC_RELAXED); __atomic_store_n(&v, 1, __ATOMIC_RELEASE); __atomic_load_n(&v, __ATOMIC_ACQUIRE); return 0; }" HAVE_ATOMIC_BUILTINS) | |
207 | |
208 configure_file( | |
209 ${jansson_SOURCE_DIR}/cmake/jansson_config.h.cmake | |
210 ${jansson_BINARY_DIR}/include/jansson_config.h | |
211 ) | |
212 | |
213 file( | |
214 COPY ${jansson_SOURCE_DIR}/src/jansson.h | |
215 DESTINATION ${jansson_BINARY_DIR}/include/ | |
216 ) | |
217 | |
218 add_definitions(-DJANSSON_USING_CMAKE) | |
219 | |
220 configure_file( | |
221 ${jansson_SOURCE_DIR}/cmake/jansson_private_config.h.cmake | |
222 ${jansson_BINARY_DIR}/private_include/jansson_private_config.h | |
223 ) | |
224 | |
225 add_definitions(-DHAVE_CONFIG_H) | |
226 | |
227 set( | |
228 JANSSON_SRC | |
229 ${jansson_SOURCE_DIR}/src/dump.c | |
230 ${jansson_SOURCE_DIR}/src/error.c | |
231 ${jansson_SOURCE_DIR}/src/hashtable.c | |
232 ${jansson_SOURCE_DIR}/src/hashtable_seed.c | |
233 ${jansson_SOURCE_DIR}/src/load.c | |
234 ${jansson_SOURCE_DIR}/src/memory.c | |
235 ${jansson_SOURCE_DIR}/src/pack_unpack.c | |
236 ${jansson_SOURCE_DIR}/src/strbuffer.c | |
237 ${jansson_SOURCE_DIR}/src/strconv.c | |
238 ${jansson_SOURCE_DIR}/src/utf.c | |
239 ${jansson_SOURCE_DIR}/src/value.c | |
240 ) | |
241 | |
242 set( | |
243 JANSSON_HDR_PRIVATE | |
244 ${jansson_SOURCE_DIR}/src/hashtable.h | |
245 ${jansson_SOURCE_DIR}/src/jansson_private.h | |
246 ${jansson_SOURCE_DIR}/src/strbuffer.h | |
247 ${jansson_SOURCE_DIR}/src/utf.h | |
248 ${jansson_BINARY_DIR}/private_include/jansson_private_config.h | |
249 ) | |
250 | |
251 set( | |
252 JANSSON_HDR_PUBLIC | |
253 ${jansson_BINARY_DIR}/include/jansson_config.h | |
254 ${jansson_SOURCE_DIR}/src/jansson.h | |
255 ) | |
256 | |
257 add_library(jansson STATIC ${JANSSON_SRC} ${JANSSON_HDR_PRIVATE} ${JANSSON_HDR_PUBLIC}) | |
258 | |
259 target_include_directories( | |
260 jansson | |
261 PUBLIC ${jansson_BINARY_DIR}/include | |
262 PRIVATE ${jansson_BINARY_DIR}/private_include | |
263 ) | |
5
9870264521f7
jansson: fix MSVC 2015 compilation
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
264 |
9870264521f7
jansson: fix MSVC 2015 compilation
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
265 if (MSVC) |
9870264521f7
jansson: fix MSVC 2015 compilation
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
266 target_compile_definitions(jansson PUBLIC _CRT_SECURE_NO_WARNINGS) |
9870264521f7
jansson: fix MSVC 2015 compilation
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
267 target_compile_options(jansson PUBLIC /W3 /D /wd4005 /wd4996 /wd4334 /wd4267) |
9870264521f7
jansson: fix MSVC 2015 compilation
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
268 endif() |