Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/pkg
Path: blob/main/external/libucl/CMakeLists.txt
2065 views
1
CMAKE_MINIMUM_REQUIRED(VERSION 3.1.0 FATAL_ERROR)
2
PROJECT(libucl C)
3
4
SET(LIBUCL_VERSION_MAJOR 0)
5
SET(LIBUCL_VERSION_MINOR 9)
6
SET(LIBUCL_VERSION_PATCH 0)
7
8
SET(LIBUCL_VERSION
9
"${LIBUCL_VERSION_MAJOR}.${LIBUCL_VERSION_MINOR}.${LIBUCL_VERSION_PATCH}")
10
11
INCLUDE(CheckCCompilerFlag)
12
INCLUDE(CheckCSourceCompiles)
13
INCLUDE(FindOpenSSL)
14
INCLUDE(GNUInstallDirs)
15
16
OPTION(ENABLE_URL_INCLUDE "Enable urls in ucl includes (requires libcurl or libfetch) [default: OFF]" OFF)
17
OPTION(ENABLE_URL_SIGN "Enable signatures check in ucl includes (requires openssl) [default: OFF]" OFF)
18
OPTION(BUILD_SHARED_LIBS "Build Shared Libraries [default: OFF]" OFF)
19
OPTION(ENABLE_LUA "Enable lua support [default: OFF]" OFF)
20
OPTION(ENABLE_LUAJIT "Enable luajit support [default: OFF]" OFF)
21
OPTION(ENABLE_UTILS "Enable building utility binaries [default: OFF]" OFF)
22
23
# Find lua installation
24
MACRO(FindLua)
25
# Find lua libraries
26
UNSET(LUA_INCLUDE_DIR CACHE)
27
UNSET(LUA_LIBRARY CACHE)
28
CMAKE_PARSE_ARGUMENTS(LUA "" "VERSION_MAJOR;VERSION_MINOR;ROOT" "" ${ARGN})
29
30
IF(NOT LUA_VERSION_MAJOR OR NOT LUA_VERSION_MINOR)
31
MESSAGE(FATAL_ERROR "Invalid FindLua invocation: ${ARGN}")
32
ENDIF()
33
34
IF(ENABLE_LUAJIT MATCHES "ON")
35
MESSAGE(STATUS "Check for luajit ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
36
FIND_PATH(LUA_INCLUDE_DIR luajit.h
37
HINTS
38
"${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
39
$ENV{LUA_DIR}
40
PATH_SUFFIXES "include/luajit-2.0"
41
"include/luajit${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
42
"include/luajit${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
43
"include/luajit-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
44
"include/luajit"
45
"include/lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
46
"include/lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
47
"include/lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
48
include/lua include
49
PATHS ${RSPAMD_DEFAULT_INCLUDE_PATHS}
50
)
51
FIND_LIBRARY(LUA_LIBRARY
52
NAMES luajit
53
"luajit-2.0"
54
"luajit2.0"
55
"luajit${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
56
"luajit${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
57
"luajit-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
58
HINTS
59
"${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
60
$ENV{LUA_DIR}
61
PATH_SUFFIXES lib64 lib
62
PATHS ${RSPAMD_DEFAULT_LIBRARY_PATHS}
63
DOC "Lua library"
64
)
65
66
IF(NOT LUA_LIBRARY OR NOT LUA_INCLUDE_DIR)
67
MESSAGE(STATUS "Fallback from luajit to plain lua")
68
SET(ENABLE_LUAJIT "OFF")
69
MESSAGE(STATUS "Check for lua ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
70
FIND_PATH(LUA_INCLUDE_DIR lua.h
71
HINTS
72
"${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
73
$ENV{LUA_DIR}
74
PATH_SUFFIXES "include/lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
75
"include/lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
76
"include/lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
77
include/lua include
78
PATHS ${RSPAMD_DEFAULT_INCLUDE_PATHS}
79
)
80
FIND_LIBRARY(LUA_LIBRARY
81
NAMES lua
82
"lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
83
"lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
84
"lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
85
HINTS
86
"${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
87
$ENV{LUA_DIR}
88
PATH_SUFFIXES lib64 lib
89
PATHS ${RSPAMD_DEFAULT_LIBRARY_PATHS}
90
DOC "Lua library"
91
)
92
ENDIF()
93
ELSE(ENABLE_LUAJIT MATCHES "ON")
94
MESSAGE(STATUS "Check for lua ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
95
FIND_PATH(LUA_INCLUDE_DIR lua.h
96
HINTS
97
"${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
98
$ENV{LUA_DIR}
99
PATH_SUFFIXES "include/lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
100
"include/lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
101
"include/lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
102
include/lua include
103
PATHS ${RSPAMD_DEFAULT_INCLUDE_PATHS}
104
)
105
FIND_LIBRARY(LUA_LIBRARY
106
NAMES lua
107
"lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
108
"lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
109
"lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
110
HINTS
111
"${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
112
$ENV{LUA_DIR}
113
PATH_SUFFIXES lib64 lib
114
PATHS ${RSPAMD_DEFAULT_LIBRARY_PATHS}
115
DOC "Lua library"
116
)
117
ENDIF(ENABLE_LUAJIT MATCHES "ON")
118
119
IF(LUA_LIBRARY AND LUA_INCLUDE_DIR)
120
SET(LUA_FOUND 1)
121
IF(NOT LUA_VERSION_MAJOR OR NOT LUA_VERSION_MINOR)
122
SET(LUA_VERSION_MAJOR ${LUA_VERSION_MAJOR})
123
SET(LUA_VERSION_MINOR ${LUA_VERSION_MINOR})
124
ENDIF(NOT LUA_VERSION_MAJOR OR NOT LUA_VERSION_MINOR)
125
IF(ENABLE_LUAJIT MATCHES "ON")
126
MESSAGE(STATUS "Found luajit ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
127
ELSE(ENABLE_LUAJIT MATCHES "ON")
128
MESSAGE(STATUS "Found lua ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
129
ENDIF(ENABLE_LUAJIT MATCHES "ON")
130
ENDIF(LUA_LIBRARY AND LUA_INCLUDE_DIR)
131
ENDMACRO()
132
133
IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
134
LIST(APPEND CMAKE_REQUIRED_LIBRARIES rt)
135
ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
136
137
IF(ENABLE_URL_INCLUDE MATCHES "ON")
138
FIND_LIBRARY(LIBFETCH_LIBRARY NAMES fetch PATHS PATH_SUFFIXES lib64 lib
139
PATHS
140
~/Library/Frameworks
141
/Library/Frameworks
142
/usr/local
143
/usr
144
/sw
145
/opt/local
146
/opt/csw
147
/opt
148
DOC "Path where the libfetch library can be found")
149
IF(LIBFETCH_LIBRARY)
150
FIND_FILE(HAVE_FETCH_H NAMES fetch.h PATHS /usr/include
151
/opt/include
152
/usr/local/include
153
DOC "Path to libfetch header")
154
ELSE(LIBFETCH_LIBRARY)
155
# Try to find libcurl
156
FIND_PACKAGE(CURL)
157
IF(NOT CURL_FOUND)
158
MESSAGE(WARNING "Neither libcurl nor libfetch were found, no support of URL includes in configuration")
159
ENDIF(NOT CURL_FOUND)
160
ENDIF(LIBFETCH_LIBRARY)
161
ENDIF(ENABLE_URL_INCLUDE MATCHES "ON")
162
163
set(SYNC_BUILTINS_TEST_SOURCE [====[
164
int main()
165
{
166
unsigned long val;
167
168
__sync_bool_compare_and_swap(&val, 0, 1);
169
__sync_add_and_fetch(&val, 1);
170
__sync_fetch_and_add(&val, 0);
171
__sync_sub_and_fetch(&val, 1);
172
173
return 0;
174
}
175
]====])
176
177
CHECK_C_SOURCE_COMPILES("${SYNC_BUILTINS_TEST_SOURCE}" HAVE_ATOMIC_BUILTINS)
178
IF(NOT HAVE_ATOMIC_BUILTINS)
179
MESSAGE(WARNING "Libucl references could be thread-unsafe because atomic builtins are missing")
180
ENDIF(NOT HAVE_ATOMIC_BUILTINS)
181
182
SET(CMAKE_C_WARN_FLAGS "")
183
CHECK_C_COMPILER_FLAG(-W SUPPORT_W)
184
CHECK_C_COMPILER_FLAG(-Wno-pointer-sign SUPPORT_WPOINTER_SIGN)
185
CHECK_C_COMPILER_FLAG(-Wno-unused-parameter SUPPORT_WUNUSED_PARAMETER)
186
IF(SUPPORT_W)
187
SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -W")
188
ENDIF(SUPPORT_W)
189
IF(SUPPORT_WPOINTER_SIGN)
190
SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-pointer-sign")
191
ENDIF(SUPPORT_WPOINTER_SIGN)
192
IF(SUPPORT_WUNUSED_PARAMETER)
193
SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-unused-parameter")
194
ENDIF(SUPPORT_WUNUSED_PARAMETER)
195
196
SET( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_WARN_FLAGS}" )
197
198
IF(ENABLE_URL_SIGN MATCHES "ON")
199
IF(OPENSSL_FOUND)
200
SET(HAVE_OPENSSL 1)
201
INCLUDE_DIRECTORIES("${OPENSSL_INCLUDE_DIR}")
202
ENDIF(OPENSSL_FOUND)
203
ENDIF(ENABLE_URL_SIGN MATCHES "ON")
204
205
SET(UCL_COMPILE_DEFS)
206
IF(HAVE_FETCH_H)
207
LIST(APPEND UCL_COMPILE_DEFS -DHAVE_FETCH_H=1)
208
ENDIF(HAVE_FETCH_H)
209
IF(CURL_FOUND)
210
LIST(APPEND UCL_COMPILE_DEFS -DCURL_FOUND=1)
211
ENDIF(CURL_FOUND)
212
IF(HAVE_OPENSSL)
213
LIST(APPEND UCL_COMPILE_DEFS -DHAVE_OPENSSL=1)
214
ENDIF(HAVE_OPENSSL)
215
IF(HAVE_ATOMIC_BUILTINS)
216
LIST(APPEND UCL_COMPILE_DEFS -DHAVE_ATOMIC_BUILTINS=1)
217
ENDIF(HAVE_ATOMIC_BUILTINS)
218
219
SET(UCLSRC src/ucl_util.c
220
src/ucl_parser.c
221
src/ucl_emitter.c
222
src/ucl_emitter_streamline.c
223
src/ucl_emitter_utils.c
224
src/ucl_hash.c
225
src/ucl_schema.c
226
src/ucl_msgpack.c
227
src/ucl_sexp.c)
228
229
SET(UCLHDR include/ucl.h
230
include/ucl++.h)
231
232
SET (LIB_TYPE STATIC)
233
IF (BUILD_SHARED_LIBS)
234
SET (LIB_TYPE SHARED)
235
ENDIF (BUILD_SHARED_LIBS)
236
ADD_LIBRARY(ucl ${LIB_TYPE} ${UCLSRC})
237
ADD_LIBRARY(ucl::ucl ALIAS ucl)
238
SET_TARGET_PROPERTIES(ucl PROPERTIES VERSION ${LIBUCL_VERSION} SOVERSION ${LIBUCL_VERSION_MAJOR})
239
TARGET_INCLUDE_DIRECTORIES(ucl
240
PUBLIC
241
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
242
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
243
PRIVATE
244
${CMAKE_CURRENT_SOURCE_DIR}/src
245
${CMAKE_CURRENT_SOURCE_DIR}/uthash
246
${CMAKE_CURRENT_SOURCE_DIR}/klib)
247
TARGET_COMPILE_DEFINITIONS(ucl
248
PRIVATE
249
${UCL_COMPILE_DEFS}
250
)
251
252
IF(ENABLE_LUA MATCHES "ON")
253
IF(ENABLE_LUAJIT MATCHES "ON")
254
FindLua(VERSION_MAJOR "5" VERSION_MINOR "1" ROOT "${LUA_ROOT}")
255
IF(NOT LUA_FOUND)
256
MESSAGE(FATAL_ERROR "Lua not found, lua support is required")
257
ELSE(NOT LUA_FOUND)
258
INCLUDE_DIRECTORIES("${LUA_INCLUDE_DIR}")
259
ENDIF(NOT LUA_FOUND)
260
ELSE(ENABLE_LUAJIT MATCHES "ON")
261
FindLua(VERSION_MAJOR "5" VERSION_MINOR "2" ROOT "${LUA_ROOT}")
262
IF(NOT LUA_FOUND)
263
FindLua(VERSION_MAJOR "5" VERSION_MINOR "1" ROOT "${LUA_ROOT}")
264
ENDIF(NOT LUA_FOUND)
265
IF(NOT LUA_FOUND)
266
MESSAGE(FATAL_ERROR "Lua not found, lua support is required")
267
ELSE(NOT LUA_FOUND)
268
INCLUDE_DIRECTORIES("${LUA_INCLUDE_DIR}")
269
ENDIF(NOT LUA_FOUND)
270
ENDIF(ENABLE_LUAJIT MATCHES "ON")
271
SET(UCL_LUA_SRC lua/lua_ucl.c)
272
ADD_LIBRARY(lua-ucl ${LIB_TYPE} ${UCL_LUA_SRC})
273
ADD_LIBRARY(ucl::lua ALIAS lua-ucl)
274
IF(ENABLE_LUAJIT MATCHES "ON")
275
TARGET_LINK_LIBRARIES(lua-ucl "${LUAJIT_LIBRARY}")
276
ELSE(ENABLE_LUAJIT MATCHES "ON")
277
TARGET_LINK_LIBRARIES(lua-ucl "${LUA_LIBRARY}")
278
ENDIF(ENABLE_LUAJIT MATCHES "ON")
279
TARGET_LINK_LIBRARIES(lua-ucl ucl)
280
TARGET_INCLUDE_DIRECTORIES(lua-ucl PUBLIC include PRIVATE src uthash)
281
SET_TARGET_PROPERTIES(lua-ucl PROPERTIES
282
VERSION ${LIBUCL_VERSION}
283
SOVERSION ${LIBUCL_VERSION_MAJOR}
284
PUBLIC_HEADER include/lua_ucl.h)
285
INSTALL(TARGETS lua-ucl DESTINATION ${CMAKE_INSTALL_LIBDIR}
286
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
287
ENDIF()
288
289
IF(HAVE_FETCH_H)
290
TARGET_LINK_LIBRARIES(ucl fetch)
291
ELSE(HAVE_FETCH_H)
292
IF(CURL_FOUND)
293
TARGET_LINK_LIBRARIES(ucl ${CURL_LIBRARIES})
294
ENDIF(CURL_FOUND)
295
ENDIF(HAVE_FETCH_H)
296
IF(ENABLE_URL_SIGN MATCHES "ON")
297
IF(OPENSSL_FOUND)
298
TARGET_LINK_LIBRARIES(ucl ${OPENSSL_LIBRARIES})
299
ENDIF(OPENSSL_FOUND)
300
ENDIF(ENABLE_URL_SIGN MATCHES "ON")
301
302
IF(UNIX)
303
TARGET_LINK_LIBRARIES(ucl -lm)
304
ENDIF(UNIX)
305
306
SET_TARGET_PROPERTIES(ucl PROPERTIES
307
PUBLIC_HEADER "${UCLHDR}")
308
309
INSTALL(TARGETS ucl EXPORT uclConfig DESTINATION ${CMAKE_INSTALL_LIBDIR}
310
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
311
312
IF(ENABLE_UTILS MATCHES "ON")
313
ADD_SUBDIRECTORY(utils)
314
ENDIF()
315
316
install(EXPORT uclConfig
317
FILE ucl-config.cmake
318
NAMESPACE ucl::
319
DESTINATION "share/ucl"
320
)
321
322
323