]> git.proxmox.com Git - ceph.git/blob - ceph/src/civetweb/src/CMakeLists.txt
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / civetweb / src / CMakeLists.txt
1 # The C API library
2 add_library(c-library civetweb.c)
3 set_target_properties(c-library PROPERTIES
4 OUTPUT_NAME "civetweb"
5 VERSION ${CIVETWEB_VERSION}
6 SOVERSION ${CIVETWEB_VERSION}
7 )
8 if (BUILD_SHARED_LIBS)
9 target_compile_definitions(c-library PRIVATE CIVETWEB_DLL_EXPORTS)
10 endif()
11 target_include_directories(
12 c-library PUBLIC
13 ${PROJECT_SOURCE_DIR}/include)
14 install(
15 TARGETS c-library
16 ARCHIVE DESTINATION lib
17 LIBRARY DESTINATION lib
18 RUNTIME DESTINATION bin
19 COMPONENT c-library)
20 install(FILES
21 ${PROJECT_SOURCE_DIR}/include/civetweb.h
22 DESTINATION include
23 COMPONENT c-library)
24
25 # Need Windows sockets if available
26 find_package(WinSock)
27 if (WINSOCK_FOUND)
28 target_link_libraries(c-library WINSOCK::WINSOCK)
29 endif()
30
31 # We need threading
32 find_package(Threads)
33 target_link_libraries(c-library ${CMAKE_THREAD_LIBS_INIT})
34
35 # Need the realtime library if we're using timers
36 find_package(LibRt)
37 if (CIVETWEB_ENABLE_WEBSOCKETS AND CIVETWEB_ENABLE_LUA AND LIBRT_FOUND)
38 target_link_libraries(c-library LIBRT::LIBRT)
39 endif()
40
41 # We need to link OpenSSL if not dynamically loading
42 if (CIVETWEB_ENABLE_SSL)
43 if (CIVETWEB_ENABLE_SSL_DYNAMIC_LOADING)
44 find_package(LibDl)
45 if (LIBDL_FOUND)
46 target_link_libraries(c-library -ldl)
47 endif()
48 else()
49 find_package(OpenSSL)
50 include_directories(${OPENSSL_INCLUDE_DIR})
51 message(STATUS "OpenSSL include directory: ${OPENSSL_INCLUDE_DIR}")
52 target_link_libraries(c-library ${OPENSSL_LIBRARIES})
53 endif()
54 endif()
55
56 # If Lua support is needed we build some extra Lua libraries
57 if (CIVETWEB_ENABLE_LUA)
58 include(ExternalProject)
59
60 # Determine if we should print to the output
61 if (CIVETWEB_ENABLE_THIRD_PARTY_OUTPUT)
62 set(THIRD_PARTY_LOGGING 0)
63 else()
64 set(THIRD_PARTY_LOGGING 1)
65 endif()
66
67 # If Lua is static we must build it from source
68 if (NOT CIVETWEB_ENABLE_LUA_SHARED)
69 if (LINUX)
70 set(LUA_MAKE_TARGET linux)
71 elseif(DARWIN)
72 set(LUA_MAKE_TARGET macosx)
73 elseif(FREEBSD)
74 set(LUA_MAKE_TARGET freebsd)
75 elseif(WINDOWS)
76 set(LUA_MAKE_TARGET mingw)
77 elseif(UNIX)
78 set(LUA_MAKE_TARGET posix)
79 else()
80 set(LUA_MAKE_TARGET generic)
81 endif()
82 set(LUA_BUILD_COMMAND "${CMAKE_MAKE_PROGRAM};${LUA_MAKE_TARGET}")
83 if (BUILD_SHARED_LIBS)
84 set(LUA_BUILD_COMMAND "${LUA_BUILD_COMMAND};MYCFLAGS=-fPIC")
85 endif()
86 ExternalProject_Add(lua
87 URL "http://www.lua.org/ftp/lua-${CIVETWEB_LUA_VERSION}.tar.gz"
88 URL_MD5 ${CIVETWEB_LUA_MD5_HASH}
89 PREFIX "${CIVETWEB_THIRD_PARTY_DIR}"
90 CONFIGURE_COMMAND ""
91 BUILD_COMMAND ${LUA_BUILD_COMMAND}
92 BUILD_IN_SOURCE 1
93 INSTALL_COMMAND make install "INSTALL_TOP=<INSTALL_DIR>"
94 LOG_DOWNLOAD ${THIRD_PARTY_LOGGING}
95 LOG_UPDATE ${THIRD_PARTY_LOGGING}
96 LOG_CONFIGURE ${THIRD_PARTY_LOGGING}
97 LOG_BUILD ${THIRD_PARTY_LOGGING}
98 LOG_TEST ${THIRD_PARTY_LOGGING}
99 LOG_INSTALL ${THIRD_PARTY_LOGGING})
100 ExternalProject_Get_Property(lua INSTALL_DIR)
101 set(LUA_INSTALL_DIR ${INSTALL_DIR})
102 unset(INSTALL_DIR)
103 link_directories("${LUA_INSTALL_DIR}/lib")
104 include_directories("${LUA_INSTALL_DIR}/include")
105 set(LUA_LIBRARIES "${LUA_INSTALL_DIR}/lib/liblua.a")
106 add_dependencies(c-library lua)
107 else()
108 find_package(Lua)
109 endif()
110
111 # Lua Filesystem Support
112 string(REPLACE "." "_" LUA_FILESYSTEM_VERSION_UNDERSCORE ${CIVETWEB_LUA_FILESYSTEM_VERSION})
113 ExternalProject_Add(luafilesystem
114 URL "https://github.com/keplerproject/luafilesystem/archive/v_${LUA_FILESYSTEM_VERSION_UNDERSCORE}.tar.gz"
115 URL_MD5 ${CIVETWEB_LUA_FILESYSTEM_MD5_HASH}
116 PREFIX "${CIVETWEB_THIRD_PARTY_DIR}"
117 PATCH_COMMAND ${CMAKE_COMMAND} -E copy
118 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/luafilesystem/CMakeLists.txt" <SOURCE_DIR>/CMakeLists.txt
119 CMAKE_ARGS
120 "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"
121 "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
122 LOG_DOWNLOAD ${THIRD_PARTY_LOGGING}
123 LOG_UPDATE ${THIRD_PARTY_LOGGING}
124 LOG_CONFIGURE ${THIRD_PARTY_LOGGING}
125 LOG_BUILD ${THIRD_PARTY_LOGGING}
126 LOG_TEST ${THIRD_PARTY_LOGGING}
127 LOG_INSTALL ${THIRD_PARTY_LOGGING})
128 ExternalProject_Get_Property(luafilesystem INSTALL_DIR)
129 set(LUA_FILESYSTEM_INSTALL_DIR ${INSTALL_DIR})
130 unset(INSTALL_DIR)
131 link_directories("${LUA_FILESYSTEM_INSTALL_DIR}/lib")
132 include_directories("${LUA_FILESYSTEM_INSTALL_DIR}/include")
133 set(LUA_LIBRARIES "${LUA_LIBRARIES};${LUA_FILESYSTEM_INSTALL_DIR}/lib/libluafilesystem.a")
134 add_dependencies(c-library luafilesystem)
135
136 # Lua SQLite Support
137 if (${CIVETWEB_LUA_SQLITE_VERSION} VERSION_EQUAL "0.9.3")
138 set(LUA_SQLITE_FILENAME lsqlite3_fsl09w.zip)
139 elseif (${CIVETWEB_LUA_SQLITE_VERSION} VERSION_EQUAL "0.9.2")
140 set(LUA_SQLITE_FILENAME lsqlite3_fsl09v.zip)
141 elseif (${CIVETWEB_LUA_SQLITE_VERSION} VERSION_EQUAL "0.9.1")
142 set(LUA_SQLITE_FILENAME lsqlite3_fsl09t.zip)
143 else()
144 message(FATAL_ERROR "The Lua SQLite archive filename is unknown for version ${CIVETWEB_LUA_SQLITE_VERSION}")
145 endif()
146 ExternalProject_Add(luasqlite
147 URL "http://lua.sqlite.org/index.cgi/zip/${LUA_SQLITE_FILENAME}"
148 URL_MD5 ${CIVETWEB_LUA_SQLITE_MD5_HASH}
149 PREFIX "${CIVETWEB_THIRD_PARTY_DIR}"
150 PATCH_COMMAND ${CMAKE_COMMAND} -E copy
151 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/luasqlite/CMakeLists.txt" <SOURCE_DIR>/CMakeLists.txt
152 CMAKE_ARGS
153 "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"
154 "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
155 LOG_DOWNLOAD ${THIRD_PARTY_LOGGING}
156 LOG_UPDATE ${THIRD_PARTY_LOGGING}
157 LOG_CONFIGURE ${THIRD_PARTY_LOGGING}
158 LOG_BUILD ${THIRD_PARTY_LOGGING}
159 LOG_TEST ${THIRD_PARTY_LOGGING}
160 LOG_INSTALL ${THIRD_PARTY_LOGGING})
161 ExternalProject_Get_Property(luasqlite INSTALL_DIR)
162 set(LUA_SQLITE_INSTALL_DIR ${INSTALL_DIR})
163 unset(INSTALL_DIR)
164 link_directories("${LUA_SQLITE_INSTALL_DIR}/lib")
165 set(LUA_LIBRARIES "${LUA_LIBRARIES};${LUA_SQLITE_INSTALL_DIR}/lib/libluasqlite.a")
166 add_dependencies(c-library luasqlite)
167
168 # Lua XML Support
169 if (${CIVETWEB_LUA_XML_VERSION} VERSION_EQUAL "1.8.0")
170 set(LUA_XML_FILENAME LuaXML_130610.zip)
171 elseif (${CIVETWEB_LUA_XML_VERSION} VERSION_EQUAL "1.7.4")
172 set(LUA_XML_FILENAME LuaXML_101012.zip)
173 else()
174 message(FATAL_ERROR "The Lua XML archive filename is unknown for version ${CIVETWEB_LUA_XML_VERSION}")
175 endif()
176 ExternalProject_Add(luaxml
177 URL "http://viremo.eludi.net/LuaXML/${LUA_XML_FILENAME}"
178 URL_MD5 ${CIVETWEB_LUA_XML_MD5_HASH}
179 PREFIX "${CIVETWEB_THIRD_PARTY_DIR}"
180 PATCH_COMMAND ${CMAKE_COMMAND} -E copy
181 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/luaxml/CMakeLists.txt" <SOURCE_DIR>/CMakeLists.txt
182 CMAKE_ARGS
183 "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"
184 "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
185 LOG_DOWNLOAD ${THIRD_PARTY_LOGGING}
186 LOG_UPDATE ${THIRD_PARTY_LOGGING}
187 LOG_CONFIGURE ${THIRD_PARTY_LOGGING}
188 LOG_BUILD ${THIRD_PARTY_LOGGING}
189 LOG_TEST ${THIRD_PARTY_LOGGING}
190 LOG_INSTALL ${THIRD_PARTY_LOGGING})
191 ExternalProject_Get_Property(luaxml INSTALL_DIR)
192 set(LUA_XML_INSTALL_DIR ${INSTALL_DIR})
193 unset(INSTALL_DIR)
194 link_directories("${LUA_XML_INSTALL_DIR}/lib")
195 set(LUA_LIBRARIES "${LUA_LIBRARIES};${LUA_XML_INSTALL_DIR}/lib/libluaxml.a")
196 add_dependencies(c-library luaxml)
197
198 # SQLite Support
199 string (REGEX MATCHALL "[0-9]+" SQLITE_VERSION_MATCHES ${CIVETWEB_SQLITE_VERSION})
200 list(GET SQLITE_VERSION_MATCHES 0 SQLITE_VERSION_MAJOR)
201 list(GET SQLITE_VERSION_MATCHES 1 SQLITE_VERSION_MINOR)
202 list(GET SQLITE_VERSION_MATCHES 2 SQLITE_VERSION_PATCH)
203 set(SQLITE_FILE_VERSION ${SQLITE_VERSION_MAJOR}0${SQLITE_VERSION_MINOR}0${SQLITE_VERSION_PATCH}00)
204 ExternalProject_Add(sqlite
205 URL "http://www.sqlite.org/2015/sqlite-amalgamation-${SQLITE_FILE_VERSION}.zip"
206 URL_MD5 ${CIVETWEB_SQLITE_MD5_HASH}
207 PREFIX "${CIVETWEB_THIRD_PARTY_DIR}"
208 PATCH_COMMAND ${CMAKE_COMMAND} -E copy
209 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/sqlite/CMakeLists.txt" <SOURCE_DIR>/CMakeLists.txt
210 CMAKE_ARGS
211 "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"
212 "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
213 LOG_DOWNLOAD ${THIRD_PARTY_LOGGING}
214 LOG_UPDATE ${THIRD_PARTY_LOGGING}
215 LOG_CONFIGURE ${THIRD_PARTY_LOGGING}
216 LOG_BUILD ${THIRD_PARTY_LOGGING}
217 LOG_TEST ${THIRD_PARTY_LOGGING}
218 LOG_INSTALL ${THIRD_PARTY_LOGGING})
219 ExternalProject_Get_Property(sqlite INSTALL_DIR)
220 set(SQLITE_INSTALL_DIR ${INSTALL_DIR})
221 unset(INSTALL_DIR)
222 link_directories("${SQLITE_INSTALL_DIR}/lib")
223 include_directories("${SQLITE_INSTALL_DIR}/include")
224 set(LUA_LIBRARIES "${LUA_LIBRARIES};${SQLITE_INSTALL_DIR}/lib/libsqlite.a")
225 add_dependencies(c-library sqlite)
226
227 # Link all the Lua libraries
228 target_link_libraries(c-library ${LUA_LIBRARIES})
229 endif()
230
231 # The web server executable
232 add_executable(c-executable main.c)
233 set_target_properties(c-executable PROPERTIES
234 OUTPUT_NAME "civetweb"
235 )
236 if (CIVETWEB_INSTALL_EXECUTABLE)
237 install(
238 TARGETS c-executable
239 ARCHIVE DESTINATION lib
240 LIBRARY DESTINATION lib
241 RUNTIME DESTINATION bin
242 COMPONENT server)
243 endif()
244 if (BUILD_SHARED_LIBS)
245 target_compile_definitions(c-executable PRIVATE CIVETWEB_DLL_IMPORTS)
246 endif()
247 target_include_directories(
248 c-executable PUBLIC
249 ${PROJECT_SOURCE_DIR}/include)
250 target_link_libraries(c-executable c-library)
251 if (LIBRT_FOUND)
252 target_link_libraries(c-executable LIBRT::LIBRT)
253 endif()
254
255 if (CIVETWEB_ENABLE_LUA)
256 add_library(lua-library third_party/lfs.c third_party/lsqlite3.c third_party/LuaXML_lib.c third_party/sqlite3.c)
257 set_target_properties(lua-library PROPERTIES
258 OUTPUT_NAME "lua-library"
259 VERSION ${CIVETWEB_VERSION}
260 SOVERSION ${CIVETWEB_VERSION}
261 )
262 target_include_directories(
263 lua-library PUBLIC
264 ${PROJECT_SOURCE_DIR}/src/third_party/lua-5.2.4)
265 install(
266 TARGETS lua-library
267 ARCHIVE DESTINATION lib
268 LIBRARY DESTINATION lib
269 RUNTIME DESTINATION bin
270 COMPONENT lua-library)
271 endif()
272
273 # The C++ API library
274 if (CIVETWEB_ENABLE_CXX)
275 add_library(civetweb-cpp CivetServer.cpp)
276 set_target_properties(civetweb-cpp PROPERTIES
277 OUTPUT_NAME "civetweb-cpp"
278 VERSION ${CIVETWEB_VERSION}
279 SOVERSION ${CIVETWEB_VERSION}
280 )
281 if (BUILD_SHARED_LIBS)
282 target_compile_definitions(civetweb-cpp PRIVATE CIVETWEB_DLL_EXPORTS)
283 endif()
284 target_include_directories(
285 civetweb-cpp PUBLIC
286 ${PROJECT_SOURCE_DIR}/include)
287 install(
288 TARGETS civetweb-cpp
289 ARCHIVE DESTINATION lib
290 LIBRARY DESTINATION lib
291 RUNTIME DESTINATION bin
292 COMPONENT civetweb-cpp)
293 install(FILES
294 ${PROJECT_SOURCE_DIR}/include/CivetServer.h
295 DESTINATION include
296 COMPONENT civetweb-cpp)
297 endif()