2 CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)
4 SET(LIBUCL_VERSION_MAJOR 0)
5 SET(LIBUCL_VERSION_MINOR 5)
6 SET(LIBUCL_VERSION_PATCH 0)
9 "${LIBUCL_VERSION_MAJOR}.${LIBUCL_VERSION_MINOR}.${LIBUCL_VERSION_PATCH}")
11 INCLUDE(CheckCCompilerFlag)
14 OPTION(ENABLE_URL_INCLUDE "Enable urls in ucl includes (requires libcurl or libfetch) [default: OFF]" OFF)
15 OPTION(ENABLE_URL_SIGN "Enable signatures check in ucl includes (requires openssl) [default: OFF]" OFF)
16 OPTION(BUILD_SHARED_LIBS "Build Shared Libraries [default: OFF]" OFF)
17 OPTION(ENABLE_LUA "Enable lua support [default: OFF]" OFF)
18 OPTION(ENABLE_LUAJIT "Enable luajit support [default: OFF]" OFF)
20 # Find lua installation
23 UNSET(LUA_INCLUDE_DIR CACHE)
24 UNSET(LUA_LIBRARY CACHE)
25 CMAKE_PARSE_ARGUMENTS(LUA "" "VERSION_MAJOR;VERSION_MINOR;ROOT" "" ${ARGN})
27 IF(NOT LUA_VERSION_MAJOR OR NOT LUA_VERSION_MINOR)
28 MESSAGE(FATAL_ERROR "Invalid FindLua invocation: ${ARGN}")
31 IF(ENABLE_LUAJIT MATCHES "ON")
32 MESSAGE(STATUS "Check for luajit ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
33 FIND_PATH(LUA_INCLUDE_DIR luajit.h
35 "${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
37 PATH_SUFFIXES "include/luajit-2.0"
38 "include/luajit${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
39 "include/luajit${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
40 "include/luajit-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
42 "include/lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
43 "include/lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
44 "include/lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
46 PATHS ${RSPAMD_DEFAULT_INCLUDE_PATHS}
48 FIND_LIBRARY(LUA_LIBRARY
52 "luajit${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
53 "luajit${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
54 "luajit-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
56 "${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
58 PATH_SUFFIXES lib64 lib
59 PATHS ${RSPAMD_DEFAULT_LIBRARY_PATHS}
63 IF(NOT LUA_LIBRARY OR NOT LUA_INCLUDE_DIR)
64 MESSAGE(STATUS "Fallback from luajit to plain lua")
65 SET(ENABLE_LUAJIT "OFF")
66 MESSAGE(STATUS "Check for lua ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
67 FIND_PATH(LUA_INCLUDE_DIR lua.h
69 "${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
71 PATH_SUFFIXES "include/lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
72 "include/lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
73 "include/lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
75 PATHS ${RSPAMD_DEFAULT_INCLUDE_PATHS}
77 FIND_LIBRARY(LUA_LIBRARY
79 "lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
80 "lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
81 "lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
83 "${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
85 PATH_SUFFIXES lib64 lib
86 PATHS ${RSPAMD_DEFAULT_LIBRARY_PATHS}
90 ELSE(ENABLE_LUAJIT MATCHES "ON")
91 MESSAGE(STATUS "Check for lua ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
92 FIND_PATH(LUA_INCLUDE_DIR lua.h
94 "${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
96 PATH_SUFFIXES "include/lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
97 "include/lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
98 "include/lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
100 PATHS ${RSPAMD_DEFAULT_INCLUDE_PATHS}
102 FIND_LIBRARY(LUA_LIBRARY
104 "lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
105 "lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
106 "lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
108 "${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
110 PATH_SUFFIXES lib64 lib
111 PATHS ${RSPAMD_DEFAULT_LIBRARY_PATHS}
114 ENDIF(ENABLE_LUAJIT MATCHES "ON")
116 IF(LUA_LIBRARY AND LUA_INCLUDE_DIR)
118 IF(NOT LUA_VERSION_MAJOR OR NOT LUA_VERSION_MINOR)
119 SET(LUA_VERSION_MAJOR ${LUA_VERSION_MAJOR})
120 SET(LUA_VERSION_MINOR ${LUA_VERSION_MINOR})
121 ENDIF(NOT LUA_VERSION_MAJOR OR NOT LUA_VERSION_MINOR)
122 IF(ENABLE_LUAJIT MATCHES "ON")
123 MESSAGE(STATUS "Found luajit ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
124 ELSE(ENABLE_LUAJIT MATCHES "ON")
125 MESSAGE(STATUS "Found lua ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
126 ENDIF(ENABLE_LUAJIT MATCHES "ON")
127 ENDIF(LUA_LIBRARY AND LUA_INCLUDE_DIR)
130 IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
131 LIST(APPEND CMAKE_REQUIRED_LIBRARIES rt)
132 ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
134 IF(ENABLE_URL_INCLUDE MATCHES "ON")
135 FIND_LIBRARY(LIBFETCH_LIBRARY NAMES fetch PATHS PATH_SUFFIXES lib64 lib
145 DOC "Path where the libfetch library can be found")
147 FIND_FILE(HAVE_FETCH_H NAMES fetch.h PATHS /usr/include
150 DOC "Path to libfetch header")
151 ELSE(LIBFETCH_LIBRARY)
152 # Try to find libcurl
153 ProcessPackage(CURL libcurl)
155 MESSAGE(WARNING "Neither libcurl nor libfetch were found, no support of URL includes in configuration")
156 ENDIF(NOT CURL_FOUND)
157 ENDIF(LIBFETCH_LIBRARY)
158 ENDIF(ENABLE_URL_INCLUDE MATCHES "ON")
160 SET(CMAKE_C_WARN_FLAGS "")
161 CHECK_C_COMPILER_FLAG(-Wall SUPPORT_WALL)
162 CHECK_C_COMPILER_FLAG(-W SUPPORT_W)
163 CHECK_C_COMPILER_FLAG(-Wno-unused-parameter SUPPORT_WPARAM)
164 CHECK_C_COMPILER_FLAG(-Wno-pointer-sign SUPPORT_WPOINTER_SIGN)
165 CHECK_C_COMPILER_FLAG(-Wstrict-prototypes SUPPORT_WSTRICT_PROTOTYPES)
166 IF(NOT "${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
167 CHECK_C_COMPILER_FLAG("-std=c99" SUPPORT_STD_FLAG)
168 ENDIF(NOT "${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
170 SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -W")
173 SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wall")
176 SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-unused-parameter")
177 ENDIF(SUPPORT_WPARAM)
178 IF(SUPPORT_WPOINTER_SIGN)
179 SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-pointer-sign")
180 ENDIF(SUPPORT_WPOINTER_SIGN)
181 IF(SUPPORT_WSTRICT_PROTOTYPES)
182 SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wstrict-prototypes")
183 ENDIF(SUPPORT_WSTRICT_PROTOTYPES)
185 SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -std=c99")
186 ENDIF(SUPPORT_STD_FLAG)
188 IF(ENABLE_URL_SIGN MATCHES "ON")
191 INCLUDE_DIRECTORIES("${OPENSSL_INCLUDE_DIR}")
193 ENDIF(ENABLE_URL_SIGN MATCHES "ON")
195 INCLUDE_DIRECTORIES("src")
196 INCLUDE_DIRECTORIES("include")
197 INCLUDE_DIRECTORIES("uthash")
198 INCLUDE_DIRECTORIES("klib")
200 SET(UCLSRC src/ucl_util.c
203 src/ucl_emitter_streamline.c
204 src/ucl_emitter_utils.c
211 SET (LIB_TYPE STATIC)
212 IF (BUILD_SHARED_LIBS)
213 SET (LIB_TYPE SHARED)
214 ENDIF (BUILD_SHARED_LIBS)
215 ADD_LIBRARY(ucl ${LIB_TYPE} ${UCLSRC})
216 SET_TARGET_PROPERTIES(ucl PROPERTIES VERSION ${LIBUCL_VERSION} SOVERSION ${LIBUCL_VERSION_MAJOR})
218 IF(ENABLE_LUA MATCHES "ON")
219 IF(ENABLE_LUAJIT MATCHES "ON")
220 FindLua(VERSION_MAJOR "5" VERSION_MINOR "1" ROOT "${LUA_ROOT}")
222 MESSAGE(FATAL_ERROR "Lua not found, lua support is required")
224 INCLUDE_DIRECTORIES("${LUA_INCLUDE_DIR}")
226 ELSE(ENABLE_LUAJIT MATCHES "ON")
227 FindLua(VERSION_MAJOR "5" VERSION_MINOR "2" ROOT "${LUA_ROOT}")
229 FindLua(VERSION_MAJOR "5" VERSION_MINOR "1" ROOT "${LUA_ROOT}")
232 MESSAGE(FATAL_ERROR "Lua not found, lua support is required")
234 INCLUDE_DIRECTORIES("${LUA_INCLUDE_DIR}")
236 ENDIF(ENABLE_LUAJIT MATCHES "ON")
237 SET(UCL_LUA_SRC lua/lua_ucl.c)
238 ADD_LIBRARY(lua-ucl ${LIB_TYPE} ${UCL_LUA_SRC})
239 IF(ENABLE_LUAJIT MATCHES "ON")
240 TARGET_LINK_LIBRARIES(lua-ucl "${LUAJIT_LIBRARY}")
241 ELSE(ENABLE_LUAJIT MATCHES "ON")
242 TARGET_LINK_LIBRARIES(lua-ucl "${LUA_LIBRARY}")
243 ENDIF(ENABLE_LUAJIT MATCHES "ON")
244 TARGET_LINK_LIBRARIES(lua-ucl ucl)
245 SET_TARGET_PROPERTIES(lua-ucl PROPERTIES VERSION ${LIBUCL_VERSION} SOVERSION ${LIBUCL_VERSION_MAJOR})
249 TARGET_LINK_LIBRARIES(ucl fetch)
252 TARGET_LINK_LIBRARIES(ucl ${CURL_LIBRARIES})
255 IF(ENABLE_URL_SIGN MATCHES "ON")
257 TARGET_LINK_LIBRARIES(ucl ${OPENSSL_LIBRARIES})
259 ENDIF(ENABLE_URL_SIGN MATCHES "ON")