comparison jansson/CMakeLists.txt @ 0:0047655db1aa

jansson: import 2.7
author David Demelier <markand@malikania.fr>
date Wed, 24 Feb 2016 20:50:05 +0100
parents
children 9870264521f7
comparison
equal deleted inserted replaced
-1:000000000000 0:0047655db1aa
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 if (MSVC)
44 add_definitions("/W3 /D_CRT_SECURE_NO_WARNINGS /wd4005 /wd4996 /nologo")
45
46 set(CMAKE_C_FLAGS_RELEASE "/MT")
47 set(CMAKE_C_FLAGS_DEBUG "/MTd")
48 endif()
49
50 if (NOT WIN32 AND (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX))
51 add_definitions("-fPIC")
52 endif()
53
54 check_include_files(endian.h HAVE_ENDIAN_H)
55 check_include_files(fcntl.h HAVE_FCNTL_H)
56 check_include_files(sched.h HAVE_SCHED_H)
57 check_include_files(unistd.h HAVE_UNISTD_H)
58 check_include_files(stdint.h HAVE_STDINT_H)
59 check_include_files(sys/param.h HAVE_SYS_PARAM_H)
60 check_include_files(sys/stat.h HAVE_SYS_STAT_H)
61 check_include_files(sys/time.h HAVE_SYS_TIME_H)
62 check_include_files(sys/time.h HAVE_SYS_TYPES_H)
63
64 check_function_exists(close HAVE_CLOSE)
65 check_function_exists(getpid HAVE_GETPID)
66 check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
67 check_function_exists(open HAVE_OPEN)
68 check_function_exists(read HAVE_READ)
69 check_function_exists(sched_yield HAVE_SCHED_YIELD)
70
71 check_type_size(__int64 __INT64)
72 check_type_size(int64_t INT64_T)
73 check_type_size("long long" LONG_LONG_INT)
74 check_type_size(int32_t INT32_T)
75 check_type_size(__int32 __INT32)
76 check_type_size("long" LONG_INT)
77 check_type_size("int" INT)
78
79 if (HAVE_INT32_T)
80 set(JSON_INT32 int32_t)
81 elseif (HAVE___INT32)
82 set(JSON_INT32 __int32)
83 elseif (HAVE_LONG_INT AND (${LONG_INT} EQUAL 4))
84 set(JSON_INT32 long)
85 elseif (HAVE_INT AND (${INT} EQUAL 4))
86 set(JSON_INT32 int)
87 else ()
88 message (FATAL_ERROR "Could not detect a valid 32-bit integer type")
89 endif ()
90
91 check_type_size("unsigned long" UNSIGNED_LONG_INT)
92 check_type_size("unsigned int" UNSIGNED_INT)
93 check_type_size("unsigned short" UNSIGNED_SHORT)
94 check_type_size(uint32_t UINT32_T)
95 check_type_size(__uint32 __UINT32)
96
97 if (HAVE_UINT32_T)
98 set(JSON_UINT32 uint32_t)
99 elseif (HAVE___UINT32)
100 set(JSON_UINT32 __uint32)
101 elseif (HAVE_UNSIGNED_LONG_INT AND (${UNSIGNED_LONG_INT} EQUAL 4))
102 set(JSON_UINT32 "unsigned long")
103 elseif (HAVE_UNSIGNED_INT AND (${UNSIGNED_INT} EQUAL 4))
104 set(JSON_UINT32 "unsigned int")
105 else ()
106 message(FATAL_ERROR "Could not detect a valid unsigned 32-bit integer type")
107 endif ()
108
109 check_type_size(uint16_t UINT16_T)
110 check_type_size(__uint16 __UINT16)
111
112 if (HAVE_UINT16_T)
113 set(JSON_UINT16 uint16_t)
114 elseif (HAVE___UINT16)
115 set(JSON_UINT16 __uint16)
116 elseif (HAVE_UNSIGNED_INT AND (${UNSIGNED_INT} EQUAL 2))
117 set(JSON_UINT16 "unsigned int")
118 elseif (HAVE_UNSIGNED_SHORT AND (${UNSIGNED_SHORT} EQUAL 2))
119 set(JSON_UINT16 "unsigned short")
120 else ()
121 message(FATAL_ERROR "Could not detect a valid unsigned 16-bit integer type")
122 endif ()
123
124 check_type_size(uint8_t UINT8_T)
125 check_type_size(__uint8 __UINT8)
126
127 if (HAVE_UINT8_T)
128 set(JSON_UINT8 uint8_t)
129 elseif (HAVE___UINT8)
130 set(JSON_UINT8 __uint8)
131 else ()
132 set(JSON_UINT8 "unsigned char")
133 endif ()
134
135 check_type_size(ssize_t SSIZE_T)
136 check_type_size(SSIZE_T UPPERCASE_SSIZE_T)
137
138 if(NOT HAVE_SSIZE_T)
139 if(HAVE_UPPERCASE_SSIZE_T)
140 set(JSON_SSIZE SSIZE_T)
141 else()
142 set(JSON_SSIZE int)
143 endif()
144 endif()
145
146 set(CMAKE_EXTRA_INCLUDE_FILES "")
147
148 check_function_exists(strtoll HAVE_STRTOLL)
149 check_function_exists(strtoq HAVE_STRTOQ)
150 check_function_exists(_strtoi64 HAVE__STRTOI64)
151
152 if (HAVE_STRTOLL)
153 set(JSON_STRTOINT strtoll)
154 elseif (HAVE_STRTOQ)
155 set(JSON_STRTOINT strtoq)
156 elseif (HAVE__STRTOI64)
157 set(JSON_STRTOINT _strtoi64)
158 else ()
159 set (JSON_STRTOINT strtol)
160 set (JSON_INT_T long)
161 set (JSON_INTEGER_FORMAT "\"ld\"")
162 endif ()
163
164 if (NOT DEFINED JSON_INT_T)
165 if (HAVE_LONG_LONG_INT AND (${LONG_LONG_INT} EQUAL 8))
166 set(JSON_INT_T "long long")
167 elseif (HAVE_INT64_T)
168 set(JSON_INT_T int64_t)
169 elseif (HAVE___INT64)
170 set(JSON_INT_T __int64)
171 else ()
172 message(FATAL_ERROR "Could not detect 64 bit type, although I detected the strtoll equivalent")
173 endif ()
174
175 if (WIN32)
176 set(JSON_INTEGER_FORMAT "\"I64d\"")
177 else ()
178 set(JSON_INTEGER_FORMAT "\"lld\"")
179 endif ()
180 endif ()
181
182 check_include_files (locale.h HAVE_LOCALE_H)
183 check_function_exists (localeconv HAVE_LOCALECONV)
184
185 if (HAVE_LOCALECONV AND HAVE_LOCALE_H)
186 set(JSON_HAVE_LOCALECONV 1)
187 else ()
188 set(JSON_HAVE_LOCALECONV 0)
189 endif()
190
191 check_function_exists(setlocale HAVE_SETLOCALE)
192
193 check_function_keywords("inline")
194 check_function_keywords("__inline")
195 check_function_keywords("__inline__")
196
197 if (HAVE_INLINE)
198 set(JSON_INLINE inline)
199 elseif (HAVE___INLINE)
200 set(JSON_INLINE __inline)
201 elseif (HAVE___INLINE__)
202 set(JSON_INLINE __inline__)
203 else()
204 set (JSON_INLINE)
205 endif()
206
207 check_function_exists(snprintf HAVE_SNPRINTF)
208 check_function_exists(_snprintf HAVE__SNPRINTF)
209
210 if (HAVE_SNPRINTF)
211 set(JSON_SNPRINTF snprintf)
212 elseif (HAVE__SNPRINTF)
213 set(JSON_SNPRINTF _snprintf)
214 endif ()
215
216 check_c_source_compiles("int main() { unsigned long val; __sync_bool_compare_and_swap(&val, 0, 1); return 0; } " HAVE_SYNC_BUILTINS)
217 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)
218
219 configure_file(
220 ${jansson_SOURCE_DIR}/cmake/jansson_config.h.cmake
221 ${jansson_BINARY_DIR}/include/jansson_config.h
222 )
223
224 file(
225 COPY ${jansson_SOURCE_DIR}/src/jansson.h
226 DESTINATION ${jansson_BINARY_DIR}/include/
227 )
228
229 add_definitions(-DJANSSON_USING_CMAKE)
230
231 configure_file(
232 ${jansson_SOURCE_DIR}/cmake/jansson_private_config.h.cmake
233 ${jansson_BINARY_DIR}/private_include/jansson_private_config.h
234 )
235
236 add_definitions(-DHAVE_CONFIG_H)
237
238 set(
239 JANSSON_SRC
240 ${jansson_SOURCE_DIR}/src/dump.c
241 ${jansson_SOURCE_DIR}/src/error.c
242 ${jansson_SOURCE_DIR}/src/hashtable.c
243 ${jansson_SOURCE_DIR}/src/hashtable_seed.c
244 ${jansson_SOURCE_DIR}/src/load.c
245 ${jansson_SOURCE_DIR}/src/memory.c
246 ${jansson_SOURCE_DIR}/src/pack_unpack.c
247 ${jansson_SOURCE_DIR}/src/strbuffer.c
248 ${jansson_SOURCE_DIR}/src/strconv.c
249 ${jansson_SOURCE_DIR}/src/utf.c
250 ${jansson_SOURCE_DIR}/src/value.c
251 )
252
253 set(
254 JANSSON_HDR_PRIVATE
255 ${jansson_SOURCE_DIR}/src/hashtable.h
256 ${jansson_SOURCE_DIR}/src/jansson_private.h
257 ${jansson_SOURCE_DIR}/src/strbuffer.h
258 ${jansson_SOURCE_DIR}/src/utf.h
259 ${jansson_BINARY_DIR}/private_include/jansson_private_config.h
260 )
261
262 set(
263 JANSSON_HDR_PUBLIC
264 ${jansson_BINARY_DIR}/include/jansson_config.h
265 ${jansson_SOURCE_DIR}/src/jansson.h
266 )
267
268 add_library(jansson STATIC ${JANSSON_SRC} ${JANSSON_HDR_PRIVATE} ${JANSSON_HDR_PUBLIC})
269
270 target_include_directories(
271 jansson
272 PUBLIC ${jansson_BINARY_DIR}/include
273 PRIVATE ${jansson_BINARY_DIR}/private_include
274 )