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