xref: /aosp_15_r20/external/libwebsockets/CMakeLists.txt (revision 1c60b9aca93fdbc9b5f19b2d2194c91294b22281)
1*1c60b9acSAndroid Build Coastguard Worker#
2*1c60b9acSAndroid Build Coastguard Worker# libwebsockets - small server side websockets and web server implementation
3*1c60b9acSAndroid Build Coastguard Worker#
4*1c60b9acSAndroid Build Coastguard Worker# Copyright (C) 2010 - 2020 Andy Green <[email protected]>
5*1c60b9acSAndroid Build Coastguard Worker#
6*1c60b9acSAndroid Build Coastguard Worker# Permission is hereby granted, free of charge, to any person obtaining a copy
7*1c60b9acSAndroid Build Coastguard Worker# of this software and associated documentation files (the "Software"), to
8*1c60b9acSAndroid Build Coastguard Worker# deal in the Software without restriction, including without limitation the
9*1c60b9acSAndroid Build Coastguard Worker# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10*1c60b9acSAndroid Build Coastguard Worker# sell copies of the Software, and to permit persons to whom the Software is
11*1c60b9acSAndroid Build Coastguard Worker# furnished to do so, subject to the following conditions:
12*1c60b9acSAndroid Build Coastguard Worker#
13*1c60b9acSAndroid Build Coastguard Worker# The above copyright notice and this permission notice shall be included in
14*1c60b9acSAndroid Build Coastguard Worker# all copies or substantial portions of the Software.
15*1c60b9acSAndroid Build Coastguard Worker#
16*1c60b9acSAndroid Build Coastguard Worker# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17*1c60b9acSAndroid Build Coastguard Worker# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*1c60b9acSAndroid Build Coastguard Worker# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19*1c60b9acSAndroid Build Coastguard Worker# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20*1c60b9acSAndroid Build Coastguard Worker# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21*1c60b9acSAndroid Build Coastguard Worker# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22*1c60b9acSAndroid Build Coastguard Worker# IN THE SOFTWARE.
23*1c60b9acSAndroid Build Coastguard Worker#
24*1c60b9acSAndroid Build Coastguard Worker
25*1c60b9acSAndroid Build Coastguard Workercmake_minimum_required(VERSION 2.8.12)
26*1c60b9acSAndroid Build Coastguard Workerinclude(CheckFunctionExists)
27*1c60b9acSAndroid Build Coastguard Workerinclude(CheckSymbolExists)
28*1c60b9acSAndroid Build Coastguard Workerinclude(CheckIncludeFile)
29*1c60b9acSAndroid Build Coastguard Workerinclude(CheckIncludeFiles)
30*1c60b9acSAndroid Build Coastguard Workerinclude(CheckLibraryExists)
31*1c60b9acSAndroid Build Coastguard Workerinclude(CheckTypeSize)
32*1c60b9acSAndroid Build Coastguard Workerinclude(CheckCSourceCompiles)
33*1c60b9acSAndroid Build Coastguard Worker
34*1c60b9acSAndroid Build Coastguard Workerif (POLICY CMP0048)
35*1c60b9acSAndroid Build Coastguard Worker	cmake_policy(SET CMP0048 NEW)
36*1c60b9acSAndroid Build Coastguard Workerendif()
37*1c60b9acSAndroid Build Coastguard Worker
38*1c60b9acSAndroid Build Coastguard Worker#if (POLICY CMP0024)
39*1c60b9acSAndroid Build Coastguard Worker#	cmake_policy(SET CMP0024 NEW)
40*1c60b9acSAndroid Build Coastguard Worker#endif()
41*1c60b9acSAndroid Build Coastguard Worker
42*1c60b9acSAndroid Build Coastguard Workerif (POLICY CMP0075)
43*1c60b9acSAndroid Build Coastguard Worker	cmake_policy(SET CMP0075 NEW)
44*1c60b9acSAndroid Build Coastguard Workerendif()
45*1c60b9acSAndroid Build Coastguard Worker
46*1c60b9acSAndroid Build Coastguard Worker# General Advice
47*1c60b9acSAndroid Build Coastguard Worker#
48*1c60b9acSAndroid Build Coastguard Worker# For selecting between DEBUG / RELEASE, use -DCMAKE_BUILD_TYPE=DEBUG or =RELEASE
49*1c60b9acSAndroid Build Coastguard Worker#   debug builds include source level debug info and extra logging
50*1c60b9acSAndroid Build Coastguard Worker
51*1c60b9acSAndroid Build Coastguard Workerset(LWS_WITH_BUNDLED_ZLIB_DEFAULT OFF)
52*1c60b9acSAndroid Build Coastguard Workerif(WIN32)
53*1c60b9acSAndroid Build Coastguard Worker	set(LWS_WITH_BUNDLED_ZLIB_DEFAULT ON)
54*1c60b9acSAndroid Build Coastguard Workerendif()
55*1c60b9acSAndroid Build Coastguard Worker
56*1c60b9acSAndroid Build Coastguard Workerset(LWS_ROLE_RAW 1)
57*1c60b9acSAndroid Build Coastguard Workerset(LWS_WITH_POLL 1)
58*1c60b9acSAndroid Build Coastguard Worker
59*1c60b9acSAndroid Build Coastguard Workerif (ESP_PLATFORM)
60*1c60b9acSAndroid Build Coastguard Worker	set(LWS_ESP_PLATFORM 1)
61*1c60b9acSAndroid Build Coastguard Worker	#set(CMAKE_TOOLCHAIN_FILE contrib/cross-esp32.cmake)
62*1c60b9acSAndroid Build Coastguard Worker	set(LWIP_PROVIDE_ERRNO 1)
63*1c60b9acSAndroid Build Coastguard Workerendif()
64*1c60b9acSAndroid Build Coastguard Worker
65*1c60b9acSAndroid Build Coastguard Worker# it's at this point any toolchain file is brought in
66*1c60b9acSAndroid Build Coastguard Workerproject(libwebsockets C CXX)
67*1c60b9acSAndroid Build Coastguard Workerinclude(CTest)
68*1c60b9acSAndroid Build Coastguard Worker
69*1c60b9acSAndroid Build Coastguard Workerif (ESP_PLATFORM)
70*1c60b9acSAndroid Build Coastguard Worker       include_directories(
71*1c60b9acSAndroid Build Coastguard Worker		$ENV{IDF_PATH}/components/esp_hw_support/include/soc/
72*1c60b9acSAndroid Build Coastguard Worker		$ENV{IDF_PATH}/components/freertos/include/
73*1c60b9acSAndroid Build Coastguard Worker		$ENV{IDF_PATH}/components/xtensa/${CONFIG_IDF_TARGET}/include/
74*1c60b9acSAndroid Build Coastguard Worker		$ENV{IDF_PATH}/components/freertos/include/esp_additions
75*1c60b9acSAndroid Build Coastguard Worker		$ENV{IDF_PATH}/components/hal/include
76*1c60b9acSAndroid Build Coastguard Worker		$ENV{IDF_PATH}/components/soc/${CONFIG_IDF_TARGET}/include/
77*1c60b9acSAndroid Build Coastguard Worker		$ENV{IDF_PATH}/components/soc/include/
78*1c60b9acSAndroid Build Coastguard Worker		$ENV{IDF_PATH}/components/esp_hw_support/include
79*1c60b9acSAndroid Build Coastguard Worker		$ENV{IDF_PATH}/components/hal/${CONFIG_IDF_TARGET}/include/
80*1c60b9acSAndroid Build Coastguard Worker	)
81*1c60b9acSAndroid Build Coastguard Worker
82*1c60b9acSAndroid Build Coastguard Worker	if (CONFIG_IDF_TARGET_ARCH_RISCV)
83*1c60b9acSAndroid Build Coastguard Worker                include_directories(
84*1c60b9acSAndroid Build Coastguard Worker                       $ENV{IDF_PATH}/components/freertos/port/riscv/include
85*1c60b9acSAndroid Build Coastguard Worker                       $ENV{IDF_PATH}/components/riscv/include)
86*1c60b9acSAndroid Build Coastguard Worker        else()
87*1c60b9acSAndroid Build Coastguard Worker                include_directories(
88*1c60b9acSAndroid Build Coastguard Worker                       $ENV{IDF_PATH}/components/freertos/port/xtensa/include
89*1c60b9acSAndroid Build Coastguard Worker                       $ENV{IDF_PATH}/components/xtensa/include)
90*1c60b9acSAndroid Build Coastguard Worker        endif()
91*1c60b9acSAndroid Build Coastguard Worker
92*1c60b9acSAndroid Build Coastguard Workerendif()
93*1c60b9acSAndroid Build Coastguard Worker
94*1c60b9acSAndroid Build Coastguard Worker
95*1c60b9acSAndroid Build Coastguard Worker#
96*1c60b9acSAndroid Build Coastguard Worker# Select features recommended for PC distro packaging
97*1c60b9acSAndroid Build Coastguard Worker#
98*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_DISTRO_RECOMMENDED "Enable features recommended for distro packaging" OFF)
99*1c60b9acSAndroid Build Coastguard Workeroption(LWS_FOR_GITOHASHI "Enable features recommended for use with gitohashi" OFF)
100*1c60b9acSAndroid Build Coastguard Worker
101*1c60b9acSAndroid Build Coastguard Worker#
102*1c60b9acSAndroid Build Coastguard Worker# Compiler features
103*1c60b9acSAndroid Build Coastguard Worker#
104*1c60b9acSAndroid Build Coastguard Workeroption(DISABLE_WERROR "Avoid treating compiler warnings as fatal errors" OFF)
105*1c60b9acSAndroid Build Coastguard Worker
106*1c60b9acSAndroid Build Coastguard Worker#
107*1c60b9acSAndroid Build Coastguard Worker# Major individual features
108*1c60b9acSAndroid Build Coastguard Worker#
109*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_NETWORK "Compile with network-related code" ON)
110*1c60b9acSAndroid Build Coastguard Workeroption(LWS_ROLE_H1 "Compile with support for http/1 (needed for ws)" ON)
111*1c60b9acSAndroid Build Coastguard Workeroption(LWS_ROLE_WS "Compile with support for websockets" ON)
112*1c60b9acSAndroid Build Coastguard Workeroption(LWS_ROLE_MQTT "Build with support for MQTT client" OFF)
113*1c60b9acSAndroid Build Coastguard Workeroption(LWS_ROLE_DBUS "Compile with support for DBUS" OFF)
114*1c60b9acSAndroid Build Coastguard Workeroption(LWS_ROLE_RAW_PROXY "Raw packet proxy" OFF)
115*1c60b9acSAndroid Build Coastguard Workeroption(LWS_ROLE_RAW_FILE "Compile with support for raw files" ON)
116*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_HTTP2 "Compile with server support for HTTP/2" ON)
117*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LWSWS "Libwebsockets Webserver" OFF)
118*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_CGI "Include CGI (spawn process with network-connected stdin/out/err) APIs" OFF)
119*1c60b9acSAndroid Build Coastguard Workeroption(LWS_IPV6 "Compile with support for ipv6" OFF)
120*1c60b9acSAndroid Build Coastguard Workeroption(LWS_UNIX_SOCK "Compile with support for UNIX domain socket if OS supports it" ON)
121*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_PLUGINS "Support plugins for protocols and extensions (implies LWS_WITH_PLUGINS_API)" OFF)
122*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_PLUGINS_BUILTIN "Build the plugin protocols directly into lws library" OFF)
123*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_HTTP_PROXY "Support for active HTTP proxying" ON)
124*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ZIP_FOPS "Support serving pre-zipped files" OFF)
125*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SOCKS5 "Allow use of SOCKS5 proxy on client connections" OFF)
126*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_PEER_LIMITS "Track peers and restrict resources a single peer can allocate" OFF)
127*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ACCESS_LOG "Support generating Apache-compatible access logs" OFF)
128*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_RANGES "Support http ranges (RFC7233)" OFF)
129*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_THREADPOOL "Managed worker thread pool support (relies on pthreads)" OFF)
130*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_HTTP_STREAM_COMPRESSION "Support HTTP stream compression" OFF)
131*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_HTTP_BROTLI "Also offer brotli http stream compression (requires LWS_WITH_HTTP_STREAM_COMPRESSION)" OFF)
132*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ACME "Enable support for ACME automatic cert acquisition + maintenance (letsencrypt etc)" OFF)
133*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_HUBBUB "Enable libhubbub rewriting support" OFF)
134*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ALSA "Enable alsa audio example" OFF)
135*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_GTK "Enable gtk example" OFF)
136*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_FTS "Full Text Search support" OFF)
137*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SYS_ASYNC_DNS "Nonblocking internal IPv4 + IPv6 DNS resolver" OFF)
138*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SYS_NTPCLIENT "Build in tiny ntpclient good for tls date validation and run via lws_system" OFF)
139*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SYS_DHCP_CLIENT "Build in tiny DHCP client" OFF)
140*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_HTTP_BASIC_AUTH "Support Basic Auth" ON)
141*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_HTTP_UNCOMMON_HEADERS "Include less common http header support" ON)
142*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SYS_STATE "lws_system state support" ON)
143*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SYS_SMD "Lws System Message Distribution" ON)
144*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SYS_FAULT_INJECTION "Enable fault injection support" OFF)
145*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SYS_METRICS "Lws Metrics API" OFF)
146*1c60b9acSAndroid Build Coastguard Worker
147*1c60b9acSAndroid Build Coastguard Worker#
148*1c60b9acSAndroid Build Coastguard Worker# Secure Streams
149*1c60b9acSAndroid Build Coastguard Worker#
150*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SECURE_STREAMS "Secure Streams protocol-agnostic API" OFF)
151*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SECURE_STREAMS_CPP "Secure Streams C++ classes" OFF)
152*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SECURE_STREAMS_PROXY_API "Secure Streams support to work across processes" OFF)
153*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SECURE_STREAMS_SYS_AUTH_API_AMAZON_COM "Auth support for api.amazon.com" OFF)
154*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SECURE_STREAMS_STATIC_POLICY_ONLY "Secure Streams Policy is hardcoded only" OFF)
155*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SECURE_STREAMS_AUTH_SIGV4 "Secure Streams Auth support for AWS Sigv4" OFF)
156*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SECURE_STREAMS_BUFFER_DUMP "Secure Streams protocol buffer dump" OFF)
157*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SS_DIRECT_PROTOCOL_STR "Secure Streams directly set/get metadata w/o policy" OFF)
158*1c60b9acSAndroid Build Coastguard Worker
159*1c60b9acSAndroid Build Coastguard Worker#
160*1c60b9acSAndroid Build Coastguard Worker# CTest options
161*1c60b9acSAndroid Build Coastguard Worker#
162*1c60b9acSAndroid Build Coastguard Worker#
163*1c60b9acSAndroid Build Coastguard Worker# If you build with LWS_WITH_MINIMAL_EXAMPLES, you can use CTest / make test to run
164*1c60b9acSAndroid Build Coastguard Worker# examples that can give a pass/fail response.  By default it runs tests both against
165*1c60b9acSAndroid Build Coastguard Worker# a local server peer and warmcat.com, if your CI wants to do the tests but does not
166*1c60b9acSAndroid Build Coastguard Worker# have internet routing, then you can still run a subset of tests with CTest / make
167*1c60b9acSAndroid Build Coastguard Worker# test that only does local tests by disabling this option.
168*1c60b9acSAndroid Build Coastguard Worker#
169*1c60b9acSAndroid Build Coastguard Workeroption(LWS_CTEST_INTERNET_AVAILABLE "CTest will performs tests that need the Internet" ON)
170*1c60b9acSAndroid Build Coastguard Worker
171*1c60b9acSAndroid Build Coastguard Worker#
172*1c60b9acSAndroid Build Coastguard Worker# TLS library options... all except mbedTLS are basically OpenSSL variants.
173*1c60b9acSAndroid Build Coastguard Worker#
174*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SSL "Include SSL support (defaults to OpenSSL or similar, mbedTLS if LWS_WITH_MBEDTLS is set)" ON)
175*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_MBEDTLS "Use mbedTLS (>=2.0) replacement for OpenSSL. When setting this, you also may need to specify LWS_MBEDTLS_LIBRARIES and LWS_MBEDTLS_INCLUDE_DIRS" OFF)
176*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_BORINGSSL "Use BoringSSL replacement for OpenSSL" OFF)
177*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_CYASSL "Use CyaSSL replacement for OpenSSL. When setting this, you also need to specify LWS_CYASSL_LIBRARIES and LWS_CYASSL_INCLUDE_DIRS" OFF)
178*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_WOLFSSL "Use wolfSSL replacement for OpenSSL. When setting this, you also need to specify LWS_WOLFSSL_LIBRARIES and LWS_WOLFSSL_INCLUDE_DIRS" OFF)
179*1c60b9acSAndroid Build Coastguard Workeroption(LWS_SSL_CLIENT_USE_OS_CA_CERTS "SSL support should make use of the OS-installed CA root certs" ON)
180*1c60b9acSAndroid Build Coastguard Workeroption(LWS_TLS_LOG_PLAINTEXT_RX "For debugging log the received plaintext as soon as decrypted" OFF)
181*1c60b9acSAndroid Build Coastguard Workeroption(LWS_TLS_LOG_PLAINTEXT_TX "For debugging log the transmitted plaintext just before encryption" OFF)
182*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_TLS_SESSIONS "Enable persistent, resumable TLS sessions" ON)
183*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_TLS_JIT_TRUST "Enable dynamically computing which trusted TLS CA is needed to be instantiated" OFF)
184*1c60b9acSAndroid Build Coastguard Worker
185*1c60b9acSAndroid Build Coastguard Worker#
186*1c60b9acSAndroid Build Coastguard Worker# Event library options (may select multiple, or none for default poll()
187*1c60b9acSAndroid Build Coastguard Worker#
188*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LIBEV "Compile with support for libev" OFF)
189*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LIBUV "Compile with support for libuv" OFF)
190*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LIBEVENT "Compile with support for libevent" OFF)
191*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_GLIB "Compile with support for glib event loop" OFF)
192*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SDEVENT "Compile with support for sd-event loop" OFF)
193*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ULOOP "Compile with support for uloop" OFF)
194*1c60b9acSAndroid Build Coastguard Worker
195*1c60b9acSAndroid Build Coastguard Workerif (UNIX)
196*1c60b9acSAndroid Build Coastguard Worker# since v4.1, on unix platforms default is build any event libs as runtime plugins
197*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_EVLIB_PLUGINS "Compile event lib support into runtime-selected plugins" ON)
198*1c60b9acSAndroid Build Coastguard Workerelse()
199*1c60b9acSAndroid Build Coastguard Worker# otherwise default to linking the event lib(s) to libwebsockets.so
200*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_EVLIB_PLUGINS "Compile event lib support into runtime-selected plugins" OFF)
201*1c60b9acSAndroid Build Coastguard Workerendif()
202*1c60b9acSAndroid Build Coastguard Worker#
203*1c60b9acSAndroid Build Coastguard Worker# LWS Drivers
204*1c60b9acSAndroid Build Coastguard Worker#
205*1c60b9acSAndroid Build Coastguard Worker
206*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_DRIVERS "With generic drivers for gpio, i2c, display etc" OFF)
207*1c60b9acSAndroid Build Coastguard Worker
208*1c60b9acSAndroid Build Coastguard Worker#
209*1c60b9acSAndroid Build Coastguard Worker# Static / Dynamic build options
210*1c60b9acSAndroid Build Coastguard Worker#
211*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_STATIC "Build the static version of the library" ON)
212*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SHARED "Build the shared version of the library" ON)
213*1c60b9acSAndroid Build Coastguard Workeroption(LWS_LINK_TESTAPPS_DYNAMIC "Link the test apps to the shared version of the library. Default is to link statically" OFF)
214*1c60b9acSAndroid Build Coastguard Workeroption(LWS_STATIC_PIC "Build the static version of the library with position-independent code" OFF)
215*1c60b9acSAndroid Build Coastguard Workeroption(LWS_SUPPRESS_DEPRECATED_API_WARNINGS "Turn off complaints about, eg, openssl 3 deprecated api usage" ON)
216*1c60b9acSAndroid Build Coastguard Worker
217*1c60b9acSAndroid Build Coastguard Worker#
218*1c60b9acSAndroid Build Coastguard Worker# Specific platforms
219*1c60b9acSAndroid Build Coastguard Worker#
220*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ESP32 "Build for ESP32" OFF)
221*1c60b9acSAndroid Build Coastguard Workeroption(LWS_PLAT_OPTEE "Build for OPTEE" OFF)
222*1c60b9acSAndroid Build Coastguard Workeroption(LWS_PLAT_FREERTOS "Build for FreeRTOS" OFF)
223*1c60b9acSAndroid Build Coastguard Workeroption(LWS_PLAT_ANDROID "Android flavour of unix platform" OFF)
224*1c60b9acSAndroid Build Coastguard Worker
225*1c60b9acSAndroid Build Coastguard Worker#
226*1c60b9acSAndroid Build Coastguard Worker# Client / Server / Test Apps build control
227*1c60b9acSAndroid Build Coastguard Worker#
228*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_CLIENT "Don't build the client part of the library" OFF)
229*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_SERVER "Don't build the server part of the library" OFF)
230*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_TESTAPPS "Don't build the libwebsocket-test-apps" OFF)
231*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_TEST_SERVER "Don't build the test server" OFF)
232*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_TEST_SERVER_EXTPOLL "Don't build the test server version that uses external poll" OFF)
233*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_TEST_PING "Don't build the ping test application" OFF)
234*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_TEST_CLIENT "Don't build the client test application" OFF)
235*1c60b9acSAndroid Build Coastguard Worker#
236*1c60b9acSAndroid Build Coastguard Worker# Extensions (permessage-deflate)
237*1c60b9acSAndroid Build Coastguard Worker#
238*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_EXTENSIONS "Don't compile with extensions" ON)
239*1c60b9acSAndroid Build Coastguard Worker#
240*1c60b9acSAndroid Build Coastguard Worker# Helpers + misc
241*1c60b9acSAndroid Build Coastguard Worker#
242*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_BUILTIN_GETIFADDRS "Don't use the BSD getifaddrs implementation from libwebsockets if it is missing (this will result in a compilation error) ... The default is to assume that your libc provides it. On some systems such as uclibc it doesn't exist." OFF)
243*1c60b9acSAndroid Build Coastguard Workeroption(LWS_FALLBACK_GETHOSTBYNAME "Also try to do dns resolution using gethostbyname if getaddrinfo fails" OFF)
244*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_BUILTIN_SHA1 "Don't build the lws sha-1 (eg, because openssl will provide it" OFF)
245*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_DAEMONIZE "Don't build the daemonization api" ON)
246*1c60b9acSAndroid Build Coastguard Workeroption(LWS_SSL_SERVER_WITH_ECDH_CERT "Include SSL server use ECDH certificate" OFF)
247*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LEJP "With the Lightweight JSON Parser" ON)
248*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_CBOR "With the Lightweight LECP CBOR Parser" OFF)
249*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_CBOR_FLOAT "Build floating point types if building CBOR LECP" ON)
250*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SQLITE3 "Require SQLITE3 support" OFF)
251*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_STRUCT_JSON "Generic struct serialization to and from JSON" OFF)
252*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_STRUCT_SQLITE3 "Generic struct serialization to and from SQLITE3" OFF)
253*1c60b9acSAndroid Build Coastguard Worker# broken atm
254*1c60b9acSAndroid Build Coastguard Worker#option(LWS_WITH_SMTP "Provide SMTP support" OFF)
255*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_ESP32)
256*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_DIR "Directory scanning api support" OFF)
257*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LEJP_CONF "With LEJP configuration parser as used by lwsws" OFF)
258*1c60b9acSAndroid Build Coastguard Workerelse()
259*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_DIR "Directory scanning api support" ON)
260*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LEJP_CONF "With LEJP configuration parser as used by lwsws" ON)
261*1c60b9acSAndroid Build Coastguard Workerendif()
262*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_NO_LOGS "Disable all logging other than _err and _user from being compiled in" OFF)
263*1c60b9acSAndroid Build Coastguard Workerset(LWS_LOGGING_BITFIELD_SET 0 CACHE STRING "Bitfield describing which log levels to force included into the build")
264*1c60b9acSAndroid Build Coastguard Workerset(LWS_LOGGING_BITFIELD_CLEAR 0 CACHE STRING "Bitfield describing which log levels to force removed from the build")
265*1c60b9acSAndroid Build Coastguard Workeroption(LWS_LOGS_TIMESTAMP "Timestamp at start of logs" ON)
266*1c60b9acSAndroid Build Coastguard Workeroption(LWS_LOG_TAG_LIFECYCLE "Log tagged object lifecycle as NOTICE" ON)
267*1c60b9acSAndroid Build Coastguard Workeroption(LWS_AVOID_SIGPIPE_IGN "Android 7+ reportedly needs this" OFF)
268*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_JOSE "JOSE JSON Web Signature / Encryption / Keys (RFC7515/6/) API" OFF)
269*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_COSE "COSE CBOR Signature / Encryption / Keys (RFC8152) API" OFF)
270*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_GENCRYPTO "Enable support for Generic Crypto apis independent of TLS backend" OFF)
271*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SELFTESTS "Selftests run at context creation" OFF)
272*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_GCOV "Build with gcc gcov coverage instrumentation" OFF)
273*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_EXPORT_LWSTARGETS "Export libwebsockets CMake targets.  Disable if they conflict with an outer cmake project." ON)
274*1c60b9acSAndroid Build Coastguard Workeroption(LWS_REPRODUCIBLE "Build libwebsockets reproducible. It removes the build user and hostname from the build" ON)
275*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_MINIMAL_EXAMPLES "Also build the normally standalone minimal examples, for QA" OFF)
276*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LWSAC "lwsac Chunk Allocation api" ON)
277*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_CUSTOM_HEADERS "Store and allow querying custom HTTP headers (H1 only)" ON)
278*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_DISKCACHE "Hashed cache directory with lazy LRU deletion to size limit (unrelated to lws_cache_ttl)" OFF)
279*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ASAN "Build with gcc runtime sanitizer options enabled (needs libasan)" OFF)
280*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LEJP_CONF "With LEJP configuration parser as used by lwsws" OFF)
281*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_ZLIB "Include zlib support (required for extensions)" OFF)
282*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_BUNDLED_ZLIB "Use bundled zlib version (Windows only)" ${LWS_WITH_BUNDLED_ZLIB_DEFAULT})
283*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_MINIZ "Use miniz instead of zlib" OFF)
284*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SEQUENCER "lws_seq_t support" OFF)
285*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_EXTERNAL_POLL "Support external POLL integration using callback messages (not recommended)" OFF)
286*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_LWS_DSH "Support lws_dsh_t Disordered Shared Heap" OFF)
287*1c60b9acSAndroid Build Coastguard Workeroption(LWS_CLIENT_HTTP_PROXYING "Support external http proxies for client connections" ON)
288*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_FILE_OPS "Support file operations vfs" ON)
289*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_UDP "Platform supports UDP" ON)
290*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SPAWN "Spawn subprocesses with piped stdin/out/stderr" OFF)
291*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_FSMOUNT "Overlayfs and fallback mounting apis" OFF)
292*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_FANALYZER "Enable gcc -fanalyzer if compiler supports" OFF)
293*1c60b9acSAndroid Build Coastguard Workeroption(LWS_HTTP_HEADERS_ALL "Override header reduction optimization and include all like older lws versions" OFF)
294*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_SUL_DEBUGGING "Enable zombie lws_sul checking on object deletion" OFF)
295*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_PLUGINS_API "Build generic lws_plugins apis (see LWS_WITH_PLUGINS to also build protocol plugins)" OFF)
296*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITH_CONMON "Collect introspectable connection latency stats on individual client connections" ON)
297*1c60b9acSAndroid Build Coastguard Workeroption(LWS_WITHOUT_EVENTFD "Force using pipe instead of eventfd" OFF)
298*1c60b9acSAndroid Build Coastguard Workerif (UNIX OR WIN32)
299*1c60b9acSAndroid Build Coastguard Worker	option(LWS_WITH_CACHE_NSCOOKIEJAR "Build file-backed lws-cache-ttl that uses netscape cookie jar format (linux-only)" ON)
300*1c60b9acSAndroid Build Coastguard Workerelse()
301*1c60b9acSAndroid Build Coastguard Worker	option(LWS_WITH_CACHE_NSCOOKIEJAR "Build file-backed lws-cache-ttl that uses netscape cookie jar format (linux-only)" OFF)
302*1c60b9acSAndroid Build Coastguard Workerendif()
303*1c60b9acSAndroid Build Coastguard Worker
304*1c60b9acSAndroid Build Coastguard Workerif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
305*1c60b9acSAndroid Build Coastguard Worker	option(LWS_WITH_NETLINK "Monitor Netlink for Routing Table changes" ON)
306*1c60b9acSAndroid Build Coastguard Workerelse()
307*1c60b9acSAndroid Build Coastguard Worker	set(LWS_WITH_NETLINK 0)
308*1c60b9acSAndroid Build Coastguard Workerendif()
309*1c60b9acSAndroid Build Coastguard Worker
310*1c60b9acSAndroid Build Coastguard Workerif (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
311*1c60b9acSAndroid Build Coastguard Worker       # its openssl has md5 deprecated
312*1c60b9acSAndroid Build Coastguard Worker       set(LWS_SUPPRESS_DEPRECATED_API_WARNINGS 1)
313*1c60b9acSAndroid Build Coastguard Workerendif()
314*1c60b9acSAndroid Build Coastguard Worker
315*1c60b9acSAndroid Build Coastguard Worker
316*1c60b9acSAndroid Build Coastguard Worker#
317*1c60b9acSAndroid Build Coastguard Worker# to use miniz, enable both LWS_WITH_ZLIB and LWS_WITH_MINIZ
318*1c60b9acSAndroid Build Coastguard Worker#
319*1c60b9acSAndroid Build Coastguard Worker# End of user settings
320*1c60b9acSAndroid Build Coastguard Worker#
321*1c60b9acSAndroid Build Coastguard Worker
322*1c60b9acSAndroid Build Coastguard Worker# sets of sub-options implied by other options
323*1c60b9acSAndroid Build Coastguard Worker#
324*1c60b9acSAndroid Build Coastguard Workerset(LIB_LIST "")
325*1c60b9acSAndroid Build Coastguard Workerset(LIB_LIST_AT_END)
326*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBRARIES)
327*1c60b9acSAndroid Build Coastguard Workerset(LWS_OPENSSL_SUPPORT 0)
328*1c60b9acSAndroid Build Coastguard Workerinclude(CMakeLists-implied-options.txt)
329*1c60b9acSAndroid Build Coastguard Worker
330*1c60b9acSAndroid Build Coastguard Worker#
331*1c60b9acSAndroid Build Coastguard Worker# Structural helpers for cmake in subdirs
332*1c60b9acSAndroid Build Coastguard Worker#
333*1c60b9acSAndroid Build Coastguard Worker
334*1c60b9acSAndroid Build Coastguard Workermacro(add_subdir_include_directories arg1)
335*1c60b9acSAndroid Build Coastguard Worker	add_subdirectory(${arg1})
336*1c60b9acSAndroid Build Coastguard Worker	include_directories(${_CMAKE_INC_LIST})
337*1c60b9acSAndroid Build Coastguard Workerendmacro()
338*1c60b9acSAndroid Build Coastguard Worker
339*1c60b9acSAndroid Build Coastguard Workermacro(exports_to_parent_scope)
340*1c60b9acSAndroid Build Coastguard Worker	set(SOURCES ${SOURCES} PARENT_SCOPE)
341*1c60b9acSAndroid Build Coastguard Worker	if (LIB_LIST)
342*1c60b9acSAndroid Build Coastguard Worker		set(LIB_LIST ${LIB_LIST} PARENT_SCOPE)
343*1c60b9acSAndroid Build Coastguard Worker	endif()
344*1c60b9acSAndroid Build Coastguard Worker	get_property(_CURR DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
345*1c60b9acSAndroid Build Coastguard Worker	set(_CMAKE_INC_LIST ${_CURR} PARENT_SCOPE)
346*1c60b9acSAndroid Build Coastguard Worker	if (LWS_LIB_BUILD_INC_PATHS)
347*1c60b9acSAndroid Build Coastguard Worker		set(LWS_LIB_BUILD_INC_PATHS ${LWS_LIB_BUILD_INC_PATHS} PARENT_SCOPE)
348*1c60b9acSAndroid Build Coastguard Worker	endif()
349*1c60b9acSAndroid Build Coastguard Workerendmacro()
350*1c60b9acSAndroid Build Coastguard Worker
351*1c60b9acSAndroid Build Coastguard Workermacro(export_to_parent_intermediate)
352*1c60b9acSAndroid Build Coastguard Worker	set(SOURCES ${SOURCES} PARENT_SCOPE)
353*1c60b9acSAndroid Build Coastguard Worker	if (LIB_LIST)
354*1c60b9acSAndroid Build Coastguard Worker		set(LIB_LIST ${LIB_LIST} PARENT_SCOPE)
355*1c60b9acSAndroid Build Coastguard Worker	endif()
356*1c60b9acSAndroid Build Coastguard Worker	set(_CMAKE_INC_LIST ${_CMAKE_INC_LIST} PARENT_SCOPE)
357*1c60b9acSAndroid Build Coastguard Worker	if (LWS_LIB_BUILD_INC_PATHS)
358*1c60b9acSAndroid Build Coastguard Worker		set(LWS_LIB_BUILD_INC_PATHS ${LWS_LIB_BUILD_INC_PATHS} PARENT_SCOPE)
359*1c60b9acSAndroid Build Coastguard Worker	endif()
360*1c60b9acSAndroid Build Coastguard Workerendmacro()
361*1c60b9acSAndroid Build Coastguard Worker
362*1c60b9acSAndroid Build Coastguard Worker#
363*1c60b9acSAndroid Build Coastguard Worker# Try to find the current Git hash
364*1c60b9acSAndroid Build Coastguard Worker#
365*1c60b9acSAndroid Build Coastguard Worker
366*1c60b9acSAndroid Build Coastguard Workerfind_package(Git)
367*1c60b9acSAndroid Build Coastguard Workerif(GIT_EXECUTABLE)
368*1c60b9acSAndroid Build Coastguard Worker	execute_process(
369*1c60b9acSAndroid Build Coastguard Worker		WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
370*1c60b9acSAndroid Build Coastguard Worker		COMMAND "${GIT_EXECUTABLE}" describe --tags --always
371*1c60b9acSAndroid Build Coastguard Worker		OUTPUT_VARIABLE GIT_HASH
372*1c60b9acSAndroid Build Coastguard Worker		OUTPUT_STRIP_TRAILING_WHITESPACE
373*1c60b9acSAndroid Build Coastguard Worker		)
374*1c60b9acSAndroid Build Coastguard Worker	set(LWS_BUILD_HASH ${GIT_HASH})
375*1c60b9acSAndroid Build Coastguard Worker
376*1c60b9acSAndroid Build Coastguard Worker	# append the build user and hostname
377*1c60b9acSAndroid Build Coastguard Worker	if (NOT LWS_REPRODUCIBLE)
378*1c60b9acSAndroid Build Coastguard Worker		execute_process(
379*1c60b9acSAndroid Build Coastguard Worker			WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
380*1c60b9acSAndroid Build Coastguard Worker			COMMAND "whoami"
381*1c60b9acSAndroid Build Coastguard Worker			OUTPUT_VARIABLE GIT_USER
382*1c60b9acSAndroid Build Coastguard Worker			OUTPUT_STRIP_TRAILING_WHITESPACE
383*1c60b9acSAndroid Build Coastguard Worker			)
384*1c60b9acSAndroid Build Coastguard Worker		execute_process(
385*1c60b9acSAndroid Build Coastguard Worker			WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
386*1c60b9acSAndroid Build Coastguard Worker			COMMAND "hostname"
387*1c60b9acSAndroid Build Coastguard Worker			OUTPUT_VARIABLE GIT_HOST
388*1c60b9acSAndroid Build Coastguard Worker			OUTPUT_STRIP_TRAILING_WHITESPACE
389*1c60b9acSAndroid Build Coastguard Worker			)
390*1c60b9acSAndroid Build Coastguard Worker		string(REGEX REPLACE "([^\\])[\\]([^\\])" "\\1\\\\\\\\\\2" GIT_USER ${GIT_USER})
391*1c60b9acSAndroid Build Coastguard Worker		set(LWS_BUILD_HASH ${GIT_USER}@${GIT_HOST}-${GIT_HASH})
392*1c60b9acSAndroid Build Coastguard Worker	endif()
393*1c60b9acSAndroid Build Coastguard Worker
394*1c60b9acSAndroid Build Coastguard Worker	message("Git commit hash: ${LWS_BUILD_HASH}")
395*1c60b9acSAndroid Build Coastguard Workerendif()
396*1c60b9acSAndroid Build Coastguard Worker
397*1c60b9acSAndroid Build Coastguard Workerif ("${LWS_BUILD_HASH}" STREQUAL "")
398*1c60b9acSAndroid Build Coastguard Worker	set(LWS_BUILD_HASH "unknown")
399*1c60b9acSAndroid Build Coastguard Workerendif()
400*1c60b9acSAndroid Build Coastguard Worker
401*1c60b9acSAndroid Build Coastguard Workerset(PACKAGE "libwebsockets")
402*1c60b9acSAndroid Build Coastguard Workerset(CPACK_RPM_PACKAGE_LICENSE "MIT")
403*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_NAME "${PACKAGE}")
404*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_VERSION_MAJOR "4")
405*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_VERSION_MINOR "3")
406*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_VERSION_PATCH_NUMBER "0")
407*1c60b9acSAndroid Build Coastguard Worker
408*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_VERSION_PATCH "${CPACK_PACKAGE_VERSION_PATCH_NUMBER}-${LWS_BUILD_HASH}")
409*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_RELEASE 1)
410*1c60b9acSAndroid Build Coastguard Worker
411*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
412*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_VENDOR "[email protected]")
413*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_CONTACT "[email protected]")
414*1c60b9acSAndroid Build Coastguard Workerset(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PACKAGE} ${CPACK_PACKAGE_VERSION}")
415*1c60b9acSAndroid Build Coastguard Workerset(SOVERSION "19")
416*1c60b9acSAndroid Build Coastguard Workerif(NOT CPACK_GENERATOR)
417*1c60b9acSAndroid Build Coastguard Worker    if(UNIX)
418*1c60b9acSAndroid Build Coastguard Worker        set(CPACK_GENERATOR "TGZ")
419*1c60b9acSAndroid Build Coastguard Worker    else()
420*1c60b9acSAndroid Build Coastguard Worker        set(CPACK_GENERATOR "ZIP")
421*1c60b9acSAndroid Build Coastguard Worker    endif()
422*1c60b9acSAndroid Build Coastguard Workerendif()
423*1c60b9acSAndroid Build Coastguard Workerset(CPACK_SOURCE_GENERATOR "TGZ")
424*1c60b9acSAndroid Build Coastguard Workerset(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
425*1c60b9acSAndroid Build Coastguard Workerset(VERSION "${CPACK_PACKAGE_VERSION}")
426*1c60b9acSAndroid Build Coastguard Worker
427*1c60b9acSAndroid Build Coastguard Workerset(CPACK_RPM_PACKAGE_RELEASE_DIST ON)
428*1c60b9acSAndroid Build Coastguard Workerset(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
429*1c60b9acSAndroid Build Coastguard Worker# below makes path length problems in CI
430*1c60b9acSAndroid Build Coastguard Workerset(CPACK_RPM_DEBUGINFO_PACKAGE OFF)
431*1c60b9acSAndroid Build Coastguard Worker# below makes some kind of chimera rpm with binaries and sources
432*1c60b9acSAndroid Build Coastguard Workerset(CPACK_RPM_PACKAGE_SOURCES OFF)
433*1c60b9acSAndroid Build Coastguard Workerset(CPACK_RPM_INSTALL_WITH_EXEC ON)
434*1c60b9acSAndroid Build Coastguard Workerset(CPACK_RPM_COMPONENT_INSTALL ON)
435*1c60b9acSAndroid Build Coastguard Worker
436*1c60b9acSAndroid Build Coastguard Workerset(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT")
437*1c60b9acSAndroid Build Coastguard Workerset(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
438*1c60b9acSAndroid Build Coastguard Workerset(CPACK_DEBIAN_DEBUGINFO_PACKAGE ON)
439*1c60b9acSAndroid Build Coastguard Workerset(CPACK_DEBIAN_PACKAGE_SOURCE ON)
440*1c60b9acSAndroid Build Coastguard Workerset(CPACK_DEBIAN_COMPONENT_INSTALL ON)
441*1c60b9acSAndroid Build Coastguard Worker
442*1c60b9acSAndroid Build Coastguard Worker
443*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBRARY_VERSION ${CPACK_PACKAGE_VERSION})
444*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBRARY_VERSION_MAJOR ${CPACK_PACKAGE_VERSION_MAJOR})
445*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBRARY_VERSION_MINOR ${CPACK_PACKAGE_VERSION_MINOR})
446*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBRARY_VERSION_PATCH ${CPACK_PACKAGE_VERSION_PATCH_NUMBER})
447*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBRARY_VERSION_PATCH_ELABORATED ${CPACK_PACKAGE_VERSION_PATCH})
448*1c60b9acSAndroid Build Coastguard Worker
449*1c60b9acSAndroid Build Coastguard Workerif (NOT CMAKE_MODULE_PATH)
450*1c60b9acSAndroid Build Coastguard Worker	set(CMAKE_MODULE_PATH "")
451*1c60b9acSAndroid Build Coastguard Workerendif()
452*1c60b9acSAndroid Build Coastguard Workerset(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/")
453*1c60b9acSAndroid Build Coastguard Worker
454*1c60b9acSAndroid Build Coastguard Worker
455*1c60b9acSAndroid Build Coastguard Workerif (CMAKE_TOOLCHAIN_FILE)
456*1c60b9acSAndroid Build Coastguard Worker	message(STATUS "CMAKE_TOOLCHAIN_FILE='${CMAKE_TOOLCHAIN_FILE}'")
457*1c60b9acSAndroid Build Coastguard Workerendif()
458*1c60b9acSAndroid Build Coastguard Worker
459*1c60b9acSAndroid Build Coastguard Workerif (NOT LIB_SUFFIX)
460*1c60b9acSAndroid Build Coastguard Worker	set(LIB_SUFFIX "")
461*1c60b9acSAndroid Build Coastguard Workerendif()
462*1c60b9acSAndroid Build Coastguard Worker
463*1c60b9acSAndroid Build Coastguard Workerif (WIN32)
464*1c60b9acSAndroid Build Coastguard Worker	configure_file(${CMAKE_CURRENT_SOURCE_DIR}/win32port/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/win32port/version.rc @ONLY)
465*1c60b9acSAndroid Build Coastguard Worker	set(RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/win32port/version.rc)
466*1c60b9acSAndroid Build Coastguard Workerendif()
467*1c60b9acSAndroid Build Coastguard Worker
468*1c60b9acSAndroid Build Coastguard Workerinclude_directories(include)
469*1c60b9acSAndroid Build Coastguard Worker
470*1c60b9acSAndroid Build Coastguard Worker# Allow the user to override installation directories.
471*1c60b9acSAndroid Build Coastguard Workerset(LWS_INSTALL_LIB_DIR       lib CACHE PATH "Installation directory for libraries")
472*1c60b9acSAndroid Build Coastguard Workerset(LWS_INSTALL_BIN_DIR       bin CACHE PATH "Installation directory for executables")
473*1c60b9acSAndroid Build Coastguard Workerset(LWS_INSTALL_INCLUDE_DIR   include CACHE PATH "Installation directory for header files")
474*1c60b9acSAndroid Build Coastguard Workerset(LWS_INSTALL_EXAMPLES_DIR  bin CACHE PATH "Installation directory for example files")
475*1c60b9acSAndroid Build Coastguard Worker
476*1c60b9acSAndroid Build Coastguard Worker# if you gave LWS_WITH_MINIZ, point to MINIZ here if not found
477*1c60b9acSAndroid Build Coastguard Worker# automatically
478*1c60b9acSAndroid Build Coastguard Worker
479*1c60b9acSAndroid Build Coastguard Workerset(LWS_ZLIB_LIBRARIES CACHE PATH "Path to the zlib/miniz library")
480*1c60b9acSAndroid Build Coastguard Workerset(LWS_ZLIB_INCLUDE_DIRS CACHE PATH "Path to the zlib/miniz include directory")
481*1c60b9acSAndroid Build Coastguard Workerset(LWS_SQLITE3_LIBRARIES CACHE PATH "Path to the sqlite3 library")
482*1c60b9acSAndroid Build Coastguard Workerset(LWS_SQLITE3_INCLUDE_DIRS CACHE PATH "Path to the sqlite3 include directory")
483*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBMOUNT_INCLUDE_DIRS CACHE PATH "Path to the libmount include directory")
484*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBMOUNT_LIBRARIES CACHE PATH "Path to the libmount library")
485*1c60b9acSAndroid Build Coastguard Worker# on unix, these are in the toolchain.  On win32 you have to put them somewhere
486*1c60b9acSAndroid Build Coastguard Worker# yourself and point to them here
487*1c60b9acSAndroid Build Coastguard Workerset(LWS_EXT_PTHREAD_INCLUDE_DIR CACHE PATH "Path to an external pthreads include directory")
488*1c60b9acSAndroid Build Coastguard Workerset(LWS_EXT_PTHREAD_LIBRARIES CACHE PATH "Path to an external pthreads library")
489*1c60b9acSAndroid Build Coastguard Worker
490*1c60b9acSAndroid Build Coastguard Worker
491*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_HTTP_STREAM_COMPRESSION)
492*1c60b9acSAndroid Build Coastguard Worker	set(LWS_WITH_ZLIB 1)
493*1c60b9acSAndroid Build Coastguard Workerendif()
494*1c60b9acSAndroid Build Coastguard Worker
495*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_ZLIB AND NOT LWS_WITH_BUNDLED_ZLIB)
496*1c60b9acSAndroid Build Coastguard Worker	if ("${LWS_ZLIB_LIBRARIES}" STREQUAL "" OR "${LWS_ZLIB_INCLUDE_DIRS}" STREQUAL "")
497*1c60b9acSAndroid Build Coastguard Worker	else()
498*1c60b9acSAndroid Build Coastguard Worker		set(ZLIB_LIBRARIES ${LWS_ZLIB_LIBRARIES})
499*1c60b9acSAndroid Build Coastguard Worker		set(ZLIB_INCLUDE_DIRS ${LWS_ZLIB_INCLUDE_DIRS})
500*1c60b9acSAndroid Build Coastguard Worker		set(ZLIB_FOUND 1)
501*1c60b9acSAndroid Build Coastguard Worker	endif()
502*1c60b9acSAndroid Build Coastguard Workerendif()
503*1c60b9acSAndroid Build Coastguard Worker
504*1c60b9acSAndroid Build Coastguard Worker
505*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_SQLITE3)
506*1c60b9acSAndroid Build Coastguard Worker	if ("${LWS_SQLITE3_LIBRARIES}" STREQUAL "" OR "${LWS_SQLITE3_INCLUDE_DIRS}" STREQUAL "")
507*1c60b9acSAndroid Build Coastguard Worker	else()
508*1c60b9acSAndroid Build Coastguard Worker		set(SQLITE3_LIBRARIES ${LWS_SQLITE3_LIBRARIES})
509*1c60b9acSAndroid Build Coastguard Worker		set(SQLITE3_INCLUDE_DIRS ${LWS_SQLITE3_INCLUDE_DIRS})
510*1c60b9acSAndroid Build Coastguard Worker		set(SQLITE3_FOUND 1)
511*1c60b9acSAndroid Build Coastguard Worker	endif()
512*1c60b9acSAndroid Build Coastguard Workerendif()
513*1c60b9acSAndroid Build Coastguard Worker
514*1c60b9acSAndroid Build Coastguard Workerinclude_directories("${PROJECT_BINARY_DIR}")
515*1c60b9acSAndroid Build Coastguard Worker
516*1c60b9acSAndroid Build Coastguard Worker# Check for different inline keyword versions.
517*1c60b9acSAndroid Build Coastguard Workerforeach(KEYWORD "inline" "__inline__" "__inline")
518*1c60b9acSAndroid Build Coastguard Worker	set(CMAKE_REQUIRED_DEFINITIONS "-DKEYWORD=${KEYWORD}")
519*1c60b9acSAndroid Build Coastguard Worker	CHECK_C_SOURCE_COMPILES(
520*1c60b9acSAndroid Build Coastguard Worker		"
521*1c60b9acSAndroid Build Coastguard Worker		#include <stdio.h>
522*1c60b9acSAndroid Build Coastguard Worker		static KEYWORD void a() {}
523*1c60b9acSAndroid Build Coastguard Worker		int main(int argc, char **argv) { a(); return 0; }
524*1c60b9acSAndroid Build Coastguard Worker		" LWS_HAVE_${KEYWORD})
525*1c60b9acSAndroid Build Coastguard Workerendforeach()
526*1c60b9acSAndroid Build Coastguard Worker
527*1c60b9acSAndroid Build Coastguard Workerif (NOT LWS_HAVE_inline)
528*1c60b9acSAndroid Build Coastguard Worker	if (LWS_HAVE___inline__)
529*1c60b9acSAndroid Build Coastguard Worker		set(inline __inline__)
530*1c60b9acSAndroid Build Coastguard Worker	elseif(LWS_HAVE___inline)
531*1c60b9acSAndroid Build Coastguard Worker		set(inline __inline)
532*1c60b9acSAndroid Build Coastguard Worker	endif()
533*1c60b9acSAndroid Build Coastguard Workerendif()
534*1c60b9acSAndroid Build Coastguard Worker
535*1c60b9acSAndroid Build Coastguard Worker# Put the libraries and binaries that get built into directories at the
536*1c60b9acSAndroid Build Coastguard Worker# top of the build tree rather than in hard-to-find leaf directories.
537*1c60b9acSAndroid Build Coastguard WorkerSET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
538*1c60b9acSAndroid Build Coastguard WorkerSET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
539*1c60b9acSAndroid Build Coastguard WorkerSET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
540*1c60b9acSAndroid Build Coastguard Worker
541*1c60b9acSAndroid Build Coastguard WorkerSET(LWS_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}")
542*1c60b9acSAndroid Build Coastguard Worker
543*1c60b9acSAndroid Build Coastguard Worker# Put absolute path of dynamic libraries into the object code. Some
544*1c60b9acSAndroid Build Coastguard Worker# architectures, notably Mac OS X, need this.
545*1c60b9acSAndroid Build Coastguard WorkerSET(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/${LWS_INSTALL_LIB_DIR}${LIB_SUFFIX}")
546*1c60b9acSAndroid Build Coastguard Worker
547*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITHOUT_BUILTIN_SHA1)
548*1c60b9acSAndroid Build Coastguard Worker	set(LWS_SHA1_USE_OPENSSL_NAME 1)
549*1c60b9acSAndroid Build Coastguard Workerendif()
550*1c60b9acSAndroid Build Coastguard Worker
551*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES(
552*1c60b9acSAndroid Build Coastguard Worker	"#include <malloc.h>
553*1c60b9acSAndroid Build Coastguard Worker	int main(int argc, char **argv) { return malloc_trim(0); }
554*1c60b9acSAndroid Build Coastguard Worker	" LWS_HAVE_MALLOC_TRIM)
555*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES(
556*1c60b9acSAndroid Build Coastguard Worker	"#include <malloc.h>
557*1c60b9acSAndroid Build Coastguard Worker	int main(int argc, char **argv) { return (int)malloc_usable_size((void *)0); }
558*1c60b9acSAndroid Build Coastguard Worker	" LWS_HAVE_MALLOC_USABLE_SIZE)
559*1c60b9acSAndroid Build Coastguard Worker
560*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(fork LWS_HAVE_FORK)
561*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(getenv LWS_HAVE_GETENV)
562*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(malloc LWS_HAVE_MALLOC)
563*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(memset LWS_HAVE_MEMSET)
564*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(realloc LWS_HAVE_REALLOC)
565*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(socket LWS_HAVE_SOCKET)
566*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(strerror LWS_HAVE_STRERROR)
567*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(vfork LWS_HAVE_VFORK)
568*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(execvpe LWS_HAVE_EXECVPE)
569*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(getifaddrs LWS_HAVE_GETIFADDRS)
570*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(snprintf LWS_HAVE_SNPRINTF)
571*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(_snprintf LWS_HAVE__SNPRINTF)
572*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(_vsnprintf LWS_HAVE__VSNPRINTF)
573*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(getloadavg LWS_HAVE_GETLOADAVG)
574*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(atoll LWS_HAVE_ATOLL)
575*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(_atoi64 LWS_HAVE__ATOI64)
576*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(_stat32i64 LWS_HAVE__STAT32I64)
577*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(clock_gettime LWS_HAVE_CLOCK_GETTIME)
578*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(localtime_r LWS_HAVE_LOCALTIME_R)
579*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(gmtime_r LWS_HAVE_GMTIME_R)
580*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(ctime_r LWS_HAVE_CTIME_R)
581*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(getgrgid_r LWS_HAVE_GETGRGID_R)
582*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(getgrnam_r LWS_HAVE_GETGRNAM_R)
583*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(getpwuid_r LWS_HAVE_GETPWUID_R)
584*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(getpwnam_r LWS_HAVE_GETPWNAM_R)
585*1c60b9acSAndroid Build Coastguard WorkerCHECK_FUNCTION_EXISTS(timegm LWS_HAVE_TIMEGM)
586*1c60b9acSAndroid Build Coastguard Worker
587*1c60b9acSAndroid Build Coastguard Workerif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
588*1c60b9acSAndroid Build Coastguard Worker	if(CMAKE_OSX_DEPLOYMENT_TARGET LESS "10.12")
589*1c60b9acSAndroid Build Coastguard Worker		message("No clock_gettime found on macOS ${CMAKE_OSX_DEPLOYMENT_TARGET}. Disabling LWS_HAVE_CLOCK_GETTIME.")
590*1c60b9acSAndroid Build Coastguard Worker		set(LWS_HAVE_CLOCK_GETTIME 0)
591*1c60b9acSAndroid Build Coastguard Worker	endif()
592*1c60b9acSAndroid Build Coastguard Workerendif()
593*1c60b9acSAndroid Build Coastguard Worker
594*1c60b9acSAndroid Build Coastguard Workerif (NOT LWS_HAVE_GETIFADDRS)
595*1c60b9acSAndroid Build Coastguard Worker	if (LWS_WITHOUT_BUILTIN_GETIFADDRS)
596*1c60b9acSAndroid Build Coastguard Worker		message(FATAL_ERROR "No getifaddrs was found on the system. Turn off the LWS_WITHOUT_BUILTIN_GETIFADDRS compile option to use the supplied BSD version.")
597*1c60b9acSAndroid Build Coastguard Worker	endif()
598*1c60b9acSAndroid Build Coastguard Worker	set(LWS_BUILTIN_GETIFADDRS 1)
599*1c60b9acSAndroid Build Coastguard Workerendif()
600*1c60b9acSAndroid Build Coastguard Worker
601*1c60b9acSAndroid Build Coastguard Workerif (LWS_EXT_PTHREAD_INCLUDE_DIR)
602*1c60b9acSAndroid Build Coastguard Worker	set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES};${LWS_EXT_PTHREAD_INCLUDE_DIR})
603*1c60b9acSAndroid Build Coastguard Worker	include_directories(${LWS_EXT_PTHREAD_INCLUDE_DIR})
604*1c60b9acSAndroid Build Coastguard Worker
605*1c60b9acSAndroid Build Coastguard Worker	list(APPEND LIB_LIST_AT_END ${LWS_EXT_PTHREAD_LIBRARIES})
606*1c60b9acSAndroid Build Coastguard Worker	set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} " -DHAVE_STRUCT_TIMESPEC=1")
607*1c60b9acSAndroid Build Coastguard Workerendif()
608*1c60b9acSAndroid Build Coastguard Worker
609*1c60b9acSAndroid Build Coastguard Worker#
610*1c60b9acSAndroid Build Coastguard Worker# add libs here that need to be at the end of the link order
611*1c60b9acSAndroid Build Coastguard Worker#
612*1c60b9acSAndroid Build Coastguard Worker
613*1c60b9acSAndroid Build Coastguard Workerif (LWS_EXT_PTHREAD_INCLUDE_DIR)
614*1c60b9acSAndroid Build Coastguard Worker	list(APPEND LIB_LIST_AT_END ${LWS_EXT_PTHREAD_LIBRARIES})
615*1c60b9acSAndroid Build Coastguard Workerendif()
616*1c60b9acSAndroid Build Coastguard Worker
617*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_ZLIB AND NOT LWS_WITH_BUNDLED_ZLIB)
618*1c60b9acSAndroid Build Coastguard Worker	list(APPEND LIB_LIST_AT_END "${ZLIB_LIBRARIES}")
619*1c60b9acSAndroid Build Coastguard Workerendif()
620*1c60b9acSAndroid Build Coastguard Worker
621*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_PLUGINS_API AND UNIX AND CMAKE_DL_LIBS AND NOT (${CMAKE_SYSTEM_NAME} MATCHES "QNX"))
622*1c60b9acSAndroid Build Coastguard Worker	list(APPEND LIB_LIST_AT_END ${CMAKE_DL_LIBS})
623*1c60b9acSAndroid Build Coastguard Workerendif()
624*1c60b9acSAndroid Build Coastguard Worker
625*1c60b9acSAndroid Build Coastguard Worker
626*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(in6addr.h LWS_HAVE_IN6ADDR_H)
627*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(memory.h LWS_HAVE_MEMORY_H)
628*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(netinet/in.h LWS_HAVE_NETINET_IN_H)
629*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(stdint.h LWS_HAVE_STDINT_H)
630*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(stdlib.h LWS_HAVE_STDLIB_H)
631*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(strings.h LWS_HAVE_STRINGS_H)
632*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(string.h LWS_HAVE_STRING_H)
633*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(sys/prctl.h LWS_HAVE_SYS_PRCTL_H)
634*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(sys/socket.h LWS_HAVE_SYS_SOCKET_H)
635*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(sys/sockio.h LWS_HAVE_SYS_SOCKIO_H)
636*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(sys/stat.h LWS_HAVE_SYS_STAT_H)
637*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(sys/types.h LWS_HAVE_SYS_TYPES_H)
638*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(unistd.h LWS_HAVE_UNISTD_H)
639*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(vfork.h LWS_HAVE_VFORK_H)
640*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(sys/capability.h LWS_HAVE_SYS_CAPABILITY_H)
641*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(malloc.h LWS_HAVE_MALLOC_H)
642*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H)
643*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(inttypes.h LWS_HAVE_INTTYPES_H)
644*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILE(sys/resource.h LWS_HAVE_SYS_RESOURCE_H)
645*1c60b9acSAndroid Build Coastguard Worker
646*1c60b9acSAndroid Build Coastguard Workerif (WIN32 OR MSVC)
647*1c60b9acSAndroid Build Coastguard Worker	CHECK_C_SOURCE_COMPILES("#include <winsock2.h>
648*1c60b9acSAndroid Build Coastguard Worker				 #include <afunix.h>
649*1c60b9acSAndroid Build Coastguard Worker				 int main() { return 0; }" LWS_HAVE_WIN32_AFUNIX_H)
650*1c60b9acSAndroid Build Coastguard Worker
651*1c60b9acSAndroid Build Coastguard Worker	if (LWS_UNIX_SOCK AND NOT LWS_HAVE_WIN32_AFUNIX_H)
652*1c60b9acSAndroid Build Coastguard Worker		message("No afunix.h found. Disabling LWS_UNIX_SOCK.")
653*1c60b9acSAndroid Build Coastguard Worker		set(LWS_WITH_UNIX_SOCK OFF)
654*1c60b9acSAndroid Build Coastguard Worker	endif()
655*1c60b9acSAndroid Build Coastguard Workerendif()
656*1c60b9acSAndroid Build Coastguard Worker
657*1c60b9acSAndroid Build Coastguard WorkerCHECK_LIBRARY_EXISTS(cap cap_set_flag "" LWS_HAVE_LIBCAP)
658*1c60b9acSAndroid Build Coastguard Worker
659*1c60b9acSAndroid Build Coastguard Worker
660*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_ZLIB AND NOT LWS_WITH_BUNDLED_ZLIB)
661*1c60b9acSAndroid Build Coastguard Worker	if (LWS_WITH_MINIZ)
662*1c60b9acSAndroid Build Coastguard Worker		CHECK_INCLUDE_FILE(miniz.h LWS_HAVE_ZLIB_H)
663*1c60b9acSAndroid Build Coastguard Worker	else()
664*1c60b9acSAndroid Build Coastguard Worker		CHECK_INCLUDE_FILE(zlib.h LWS_HAVE_ZLIB_H)
665*1c60b9acSAndroid Build Coastguard Worker	endif()
666*1c60b9acSAndroid Build Coastguard Workerendif()
667*1c60b9acSAndroid Build Coastguard Worker
668*1c60b9acSAndroid Build Coastguard WorkerCHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h" STDC_HEADERS)
669*1c60b9acSAndroid Build Coastguard Worker
670*1c60b9acSAndroid Build Coastguard Workerif (NOT CMAKE_REQUIRED_FLAGS)
671*1c60b9acSAndroid Build Coastguard Worker	set(CMAKE_REQUIRED_FLAGS "")
672*1c60b9acSAndroid Build Coastguard Workerendif()
673*1c60b9acSAndroid Build Coastguard Workerif (NOT CMAKE_REQUIRED_INCLUDES)
674*1c60b9acSAndroid Build Coastguard Worker	set(CMAKE_REQUIRED_INCLUDES "")
675*1c60b9acSAndroid Build Coastguard Workerendif()
676*1c60b9acSAndroid Build Coastguard Workerif (NOT CMAKE_REQUIRED_LIBRARIES)
677*1c60b9acSAndroid Build Coastguard Worker	set(CMAKE_REQUIRED_LIBRARIES "")
678*1c60b9acSAndroid Build Coastguard Workerendif()
679*1c60b9acSAndroid Build Coastguard Worker
680*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES("#include <stdint.h>
681*1c60b9acSAndroid Build Coastguard Worker	int main(void) {
682*1c60b9acSAndroid Build Coastguard Worker		intptr_t test = 1;
683*1c60b9acSAndroid Build Coastguard Worker		return 0;
684*1c60b9acSAndroid Build Coastguard Worker	}" LWS_HAS_INTPTR_T)
685*1c60b9acSAndroid Build Coastguard Worker
686*1c60b9acSAndroid Build Coastguard Workerif ((CMAKE_C_COMPILER_ID MATCHES "Clang") OR
687*1c60b9acSAndroid Build Coastguard Worker    (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
688*1c60b9acSAndroid Build Coastguard Worker	set(COMPILER_IS_CLANG ON)
689*1c60b9acSAndroid Build Coastguard Workerendif()
690*1c60b9acSAndroid Build Coastguard Worker
691*1c60b9acSAndroid Build Coastguard Workerif (LWS_HAVE_PTHREAD_H AND NOT LWS_PLAT_FREERTOS)
692*1c60b9acSAndroid Build Coastguard Worker	CHECK_C_SOURCE_COMPILES("
693*1c60b9acSAndroid Build Coastguard Worker		#ifndef _GNU_SOURCE
694*1c60b9acSAndroid Build Coastguard Worker		#define _GNU_SOURCE
695*1c60b9acSAndroid Build Coastguard Worker		#endif
696*1c60b9acSAndroid Build Coastguard Worker		#include <pthread.h>
697*1c60b9acSAndroid Build Coastguard Worker		int main(void) {
698*1c60b9acSAndroid Build Coastguard Worker		#ifdef __PTW32_H
699*1c60b9acSAndroid Build Coastguard Worker			pthread_t th = {0,0};
700*1c60b9acSAndroid Build Coastguard Worker		#else
701*1c60b9acSAndroid Build Coastguard Worker			pthread_t th = 0;
702*1c60b9acSAndroid Build Coastguard Worker		#endif
703*1c60b9acSAndroid Build Coastguard Worker			pthread_setname_np(th, NULL);
704*1c60b9acSAndroid Build Coastguard Worker			return 0;
705*1c60b9acSAndroid Build Coastguard Worker		}" LWS_HAS_PTHREAD_SETNAME_NP)
706*1c60b9acSAndroid Build Coastguard Workerendif()
707*1c60b9acSAndroid Build Coastguard Worker
708*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES("#include <stddef.h>
709*1c60b9acSAndroid Build Coastguard Worker	#include <getopt.h>
710*1c60b9acSAndroid Build Coastguard Worker	int main(void) {
711*1c60b9acSAndroid Build Coastguard Worker		void *p = (void *)getopt_long;
712*1c60b9acSAndroid Build Coastguard Worker		return p != NULL;
713*1c60b9acSAndroid Build Coastguard Worker	}" LWS_HAS_GETOPT_LONG)
714*1c60b9acSAndroid Build Coastguard Worker
715*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES("#include <linux/rtnetlink.h>
716*1c60b9acSAndroid Build Coastguard Worker	int main(void) {
717*1c60b9acSAndroid Build Coastguard Worker		int test = RTA_PREF;
718*1c60b9acSAndroid Build Coastguard Worker		return 0;
719*1c60b9acSAndroid Build Coastguard Worker	}" LWS_HAVE_RTA_PREF)
720*1c60b9acSAndroid Build Coastguard Worker
721*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES("#include <sys/types.h>
722*1c60b9acSAndroid Build Coastguard Worker	int main(void) {
723*1c60b9acSAndroid Build Coastguard Worker		suseconds_t x = 0;
724*1c60b9acSAndroid Build Coastguard Worker		return (int)x;
725*1c60b9acSAndroid Build Coastguard Worker	}" LWS_HAVE_SUSECONDS_T)
726*1c60b9acSAndroid Build Coastguard Worker
727*1c60b9acSAndroid Build Coastguard Workerif (NOT PID_T_SIZE)
728*1c60b9acSAndroid Build Coastguard Worker	set(pid_t int)
729*1c60b9acSAndroid Build Coastguard Workerendif()
730*1c60b9acSAndroid Build Coastguard Worker
731*1c60b9acSAndroid Build Coastguard Workerif (NOT SIZE_T_SIZE)
732*1c60b9acSAndroid Build Coastguard Worker	set(size_t "unsigned int")
733*1c60b9acSAndroid Build Coastguard Workerendif()
734*1c60b9acSAndroid Build Coastguard Worker
735*1c60b9acSAndroid Build Coastguard Workerif (NOT LWS_HAVE_MALLOC)
736*1c60b9acSAndroid Build Coastguard Worker	set(malloc rpl_malloc)
737*1c60b9acSAndroid Build Coastguard Workerendif()
738*1c60b9acSAndroid Build Coastguard Worker
739*1c60b9acSAndroid Build Coastguard Workerif (NOT LWS_HAVE_REALLOC)
740*1c60b9acSAndroid Build Coastguard Worker	set(realloc rpl_realloc)
741*1c60b9acSAndroid Build Coastguard Workerendif()
742*1c60b9acSAndroid Build Coastguard Worker
743*1c60b9acSAndroid Build Coastguard Worker
744*1c60b9acSAndroid Build Coastguard Worker
745*1c60b9acSAndroid Build Coastguard Worker
746*1c60b9acSAndroid Build Coastguard Workerif (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR COMPILER_IS_CLANG)
747*1c60b9acSAndroid Build Coastguard Worker    include (CheckCCompilerFlag)
748*1c60b9acSAndroid Build Coastguard Worker    CHECK_C_COMPILER_FLAG(-fvisibility=hidden LWS_HAVE_VISIBILITY)
749*1c60b9acSAndroid Build Coastguard Worker    if (LWS_WITH_FANALYZER)
750*1c60b9acSAndroid Build Coastguard Worker	    CHECK_C_COMPILER_FLAG(-fanalyzer LWS_HAVE_FANALYZER)
751*1c60b9acSAndroid Build Coastguard Worker    endif()
752*1c60b9acSAndroid Build Coastguard Worker    if (LWS_HAVE_VISIBILITY)
753*1c60b9acSAndroid Build Coastguard Worker                set(VISIBILITY_FLAG -fvisibility=hidden)
754*1c60b9acSAndroid Build Coastguard Worker    endif()
755*1c60b9acSAndroid Build Coastguard Worker    if (LWS_WITH_GCOV)
756*1c60b9acSAndroid Build Coastguard Worker	    set (GCOV_FLAGS "-fprofile-arcs -ftest-coverage ")
757*1c60b9acSAndroid Build Coastguard Worker    else()
758*1c60b9acSAndroid Build Coastguard Worker	    set(GCOV_FLAGS "")
759*1c60b9acSAndroid Build Coastguard Worker    endif()
760*1c60b9acSAndroid Build Coastguard Worker
761*1c60b9acSAndroid Build Coastguard Worker	if (LWS_WITH_ASAN)
762*1c60b9acSAndroid Build Coastguard Worker		set (ASAN_FLAGS "-fsanitize=address -fsanitize=undefined -fsanitize-address-use-after-scope -fsanitize-undefined-trap-on-error")
763*1c60b9acSAndroid Build Coastguard Worker		if (NOT COMPILER_IS_CLANG)
764*1c60b9acSAndroid Build Coastguard Worker			set (ASAN_FLAGS "${ASAN_FLAGS} -fsanitize=pointer-compare -fsanitize=pointer-subtract -fsanitize=leak")
765*1c60b9acSAndroid Build Coastguard Worker		endif()
766*1c60b9acSAndroid Build Coastguard Worker		message("Enabling ASAN")
767*1c60b9acSAndroid Build Coastguard Worker	else()
768*1c60b9acSAndroid Build Coastguard Worker		set(ASAN_FLAGS "")
769*1c60b9acSAndroid Build Coastguard Worker	endif()
770*1c60b9acSAndroid Build Coastguard Worker
771*1c60b9acSAndroid Build Coastguard Worker	check_c_compiler_flag("-Wignored-qualifiers" LWS_GCC_HAS_IGNORED_QUALIFIERS)
772*1c60b9acSAndroid Build Coastguard Worker	check_c_compiler_flag("-Wtype-limits" LWS_GCC_HAS_TYPE_LIMITS)
773*1c60b9acSAndroid Build Coastguard Worker	check_c_compiler_flag("-Wno-deprecated-declarations" LWS_GCC_HAS_NO_DEPRECATED_DECLARATIONS)
774*1c60b9acSAndroid Build Coastguard Worker
775*1c60b9acSAndroid Build Coastguard Worker	if (LWS_GCC_HAS_IGNORED_QUALIFIERS)
776*1c60b9acSAndroid Build Coastguard Worker		set(CMAKE_C_FLAGS "-Wignored-qualifiers ${CMAKE_C_FLAGS}" )
777*1c60b9acSAndroid Build Coastguard Worker	endif()
778*1c60b9acSAndroid Build Coastguard Worker
779*1c60b9acSAndroid Build Coastguard Worker	if (LWS_GCC_HAS_TYPE_LIMITS)
780*1c60b9acSAndroid Build Coastguard Worker		set(CMAKE_C_FLAGS "-Wtype-limits ${CMAKE_C_FLAGS}" )
781*1c60b9acSAndroid Build Coastguard Worker	endif()
782*1c60b9acSAndroid Build Coastguard Worker
783*1c60b9acSAndroid Build Coastguard Worker	if (LWS_WITH_FANALYZER AND LWS_HAVE_FANALYZER)
784*1c60b9acSAndroid Build Coastguard Worker		set(CMAKE_C_FLAGS "-fanalyzer ${CMAKE_C_FLAGS}" )
785*1c60b9acSAndroid Build Coastguard Worker	endif()
786*1c60b9acSAndroid Build Coastguard Worker
787*1c60b9acSAndroid Build Coastguard Worker	if (CMAKE_COMPILER_IS_CLANG OR CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.4)
788*1c60b9acSAndroid Build Coastguard Worker		set(CMAKE_C_FLAGS "-Wuninitialized ${CMAKE_C_FLAGS}")
789*1c60b9acSAndroid Build Coastguard Worker	endif()
790*1c60b9acSAndroid Build Coastguard Worker
791*1c60b9acSAndroid Build Coastguard Worker	# always warn all and generate debug info
792*1c60b9acSAndroid Build Coastguard Worker	if (UNIX AND NOT LWS_PLAT_FREERTOS)
793*1c60b9acSAndroid Build Coastguard Worker		set(CMAKE_C_FLAGS "-Wall -Wextra -Wno-unused-parameter -Wconversion -Wsign-compare -Wstrict-aliasing ${VISIBILITY_FLAG} -Wundef ${GCOV_FLAGS} ${CMAKE_C_FLAGS} ${ASAN_FLAGS}" )
794*1c60b9acSAndroid Build Coastguard Worker	else()
795*1c60b9acSAndroid Build Coastguard Worker		set(CMAKE_C_FLAGS "-Wall -Wsign-compare ${VISIBILITY_FLAG} ${GCOV_FLAGS} ${CMAKE_C_FLAGS}" )
796*1c60b9acSAndroid Build Coastguard Worker	endif()
797*1c60b9acSAndroid Build Coastguard Worker
798*1c60b9acSAndroid Build Coastguard Worker	if ("${DISABLE_WERROR}" STREQUAL "OFF")
799*1c60b9acSAndroid Build Coastguard Worker		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
800*1c60b9acSAndroid Build Coastguard Worker	endif()
801*1c60b9acSAndroid Build Coastguard Worker
802*1c60b9acSAndroid Build Coastguard Worker	if (LWS_SUPPRESS_DEPRECATED_API_WARNINGS)
803*1c60b9acSAndroid Build Coastguard Worker		set(CMAKE_C_FLAGS "-Wno-deprecated ${CMAKE_C_FLAGS}")
804*1c60b9acSAndroid Build Coastguard Worker		if (LWS_GCC_HAS_NO_DEPRECATED_DECLARATIONS)
805*1c60b9acSAndroid Build Coastguard Worker			set(CMAKE_C_FLAGS "-Wno-deprecated-declarations ${CMAKE_C_FLAGS}")
806*1c60b9acSAndroid Build Coastguard Worker		endif()
807*1c60b9acSAndroid Build Coastguard Worker	endif()
808*1c60b9acSAndroid Build Coastguard Workerendif ()
809*1c60b9acSAndroid Build Coastguard Worker
810*1c60b9acSAndroid Build Coastguard Workerif ((CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) AND NOT LWS_WITHOUT_TESTAPPS)
811*1c60b9acSAndroid Build Coastguard Worker	if (UNIX AND LWS_HAVE_PTHREAD_H AND NOT (${CMAKE_SYSTEM_NAME} MATCHES "QNX"))
812*1c60b9acSAndroid Build Coastguard Worker	# jeez clang understands -pthread but dies if he sees it at link time!
813*1c60b9acSAndroid Build Coastguard Worker	# http://stackoverflow.com/questions/2391194/what-is-gs-pthread-equiv-in-clang
814*1c60b9acSAndroid Build Coastguard Worker	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread" )
815*1c60b9acSAndroid Build Coastguard Worker	list(APPEND LIB_LIST_AT_END -lpthread)
816*1c60b9acSAndroid Build Coastguard Worker    endif()
817*1c60b9acSAndroid Build Coastguard Workerendif()
818*1c60b9acSAndroid Build Coastguard Worker
819*1c60b9acSAndroid Build Coastguard Workerif (COMPILER_IS_CLANG)
820*1c60b9acSAndroid Build Coastguard Worker
821*1c60b9acSAndroid Build Coastguard Worker	# otherwise osx blows a bunch of openssl deprecated api errors
822*1c60b9acSAndroid Build Coastguard Worker	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations" )
823*1c60b9acSAndroid Build Coastguard Worker	if (UNIX AND LWS_HAVE_PTHREAD_H)
824*1c60b9acSAndroid Build Coastguard Worker		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread -Wno-error=unused-command-line-argument" )
825*1c60b9acSAndroid Build Coastguard Worker	endif()
826*1c60b9acSAndroid Build Coastguard Workerendif()
827*1c60b9acSAndroid Build Coastguard Worker
828*1c60b9acSAndroid Build Coastguard Workerif (WINCE)
829*1c60b9acSAndroid Build Coastguard Worker	list(APPEND LIB_LIST_AT_END ws2.lib)
830*1c60b9acSAndroid Build Coastguard Workerelseif (WIN32)
831*1c60b9acSAndroid Build Coastguard Worker	list(APPEND LIB_LIST_AT_END ws2_32.lib userenv.lib psapi.lib iphlpapi.lib crypt32.lib)
832*1c60b9acSAndroid Build Coastguard Workerendif()
833*1c60b9acSAndroid Build Coastguard Worker
834*1c60b9acSAndroid Build Coastguard Workerif (MSVC)
835*1c60b9acSAndroid Build Coastguard Worker	# Turn off pointless microsoft security warnings.
836*1c60b9acSAndroid Build Coastguard Worker	add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
837*1c60b9acSAndroid Build Coastguard Worker	# Fail the build if any warnings
838*1c60b9acSAndroid Build Coastguard Worker	add_compile_options(/W3 /WX)
839*1c60b9acSAndroid Build Coastguard Worker	# Unbreak MSVC broken preprocessor __VA_ARGS__ behaviour
840*1c60b9acSAndroid Build Coastguard Worker	add_compile_options(/Zc:preprocessor /experimental:preprocessor /wd5105)
841*1c60b9acSAndroid Build Coastguard Workerendif(MSVC)
842*1c60b9acSAndroid Build Coastguard Worker
843*1c60b9acSAndroid Build Coastguard Workerif (MINGW)
844*1c60b9acSAndroid Build Coastguard Worker	set(LWS_MINGW_SUPPORT 1)
845*1c60b9acSAndroid Build Coastguard Worker	set(CMAKE_C_FLAGS "-D__USE_MINGW_ANSI_STDIO ${CMAKE_C_FLAGS}")
846*1c60b9acSAndroid Build Coastguard Worker	add_definitions(-DWINVER=0x0601 -D_WIN32_WINNT=0x0601)
847*1c60b9acSAndroid Build Coastguard Workerendif()
848*1c60b9acSAndroid Build Coastguard Worker
849*1c60b9acSAndroid Build Coastguard Workerif (HDR_PRIVATE)
850*1c60b9acSAndroid Build Coastguard Worker	source_group("Headers Private"  FILES ${HDR_PRIVATE})
851*1c60b9acSAndroid Build Coastguard Workerendif()
852*1c60b9acSAndroid Build Coastguard Workerif (HDR_PUBLIC)
853*1c60b9acSAndroid Build Coastguard Worker	source_group("Headers Public"   FILES ${HDR_PUBLIC})
854*1c60b9acSAndroid Build Coastguard Workerendif()
855*1c60b9acSAndroid Build Coastguard Workerif (SOURCES)
856*1c60b9acSAndroid Build Coastguard Worker	source_group("Sources"          FILES ${SOURCES})
857*1c60b9acSAndroid Build Coastguard Workerendif()
858*1c60b9acSAndroid Build Coastguard Workerif (RESOURCES)
859*1c60b9acSAndroid Build Coastguard Worker	source_group("Resources"        FILES ${RESOURCES})
860*1c60b9acSAndroid Build Coastguard Workerendif()
861*1c60b9acSAndroid Build Coastguard Worker
862*1c60b9acSAndroid Build Coastguard Worker
863*1c60b9acSAndroid Build Coastguard Worker#
864*1c60b9acSAndroid Build Coastguard Worker# ZLIB (needed for deflate extension and if LWS_WITH_HTTP_STREAM_COMPRESSION)
865*1c60b9acSAndroid Build Coastguard Worker#
866*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_ZLIB)
867*1c60b9acSAndroid Build Coastguard Worker	if (NOT ZLIB_FOUND)
868*1c60b9acSAndroid Build Coastguard Worker		if (LWS_WITH_MINIZ)
869*1c60b9acSAndroid Build Coastguard Worker			find_package(Miniz REQUIRED)
870*1c60b9acSAndroid Build Coastguard Worker			set(ZLIB_INCLUDE_DIRS ${MINIZ_INCLUDE_DIR})
871*1c60b9acSAndroid Build Coastguard Worker			set(ZLIB_LIBRARIES ${MINIZ_LIBRARIES})
872*1c60b9acSAndroid Build Coastguard Worker		else()
873*1c60b9acSAndroid Build Coastguard Worker			find_package(ZLIB REQUIRED)
874*1c60b9acSAndroid Build Coastguard Worker		endif()
875*1c60b9acSAndroid Build Coastguard Worker	endif()
876*1c60b9acSAndroid Build Coastguard Worker	message("zlib/miniz include dirs: ${ZLIB_INCLUDE_DIRS}")
877*1c60b9acSAndroid Build Coastguard Worker	message("zlib/miniz libraries: ${ZLIB_LIBRARIES}")
878*1c60b9acSAndroid Build Coastguard Worker	include_directories(${ZLIB_INCLUDE_DIRS})
879*1c60b9acSAndroid Build Coastguard Worker	# done later at end of link list
880*1c60b9acSAndroid Build Coastguard Worker	# list(APPEND LIB_LIST ${ZLIB_LIBRARIES})
881*1c60b9acSAndroid Build Coastguard Worker	set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${ZLIB_LIBRARIES})
882*1c60b9acSAndroid Build Coastguard Worker	list(APPEND LIB_LIST_AT_END ${ZLIB_LIBRARIES})
883*1c60b9acSAndroid Build Coastguard Workerendif()
884*1c60b9acSAndroid Build Coastguard Worker
885*1c60b9acSAndroid Build Coastguard Worker
886*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_FSMOUNT AND ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
887*1c60b9acSAndroid Build Coastguard Worker	if (NOT LWS_LIBMOUNT_INCLUDE_DIRS STREQUAL "")
888*1c60b9acSAndroid Build Coastguard Worker		include_directories(${LWS_LIBMOUNT_INCLUDE_DIRS})
889*1c60b9acSAndroid Build Coastguard Worker		message("libmount include dir: ${LWS_LIBMOUNT_INCLUDE_DIRS}")
890*1c60b9acSAndroid Build Coastguard Worker	endif()
891*1c60b9acSAndroid Build Coastguard Worker	if (NOT LWS_LIBMOUNT_LIBRARIES STREQUAL "")
892*1c60b9acSAndroid Build Coastguard Worker		message("libmount libraries: ${LWS_LIBMOUNT_LIBRARIES}")
893*1c60b9acSAndroid Build Coastguard Worker		list(APPEND LIB_LIST ${LWS_LIBMOUNT_LIBRARIES})
894*1c60b9acSAndroid Build Coastguard Worker	else()
895*1c60b9acSAndroid Build Coastguard Worker		list(APPEND LIB_LIST mount)
896*1c60b9acSAndroid Build Coastguard Worker	endif()
897*1c60b9acSAndroid Build Coastguard Workerendif()
898*1c60b9acSAndroid Build Coastguard Worker
899*1c60b9acSAndroid Build Coastguard Worker
900*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_SQLITE3)
901*1c60b9acSAndroid Build Coastguard Worker	if (NOT SQLITE3_FOUND)
902*1c60b9acSAndroid Build Coastguard Worker		find_path(SQLITE3_INCLUDE_DIRS NAMES sqlite3.h)
903*1c60b9acSAndroid Build Coastguard Worker		find_library(SQLITE3_LIBRARIES NAMES sqlite3)
904*1c60b9acSAndroid Build Coastguard Worker		if(SQLITE3_INCLUDE_DIRS AND SQLITE3_LIBRARIES)
905*1c60b9acSAndroid Build Coastguard Worker			set(SQLITE3_FOUND 1)
906*1c60b9acSAndroid Build Coastguard Worker		endif()
907*1c60b9acSAndroid Build Coastguard Worker	endif()
908*1c60b9acSAndroid Build Coastguard Worker	message("sqlite3 include dir: ${SQLITE3_INCLUDE_DIRS}")
909*1c60b9acSAndroid Build Coastguard Worker	message("sqlite3 libraries: ${SQLITE3_LIBRARIES}")
910*1c60b9acSAndroid Build Coastguard Worker	include_directories("${SQLITE3_INCLUDE_DIRS}")
911*1c60b9acSAndroid Build Coastguard Worker	list(APPEND LIB_LIST ${SQLITE3_LIBRARIES})
912*1c60b9acSAndroid Build Coastguard Workerendif()
913*1c60b9acSAndroid Build Coastguard Worker
914*1c60b9acSAndroid Build Coastguard Worker
915*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_HUBBUB)
916*1c60b9acSAndroid Build Coastguard Worker	find_library(LIBHUBBUB_LIBRARIES NAMES hubbub)
917*1c60b9acSAndroid Build Coastguard Worker	list(APPEND LIB_LIST ${LIBHUBBUB_LIBRARIES} )
918*1c60b9acSAndroid Build Coastguard Workerendif()
919*1c60b9acSAndroid Build Coastguard Worker
920*1c60b9acSAndroid Build Coastguard Workerif (LWS_HAVE_LIBCAP)
921*1c60b9acSAndroid Build Coastguard Worker	find_library(LIBCAP_LIBRARIES NAMES cap)
922*1c60b9acSAndroid Build Coastguard Worker	list(APPEND LIB_LIST ${LIBCAP_LIBRARIES} )
923*1c60b9acSAndroid Build Coastguard Workerendif()
924*1c60b9acSAndroid Build Coastguard Worker
925*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_PLUGINS_BUILTIN)
926*1c60b9acSAndroid Build Coastguard Worker	add_subdirectory(plugins)
927*1c60b9acSAndroid Build Coastguard Workerendif()
928*1c60b9acSAndroid Build Coastguard Worker
929*1c60b9acSAndroid Build Coastguard Worker
930*1c60b9acSAndroid Build Coastguard Worker#
931*1c60b9acSAndroid Build Coastguard Worker# Append the "at end" pieces to the lib list
932*1c60b9acSAndroid Build Coastguard Worker#
933*1c60b9acSAndroid Build Coastguard Workerlist(APPEND LIB_LIST ${LIB_LIST_AT_END})
934*1c60b9acSAndroid Build Coastguard Worker
935*1c60b9acSAndroid Build Coastguard Worker#
936*1c60b9acSAndroid Build Coastguard Worker# Second-level CMakeLists
937*1c60b9acSAndroid Build Coastguard Worker#
938*1c60b9acSAndroid Build Coastguard Worker
939*1c60b9acSAndroid Build Coastguard Workerinclude_directories("${PROJECT_SOURCE_DIR}/lib")
940*1c60b9acSAndroid Build Coastguard Worker
941*1c60b9acSAndroid Build Coastguard Workeradd_subdirectory(lib)
942*1c60b9acSAndroid Build Coastguard Worker
943*1c60b9acSAndroid Build Coastguard Worker
944*1c60b9acSAndroid Build Coastguard Workerif(WIN32 AND NOT CYGWIN)
945*1c60b9acSAndroid Build Coastguard Worker  set(DEF_INSTALL_CMAKE_DIR cmake)
946*1c60b9acSAndroid Build Coastguard Workerelse()
947*1c60b9acSAndroid Build Coastguard Worker  set(DEF_INSTALL_CMAKE_DIR lib${LIB_SUFFIX}/cmake/libwebsockets)
948*1c60b9acSAndroid Build Coastguard Workerendif()
949*1c60b9acSAndroid Build Coastguard Worker
950*1c60b9acSAndroid Build Coastguard Workerconfigure_file(${PROJECT_SOURCE_DIR}/cmake/LwsCheckRequirements.cmake
951*1c60b9acSAndroid Build Coastguard Worker		${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/LwsCheckRequirements.cmake
952*1c60b9acSAndroid Build Coastguard Worker		@ONLY)
953*1c60b9acSAndroid Build Coastguard Worker
954*1c60b9acSAndroid Build Coastguard Workerconfigure_file(${PROJECT_SOURCE_DIR}/cmake/LwsCheckRequirements.cmake
955*1c60b9acSAndroid Build Coastguard Worker		${PROJECT_BINARY_DIR}/LwsCheckRequirements.cmake
956*1c60b9acSAndroid Build Coastguard Worker		@ONLY)
957*1c60b9acSAndroid Build Coastguard Worker
958*1c60b9acSAndroid Build Coastguard Worker# Generate version info for both build-tree and install-tree.
959*1c60b9acSAndroid Build Coastguard Workerconfigure_file(${PROJECT_SOURCE_DIR}/cmake/libwebsockets-config-version.cmake.in
960*1c60b9acSAndroid Build Coastguard Worker                ${PROJECT_BINARY_DIR}/libwebsockets-config-version.cmake
961*1c60b9acSAndroid Build Coastguard Worker                @ONLY)
962*1c60b9acSAndroid Build Coastguard Worker
963*1c60b9acSAndroid Build Coastguard Worker# Generate the config file for the build-tree.
964*1c60b9acSAndroid Build Coastguard Workerset(LWS__INCLUDE_DIRS
965*1c60b9acSAndroid Build Coastguard Worker    "${PROJECT_SOURCE_DIR}/lib"
966*1c60b9acSAndroid Build Coastguard Worker    "${PROJECT_BINARY_DIR}")
967*1c60b9acSAndroid Build Coastguard Workerset(LIBWEBSOCKETS_INCLUDE_DIRS ${LWS__INCLUDE_DIRS} CACHE PATH "Libwebsockets include directories")
968*1c60b9acSAndroid Build Coastguard Workerconfigure_file(${PROJECT_SOURCE_DIR}/cmake/libwebsockets-config.cmake.in
969*1c60b9acSAndroid Build Coastguard Worker                ${PROJECT_BINARY_DIR}/libwebsockets-config.cmake
970*1c60b9acSAndroid Build Coastguard Worker                @ONLY)
971*1c60b9acSAndroid Build Coastguard Workerset(LWS_INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files")
972*1c60b9acSAndroid Build Coastguard Worker
973*1c60b9acSAndroid Build Coastguard Worker# Export targets (This is used for other CMake projects to easily find the libraries and include files).
974*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_EXPORT_LWSTARGETS)
975*1c60b9acSAndroid Build Coastguard Worker    export(TARGETS ${LWS_LIBRARIES}
976*1c60b9acSAndroid Build Coastguard Worker            FILE "${PROJECT_BINARY_DIR}/LibwebsocketsTargets.cmake")
977*1c60b9acSAndroid Build Coastguard Workerendif()
978*1c60b9acSAndroid Build Coastguard Worker
979*1c60b9acSAndroid Build Coastguard Worker
980*1c60b9acSAndroid Build Coastguard Worker
981*1c60b9acSAndroid Build Coastguard Workerset(libwebsockets_DIR ${PROJECT_BINARY_DIR})
982*1c60b9acSAndroid Build Coastguard Workerset(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
983*1c60b9acSAndroid Build Coastguard Workermessage("DIR ${libwebsockets_DIR} CMP ${CMAKE_MODULE_PATH}")
984*1c60b9acSAndroid Build Coastguard Worker
985*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_MINIMAL_EXAMPLES)
986*1c60b9acSAndroid Build Coastguard Worker	add_subdirectory(minimal-examples)
987*1c60b9acSAndroid Build Coastguard Workerendif()
988*1c60b9acSAndroid Build Coastguard Worker
989*1c60b9acSAndroid Build Coastguard Workerif (NOT LWS_WITHOUT_TESTAPPS)
990*1c60b9acSAndroid Build Coastguard Worker	add_subdirectory(test-apps)
991*1c60b9acSAndroid Build Coastguard Workerendif()
992*1c60b9acSAndroid Build Coastguard Worker
993*1c60b9acSAndroid Build Coastguard Workerif (NOT LWS_WITH_PLUGINS_BUILTIN)
994*1c60b9acSAndroid Build Coastguard Workeradd_subdirectory(plugins)
995*1c60b9acSAndroid Build Coastguard Workerendif()
996*1c60b9acSAndroid Build Coastguard Workeradd_subdirectory(lwsws)
997*1c60b9acSAndroid Build Coastguard Worker
998*1c60b9acSAndroid Build Coastguard Worker# Generate the lws_config.h that includes all the public compilation settings.
999*1c60b9acSAndroid Build Coastguard Workerconfigure_file(
1000*1c60b9acSAndroid Build Coastguard Worker       "${PROJECT_SOURCE_DIR}/cmake/lws_config.h.in"
1001*1c60b9acSAndroid Build Coastguard Worker       "${PROJECT_BINARY_DIR}/lws_config.h")
1002*1c60b9acSAndroid Build Coastguard Worker
1003*1c60b9acSAndroid Build Coastguard Workeradd_custom_command(
1004*1c60b9acSAndroid Build Coastguard Worker		OUTPUT ${PROJECT_BINARY_DIR}/include/lws_config.h
1005*1c60b9acSAndroid Build Coastguard Worker			${PROJECT_BINARY_DIR}/include/libwebsockets
1006*1c60b9acSAndroid Build Coastguard Worker			${PROJECT_BINARY_DIR}/include/libwebsockets.h
1007*1c60b9acSAndroid Build Coastguard Worker		COMMENT "Creating build include dir"
1008*1c60b9acSAndroid Build Coastguard Worker		COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/include/libwebsockets.h
1009*1c60b9acSAndroid Build Coastguard Worker     			${CMAKE_CURRENT_BINARY_DIR}/include/libwebsockets.h
1010*1c60b9acSAndroid Build Coastguard Worker		COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/include/libwebsockets/
1011*1c60b9acSAndroid Build Coastguard Worker			${CMAKE_CURRENT_BINARY_DIR}/include/libwebsockets
1012*1c60b9acSAndroid Build Coastguard Worker		COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/lws_config.h
1013*1c60b9acSAndroid Build Coastguard Worker     			${CMAKE_CURRENT_BINARY_DIR}/include/lws_config.h
1014*1c60b9acSAndroid Build Coastguard Worker		MAIN_DEPENDENCY ${PROJECT_BINARY_DIR}/lws_config.h
1015*1c60b9acSAndroid Build Coastguard Worker)
1016*1c60b9acSAndroid Build Coastguard Worker
1017*1c60b9acSAndroid Build Coastguard Workeradd_custom_target(GENHDR DEPENDS  ${PROJECT_BINARY_DIR}/include/lws_config.h)
1018*1c60b9acSAndroid Build Coastguard Worker
1019*1c60b9acSAndroid Build Coastguard Workerfile(GLOB HDR_PUBLIC1 RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} include/libwebsockets/*.h)
1020*1c60b9acSAndroid Build Coastguard Workerfile(GLOB HDR_PUBLIC2 RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} include/libwebsockets.h)
1021*1c60b9acSAndroid Build Coastguard Workerfile(GLOB HDR_PUBLIC3 RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/include/lws_config.h)
1022*1c60b9acSAndroid Build Coastguard Workerlist(APPEND HDR_PUBLIC ${HDR_PUBLIC1} ${HDR_PUBLIC2} ${HDR_PUBLIC3})
1023*1c60b9acSAndroid Build Coastguard Worker
1024*1c60b9acSAndroid Build Coastguard Workerset_source_files_properties(${HDR_PUBLIC} PROPERTIES GENERATED 1)
1025*1c60b9acSAndroid Build Coastguard Worker
1026*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_STATIC)
1027*1c60b9acSAndroid Build Coastguard Worker	add_dependencies(websockets GENHDR)
1028*1c60b9acSAndroid Build Coastguard Workerendif()
1029*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_SHARED)
1030*1c60b9acSAndroid Build Coastguard Worker	add_dependencies(websockets_shared GENHDR)
1031*1c60b9acSAndroid Build Coastguard Workerendif()
1032*1c60b9acSAndroid Build Coastguard Worker
1033*1c60b9acSAndroid Build Coastguard Worker
1034*1c60b9acSAndroid Build Coastguard Worker
1035*1c60b9acSAndroid Build Coastguard Worker#
1036*1c60b9acSAndroid Build Coastguard Worker#
1037*1c60b9acSAndroid Build Coastguard Worker# Installation preparations.
1038*1c60b9acSAndroid Build Coastguard Worker#
1039*1c60b9acSAndroid Build Coastguard Worker
1040*1c60b9acSAndroid Build Coastguard Workerexport(PACKAGE libwebsockets)
1041*1c60b9acSAndroid Build Coastguard Worker
1042*1c60b9acSAndroid Build Coastguard Workerinstall(DIRECTORY include/libwebsockets
1043*1c60b9acSAndroid Build Coastguard Worker	DESTINATION "${LWS_INSTALL_INCLUDE_DIR}" COMPONENT dev)
1044*1c60b9acSAndroid Build Coastguard Workerinstall(FILES ${PROJECT_BINARY_DIR}/include/libwebsockets.h ${PROJECT_BINARY_DIR}/include/lws_config.h
1045*1c60b9acSAndroid Build Coastguard Worker	DESTINATION "${LWS_INSTALL_INCLUDE_DIR}" COMPONENT dev)
1046*1c60b9acSAndroid Build Coastguard Worker
1047*1c60b9acSAndroid Build Coastguard Worker# Generate the config file for the installation tree.
1048*1c60b9acSAndroid Build Coastguard Workerget_filename_component(LWS_ABSOLUTE_INSTALL_CMAKE_DIR ${LWS_INSTALL_CMAKE_DIR} ABSOLUTE)
1049*1c60b9acSAndroid Build Coastguard Workerget_filename_component(LWS_ABSOLUTE_INSTALL_INCLUDE_DIR ${LWS_INSTALL_INCLUDE_DIR} ABSOLUTE)
1050*1c60b9acSAndroid Build Coastguard Workerfile(RELATIVE_PATH
1051*1c60b9acSAndroid Build Coastguard Worker    REL_INCLUDE_DIR
1052*1c60b9acSAndroid Build Coastguard Worker    "${LWS_ABSOLUTE_INSTALL_CMAKE_DIR}"
1053*1c60b9acSAndroid Build Coastguard Worker    "${LWS_ABSOLUTE_INSTALL_INCLUDE_DIR}") # Calculate the relative directory from the cmake dir.
1054*1c60b9acSAndroid Build Coastguard Worker
1055*1c60b9acSAndroid Build Coastguard Workerif (DEFINED REL_INCLUDE_DIR)
1056*1c60b9acSAndroid Build Coastguard Worker    set(LWS__INCLUDE_DIRS "\${LWS_CMAKE_DIR}/${REL_INCLUDE_DIR}")
1057*1c60b9acSAndroid Build Coastguard Workerendif()
1058*1c60b9acSAndroid Build Coastguard Workerif (DEFINED OPENSSL_INCLUDE_DIRS)
1059*1c60b9acSAndroid Build Coastguard Worker	set(LWS__INCLUDE_DIRS "${LWS__INCLUDE_DIRS};${OPENSSL_INCLUDE_DIRS}")
1060*1c60b9acSAndroid Build Coastguard Workerendif()
1061*1c60b9acSAndroid Build Coastguard Worker
1062*1c60b9acSAndroid Build Coastguard Workerconfigure_file(${PROJECT_SOURCE_DIR}/cmake/libwebsockets-config.cmake.in
1063*1c60b9acSAndroid Build Coastguard Worker                ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libwebsockets-config.cmake
1064*1c60b9acSAndroid Build Coastguard Worker                @ONLY)
1065*1c60b9acSAndroid Build Coastguard Worker
1066*1c60b9acSAndroid Build Coastguard Workerset_target_properties(${LWS_LIBRARIES}
1067*1c60b9acSAndroid Build Coastguard Worker		PROPERTIES PUBLIC_HEADER "${HDR_PUBLIC}")
1068*1c60b9acSAndroid Build Coastguard Worker
1069*1c60b9acSAndroid Build Coastguard Worker# Install the LibwebsocketsConfig.cmake and LibwebsocketsConfigVersion.cmake
1070*1c60b9acSAndroid Build Coastguard Workerinstall(FILES
1071*1c60b9acSAndroid Build Coastguard Worker               "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libwebsockets-config.cmake"
1072*1c60b9acSAndroid Build Coastguard Worker               "${PROJECT_BINARY_DIR}/libwebsockets-config-version.cmake"
1073*1c60b9acSAndroid Build Coastguard Worker               "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/LwsCheckRequirements.cmake"
1074*1c60b9acSAndroid Build Coastguard Worker               DESTINATION "${LWS_INSTALL_CMAKE_DIR}" COMPONENT dev)
1075*1c60b9acSAndroid Build Coastguard Worker
1076*1c60b9acSAndroid Build Coastguard Worker# Install exports for the install-tree.
1077*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_EXPORT_LWSTARGETS)
1078*1c60b9acSAndroid Build Coastguard Worker    install(EXPORT LibwebsocketsTargets
1079*1c60b9acSAndroid Build Coastguard Worker            DESTINATION "${LWS_INSTALL_CMAKE_DIR}" COMPONENT dev)
1080*1c60b9acSAndroid Build Coastguard Workerendif()
1081*1c60b9acSAndroid Build Coastguard Worker
1082*1c60b9acSAndroid Build Coastguard Worker# build subdir is not part of sources
1083*1c60b9acSAndroid Build Coastguard Workerset(CPACK_SOURCE_IGNORE_FILES $(CPACK_SOURCE_IGNORE_FILES) "/.git/" "/build/" "\\\\.tgz$" "\\\\.tar\\\\.gz$")
1084*1c60b9acSAndroid Build Coastguard Worker
1085*1c60b9acSAndroid Build Coastguard Worker# Most people are more used to "make dist" compared to "make package_source"
1086*1c60b9acSAndroid Build Coastguard Workeradd_custom_target(dist COMMAND "${CMAKE_MAKE_PROGRAM}" package_source)
1087*1c60b9acSAndroid Build Coastguard Worker
1088*1c60b9acSAndroid Build Coastguard Worker
1089*1c60b9acSAndroid Build Coastguard Worker
1090*1c60b9acSAndroid Build Coastguard Worker# This must always be last!
1091*1c60b9acSAndroid Build Coastguard Workerinclude(CPack)
1092