xref: /aosp_15_r20/external/libwebsockets/lib/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 Workerinclude_directories(.)
26*1c60b9acSAndroid Build Coastguard Worker
27*1c60b9acSAndroid Build Coastguard Workermacro(add_subdir_include_dirs arg1)
28*1c60b9acSAndroid Build Coastguard Worker	add_subdirectory(${arg1})
29*1c60b9acSAndroid Build Coastguard Worker	list(APPEND LWS_LIB_BUILD_INC_PATHS ${_CMAKE_INC_LIST})
30*1c60b9acSAndroid Build Coastguard Workerendmacro()
31*1c60b9acSAndroid Build Coastguard Worker
32*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIB_INCLUDES "")
33*1c60b9acSAndroid Build Coastguard Worker
34*1c60b9acSAndroid Build Coastguard Worker#
35*1c60b9acSAndroid Build Coastguard Worker# Plat specific build items
36*1c60b9acSAndroid Build Coastguard Worker#
37*1c60b9acSAndroid Build Coastguard Worker
38*1c60b9acSAndroid Build Coastguard Workerif (LWS_PLAT_FREERTOS)
39*1c60b9acSAndroid Build Coastguard Worker	add_subdir_include_dirs(plat/freertos)
40*1c60b9acSAndroid Build Coastguard Worker	if (ESP_PLATFORM)
41*1c60b9acSAndroid Build Coastguard Worker		include_directories($ENV{IDF_PATH}/components/freertos/include
42*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/esp_hw_support/include/soc/
43*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/esp_common/include
44*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/esp_timer/include
45*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/soc/include
46*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/soc/src/esp32/include
47*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/lwip/port/esp32/include
48*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/lwip/lwip/src/include
49*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/lwip/port/esp32/include
50*1c60b9acSAndroid Build Coastguard Worker		    ${CMAKE_BINARY_DIR}/config
51*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/esp_rom/include
52*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/esp_system/include
53*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/lwip/include/apps/sntp
54*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/soc/soc/esp32/include
55*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/heap/include
56*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/mbedtls/mbedtls/include
57*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/mbedtls/port/include
58*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/esp_wifi/include
59*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/esp_event/include
60*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/esp_netif/include
61*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/esp_eth/include
62*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/driver/include
63*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/soc/soc/include
64*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/tcpip_adapter/include
65*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/lwip/include/apps
66*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/nvs_flash/include
67*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/esp32/include
68*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/spi_flash/include
69*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/mdns/include
70*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/lwip/lwip/src/include/lwip
71*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/lwip/lwip/src/include
72*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/lwip/lwip/src/include/lwip
73*1c60b9acSAndroid Build Coastguard Worker		    $ENV{IDF_PATH}/components/newlib/platform_include )
74*1c60b9acSAndroid Build Coastguard Worker	endif()
75*1c60b9acSAndroid Build Coastguard Worker
76*1c60b9acSAndroid Build Coastguard Workerelse()
77*1c60b9acSAndroid Build Coastguard Worker	if (LWS_PLAT_OPTEE)
78*1c60b9acSAndroid Build Coastguard Worker		add_subdir_include_dirs(plat/optee)
79*1c60b9acSAndroid Build Coastguard Worker	else()
80*1c60b9acSAndroid Build Coastguard Worker		if (WIN32)
81*1c60b9acSAndroid Build Coastguard Worker			add_subdir_include_dirs(plat/windows)
82*1c60b9acSAndroid Build Coastguard Worker		else()
83*1c60b9acSAndroid Build Coastguard Worker			add_subdir_include_dirs(plat/unix)
84*1c60b9acSAndroid Build Coastguard Worker		endif()
85*1c60b9acSAndroid Build Coastguard Worker	endif()
86*1c60b9acSAndroid Build Coastguard Workerendif()
87*1c60b9acSAndroid Build Coastguard Worker
88*1c60b9acSAndroid Build Coastguard Workerif (LIB_LIST)
89*1c60b9acSAndroid Build Coastguard Worker	set(CMAKE_REQUIRED_LIBRARIES ${LIB_LIST} ${CMAKE_REQUIRED_LIBRARIES})
90*1c60b9acSAndroid Build Coastguard Workerendif()
91*1c60b9acSAndroid Build Coastguard Worker
92*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_ZLIB)
93*1c60b9acSAndroid Build Coastguard Worker	if (LWS_WITH_BUNDLED_ZLIB)
94*1c60b9acSAndroid Build Coastguard Worker		if (WIN32)
95*1c60b9acSAndroid Build Coastguard Worker			# it's trying to delete internal zlib entry
96*1c60b9acSAndroid Build Coastguard Worker			LIST(REMOVE_AT CMAKE_REQUIRED_LIBRARIES 0 )
97*1c60b9acSAndroid Build Coastguard Worker		endif()
98*1c60b9acSAndroid Build Coastguard Worker	endif()
99*1c60b9acSAndroid Build Coastguard Workerendif()
100*1c60b9acSAndroid Build Coastguard Worker
101*1c60b9acSAndroid Build Coastguard Worker
102*1c60b9acSAndroid Build Coastguard Worker# ideally we want to use pipe2()
103*1c60b9acSAndroid Build Coastguard Worker
104*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES("
105*1c60b9acSAndroid Build Coastguard Worker	#ifndef _GNU_SOURCE
106*1c60b9acSAndroid Build Coastguard Worker	#define _GNU_SOURCE
107*1c60b9acSAndroid Build Coastguard Worker	#endif
108*1c60b9acSAndroid Build Coastguard Worker	#include <unistd.h>
109*1c60b9acSAndroid Build Coastguard Worker	int main(void) {
110*1c60b9acSAndroid Build Coastguard Worker		int fd[2];
111*1c60b9acSAndroid Build Coastguard Worker		return pipe2(fd, 0);
112*1c60b9acSAndroid Build Coastguard Worker	}" LWS_HAVE_PIPE2)
113*1c60b9acSAndroid Build Coastguard Worker
114*1c60b9acSAndroid Build Coastguard Worker# tcp keepalive needs this on linux to work practically... but it only exists
115*1c60b9acSAndroid Build Coastguard Worker# after kernel 2.6.37
116*1c60b9acSAndroid Build Coastguard Worker
117*1c60b9acSAndroid Build Coastguard WorkerCHECK_C_SOURCE_COMPILES("#include <netinet/tcp.h>\nint main(void) { return TCP_USER_TIMEOUT; }\n" LWS_HAVE_TCP_USER_TIMEOUT)
118*1c60b9acSAndroid Build Coastguard Workerset(LWS_PUBLIC_INCLUDES "")
119*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_TLS)
120*1c60b9acSAndroid Build Coastguard Worker	add_subdir_include_dirs(tls)
121*1c60b9acSAndroid Build Coastguard Workerendif()
122*1c60b9acSAndroid Build Coastguard Worker
123*1c60b9acSAndroid Build Coastguard Worker# Generate the lws_config.h that includes all the private compilation settings.
124*1c60b9acSAndroid Build Coastguard Workerconfigure_file(
125*1c60b9acSAndroid Build Coastguard Worker       "${PROJECT_SOURCE_DIR}/cmake/lws_config_private.h.in"
126*1c60b9acSAndroid Build Coastguard Worker       "${PROJECT_BINARY_DIR}/lws_config_private.h")
127*1c60b9acSAndroid Build Coastguard Worker
128*1c60b9acSAndroid Build Coastguard Workeradd_subdir_include_dirs(core)
129*1c60b9acSAndroid Build Coastguard Workeradd_subdir_include_dirs(misc)
130*1c60b9acSAndroid Build Coastguard Workeradd_subdir_include_dirs(system)
131*1c60b9acSAndroid Build Coastguard Worker
132*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_DRIVERS)
133*1c60b9acSAndroid Build Coastguard Worker	add_subdir_include_dirs(drivers)
134*1c60b9acSAndroid Build Coastguard Workerendif()
135*1c60b9acSAndroid Build Coastguard Worker
136*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_NETWORK)
137*1c60b9acSAndroid Build Coastguard Worker	add_subdir_include_dirs(core-net)
138*1c60b9acSAndroid Build Coastguard Worker	if (LWS_WITH_ABSTRACT)
139*1c60b9acSAndroid Build Coastguard Worker		add_subdir_include_dirs(abstract)
140*1c60b9acSAndroid Build Coastguard Worker	endif()
141*1c60b9acSAndroid Build Coastguard Worker	add_subdir_include_dirs(roles)
142*1c60b9acSAndroid Build Coastguard Workerendif()
143*1c60b9acSAndroid Build Coastguard Worker
144*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_JOSE)
145*1c60b9acSAndroid Build Coastguard Worker	add_subdir_include_dirs(jose)
146*1c60b9acSAndroid Build Coastguard Workerendif()
147*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_COSE)
148*1c60b9acSAndroid Build Coastguard Worker	add_subdir_include_dirs(cose)
149*1c60b9acSAndroid Build Coastguard Workerendif()
150*1c60b9acSAndroid Build Coastguard Worker
151*1c60b9acSAndroid Build Coastguard Worker
152*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_SECURE_STREAMS)
153*1c60b9acSAndroid Build Coastguard Worker	add_subdir_include_dirs(secure-streams)
154*1c60b9acSAndroid Build Coastguard Workerendif()
155*1c60b9acSAndroid Build Coastguard Worker
156*1c60b9acSAndroid Build Coastguard Workeradd_subdir_include_dirs(event-libs)
157*1c60b9acSAndroid Build Coastguard Worker
158*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_STATIC)
159*1c60b9acSAndroid Build Coastguard Worker    if (LWS_STATIC_PIC)
160*1c60b9acSAndroid Build Coastguard Worker        set(CMAKE_POSITION_INDEPENDENT_CODE ON)
161*1c60b9acSAndroid Build Coastguard Worker    endif()
162*1c60b9acSAndroid Build Coastguard Worker
163*1c60b9acSAndroid Build Coastguard Worker	add_library(websockets STATIC ${SOURCES})# ${HDR_PUBLIC})
164*1c60b9acSAndroid Build Coastguard Worker	set_target_properties(websockets PROPERTIES LINKER_LANGUAGE C)
165*1c60b9acSAndroid Build Coastguard Worker	list(APPEND LWS_LIBRARIES websockets)
166*1c60b9acSAndroid Build Coastguard Worker	target_include_directories(websockets INTERFACE
167*1c60b9acSAndroid Build Coastguard Worker		$<INSTALL_INTERFACE:${LWS_INSTALL_INCLUDE_DIR}>
168*1c60b9acSAndroid Build Coastguard Worker		$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
169*1c60b9acSAndroid Build Coastguard Worker		$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../include>
170*1c60b9acSAndroid Build Coastguard Worker	)
171*1c60b9acSAndroid Build Coastguard Worker	target_include_directories(websockets PRIVATE ${LWS_LIB_BUILD_INC_PATHS})
172*1c60b9acSAndroid Build Coastguard Worker	target_compile_definitions(websockets PRIVATE LWS_BUILDING_STATIC)
173*1c60b9acSAndroid Build Coastguard Worker	target_include_directories(websockets PUBLIC ${LWS_PUBLIC_INCLUDES})
174*1c60b9acSAndroid Build Coastguard Worker	set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE)
175*1c60b9acSAndroid Build Coastguard Worker
176*1c60b9acSAndroid Build Coastguard Worker	if (WIN32)
177*1c60b9acSAndroid Build Coastguard Worker		# Windows uses the same .lib ending for static libraries and shared
178*1c60b9acSAndroid Build Coastguard Worker		# library linker files, so rename the static library.
179*1c60b9acSAndroid Build Coastguard Worker		set_target_properties(websockets
180*1c60b9acSAndroid Build Coastguard Worker			PROPERTIES
181*1c60b9acSAndroid Build Coastguard Worker			OUTPUT_NAME websockets_static)
182*1c60b9acSAndroid Build Coastguard Worker	endif()
183*1c60b9acSAndroid Build Coastguard Worker
184*1c60b9acSAndroid Build Coastguard Workerendif()
185*1c60b9acSAndroid Build Coastguard Worker
186*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_SHARED)
187*1c60b9acSAndroid Build Coastguard Worker	if (NOT RESOURCES)
188*1c60b9acSAndroid Build Coastguard Worker		set(RESOURCES "")
189*1c60b9acSAndroid Build Coastguard Worker	endif()
190*1c60b9acSAndroid Build Coastguard Worker
191*1c60b9acSAndroid Build Coastguard Worker	add_library(websockets_shared SHARED ${SOURCES} ${RESOURCES})# ${HDR_PUBLIC})
192*1c60b9acSAndroid Build Coastguard Worker	set_target_properties(websockets_shared PROPERTIES LINKER_LANGUAGE C)
193*1c60b9acSAndroid Build Coastguard Worker	list(APPEND LWS_LIBRARIES websockets_shared)
194*1c60b9acSAndroid Build Coastguard Worker	target_include_directories(websockets_shared INTERFACE
195*1c60b9acSAndroid Build Coastguard Worker		$<INSTALL_INTERFACE:${LWS_INSTALL_INCLUDE_DIR}>
196*1c60b9acSAndroid Build Coastguard Worker		$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
197*1c60b9acSAndroid Build Coastguard Worker		$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../include>
198*1c60b9acSAndroid Build Coastguard Worker	)
199*1c60b9acSAndroid Build Coastguard Worker	target_include_directories(websockets_shared PRIVATE ${LWS_LIB_BUILD_INC_PATHS})
200*1c60b9acSAndroid Build Coastguard Worker	target_compile_definitions(websockets_shared PRIVATE LWS_BUILDING_SHARED)
201*1c60b9acSAndroid Build Coastguard Worker	target_include_directories(websockets_shared PUBLIC ${LWS_PUBLIC_INCLUDES})
202*1c60b9acSAndroid Build Coastguard Worker	set(LWS_PUBLIC_INCLUDES ${LWS_PUBLIC_INCLUDES} PARENT_SCOPE)
203*1c60b9acSAndroid Build Coastguard Worker
204*1c60b9acSAndroid Build Coastguard Worker	# We want the shared lib to be named "libwebsockets"
205*1c60b9acSAndroid Build Coastguard Worker	# not "libwebsocket_shared".
206*1c60b9acSAndroid Build Coastguard Worker	set_target_properties(websockets_shared
207*1c60b9acSAndroid Build Coastguard Worker		PROPERTIES
208*1c60b9acSAndroid Build Coastguard Worker		OUTPUT_NAME websockets)
209*1c60b9acSAndroid Build Coastguard Worker
210*1c60b9acSAndroid Build Coastguard Worker	if (WIN32)
211*1c60b9acSAndroid Build Coastguard Worker		# Compile as DLL (export function declarations)
212*1c60b9acSAndroid Build Coastguard Worker		set_property(
213*1c60b9acSAndroid Build Coastguard Worker			TARGET websockets_shared
214*1c60b9acSAndroid Build Coastguard Worker			PROPERTY COMPILE_DEFINITIONS
215*1c60b9acSAndroid Build Coastguard Worker			LWS_DLL
216*1c60b9acSAndroid Build Coastguard Worker			LWS_INTERNAL)
217*1c60b9acSAndroid Build Coastguard Worker	endif()
218*1c60b9acSAndroid Build Coastguard Worker
219*1c60b9acSAndroid Build Coastguard Worker	if (APPLE)
220*1c60b9acSAndroid Build Coastguard Worker		set_property(TARGET websockets_shared PROPERTY MACOSX_RPATH YES)
221*1c60b9acSAndroid Build Coastguard Worker	endif()
222*1c60b9acSAndroid Build Coastguard Worker
223*1c60b9acSAndroid Build Coastguard Worker	if (UNIX AND LWS_WITH_PLUGINS_API)
224*1c60b9acSAndroid Build Coastguard Worker		set (CMAKE_POSITION_INDEPENDENT_CODE ON)
225*1c60b9acSAndroid Build Coastguard Worker		if (NOT((${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") OR
226*1c60b9acSAndroid Build Coastguard Worker		   (${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD") OR
227*1c60b9acSAndroid Build Coastguard Worker		   (${CMAKE_SYSTEM_NAME} MATCHES "QNX")))
228*1c60b9acSAndroid Build Coastguard Worker		   if (LWS_WITH_SHARED)
229*1c60b9acSAndroid Build Coastguard Worker				target_link_libraries(websockets_shared dl)
230*1c60b9acSAndroid Build Coastguard Worker			endif()
231*1c60b9acSAndroid Build Coastguard Worker		endif()
232*1c60b9acSAndroid Build Coastguard Worker	endif()
233*1c60b9acSAndroid Build Coastguard Worker
234*1c60b9acSAndroid Build Coastguard Workerendif()
235*1c60b9acSAndroid Build Coastguard Worker
236*1c60b9acSAndroid Build Coastguard Worker#
237*1c60b9acSAndroid Build Coastguard Worker# expose the library private include dirs to plugins, test apps etc that are
238*1c60b9acSAndroid Build Coastguard Worker# part of the lib build but different targets
239*1c60b9acSAndroid Build Coastguard Worker#
240*1c60b9acSAndroid Build Coastguard Worker
241*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_SHARED)
242*1c60b9acSAndroid Build Coastguard Worker	get_target_property(LWS_LIB_INCLUDES websockets_shared INCLUDE_DIRECTORIES)
243*1c60b9acSAndroid Build Coastguard Workerelse()
244*1c60b9acSAndroid Build Coastguard Worker	get_target_property(LWS_LIB_INCLUDES websockets INCLUDE_DIRECTORIES)
245*1c60b9acSAndroid Build Coastguard Workerendif()
246*1c60b9acSAndroid Build Coastguard Worker
247*1c60b9acSAndroid Build Coastguard Worker
248*1c60b9acSAndroid Build Coastguard Worker# Set the so version of the lib.
249*1c60b9acSAndroid Build Coastguard Worker# Equivalent to LDFLAGS=-version-info x:x:x
250*1c60b9acSAndroid Build Coastguard Worker
251*1c60b9acSAndroid Build Coastguard Workerif (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR COMPILER_IS_CLANG)
252*1c60b9acSAndroid Build Coastguard Worker	foreach(lib ${LWS_LIBRARIES})
253*1c60b9acSAndroid Build Coastguard Worker		set_target_properties(${lib}
254*1c60b9acSAndroid Build Coastguard Worker			PROPERTIES
255*1c60b9acSAndroid Build Coastguard Worker			SOVERSION ${SOVERSION})
256*1c60b9acSAndroid Build Coastguard Worker	endforeach()
257*1c60b9acSAndroid Build Coastguard Workerendif()
258*1c60b9acSAndroid Build Coastguard Worker
259*1c60b9acSAndroid Build Coastguard Worker
260*1c60b9acSAndroid Build Coastguard Worker# Setup the linking for all libs.
261*1c60b9acSAndroid Build Coastguard Workerforeach (lib ${LWS_LIBRARIES})
262*1c60b9acSAndroid Build Coastguard Worker	target_link_libraries(${lib} ${LIB_LIST})
263*1c60b9acSAndroid Build Coastguard Workerendforeach()
264*1c60b9acSAndroid Build Coastguard Worker
265*1c60b9acSAndroid Build Coastguard Worker#
266*1c60b9acSAndroid Build Coastguard Worker# These will be available to parent projects including libwebsockets
267*1c60b9acSAndroid Build Coastguard Worker# using add_subdirectory()
268*1c60b9acSAndroid Build Coastguard Worker#
269*1c60b9acSAndroid Build Coastguard Workerset(LIBWEBSOCKETS_LIBRARIES ${LWS_LIBRARIES} CACHE STRING "Libwebsocket libraries")
270*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_STATIC)
271*1c60b9acSAndroid Build Coastguard Worker	set(LIBWEBSOCKETS_LIBRARIES_STATIC websockets CACHE STRING "Libwebsocket static library")
272*1c60b9acSAndroid Build Coastguard Workerendif()
273*1c60b9acSAndroid Build Coastguard Workerif (LWS_WITH_SHARED)
274*1c60b9acSAndroid Build Coastguard Worker	set(LIBWEBSOCKETS_LIBRARIES_SHARED websockets_shared CACHE STRING "Libwebsocket shared library")
275*1c60b9acSAndroid Build Coastguard Workerendif()
276*1c60b9acSAndroid Build Coastguard Worker
277*1c60b9acSAndroid Build Coastguard Worker# Install libs and headers.
278*1c60b9acSAndroid Build Coastguard Workerinstall(TARGETS ${LWS_LIBRARIES}
279*1c60b9acSAndroid Build Coastguard Worker		EXPORT LibwebsocketsTargets
280*1c60b9acSAndroid Build Coastguard Worker		LIBRARY DESTINATION "${LWS_INSTALL_LIB_DIR}${LIB_SUFFIX}" COMPONENT core
281*1c60b9acSAndroid Build Coastguard Worker		ARCHIVE DESTINATION "${LWS_INSTALL_LIB_DIR}${LIB_SUFFIX}" COMPONENT core
282*1c60b9acSAndroid Build Coastguard Worker		RUNTIME DESTINATION "${LWS_INSTALL_BIN_DIR}" COMPONENT core # Windows DLLs
283*1c60b9acSAndroid Build Coastguard Worker		PUBLIC_HEADER DESTINATION "${LWS_INSTALL_INCLUDE_DIR}" COMPONENT dev)
284*1c60b9acSAndroid Build Coastguard Worker
285*1c60b9acSAndroid Build Coastguard Worker	#set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries" PARENT_SCOPE)
286*1c60b9acSAndroid Build Coastguard Workerset(CPACK_COMPONENT_DEV_DISPLAY_NAME "Development files" PARENT_SCOPE)
287*1c60b9acSAndroid Build Coastguard Worker
288*1c60b9acSAndroid Build Coastguard Worker
289*1c60b9acSAndroid Build Coastguard Workerif (UNIX OR MINGW)
290*1c60b9acSAndroid Build Coastguard Worker
291*1c60b9acSAndroid Build Coastguard Worker# figure out pkfcfg required libs here
292*1c60b9acSAndroid Build Coastguard Worker
293*1c60b9acSAndroid Build Coastguard Workerset(lws_requires "")
294*1c60b9acSAndroid Build Coastguard Workerif (LWS_HAVE_LIBCAP)
295*1c60b9acSAndroid Build Coastguard Worker	if (NOT lws_requires STREQUAL "")
296*1c60b9acSAndroid Build Coastguard Worker		set(lws_requires "${lws_requires},libcap")
297*1c60b9acSAndroid Build Coastguard Worker	else()
298*1c60b9acSAndroid Build Coastguard Worker		set(lws_requires "libcap")
299*1c60b9acSAndroid Build Coastguard Worker	endif()
300*1c60b9acSAndroid Build Coastguard Workerendif()
301*1c60b9acSAndroid Build Coastguard Worker
302*1c60b9acSAndroid Build Coastguard Worker
303*1c60b9acSAndroid Build Coastguard Worker# Generate and install pkgconfig.
304*1c60b9acSAndroid Build Coastguard Worker# (This is not indented, because the tabs will be part of the output)
305*1c60b9acSAndroid Build Coastguard Workerfile(WRITE "${PROJECT_BINARY_DIR}/libwebsockets.pc"
306*1c60b9acSAndroid Build Coastguard Worker"prefix=\"${CMAKE_INSTALL_PREFIX}\"
307*1c60b9acSAndroid Build Coastguard Workerexec_prefix=\${prefix}
308*1c60b9acSAndroid Build Coastguard Workerlibdir=\${exec_prefix}/lib${LIB_SUFFIX}
309*1c60b9acSAndroid Build Coastguard Workerincludedir=\${prefix}/include
310*1c60b9acSAndroid Build Coastguard Worker
311*1c60b9acSAndroid Build Coastguard WorkerName: libwebsockets
312*1c60b9acSAndroid Build Coastguard WorkerDescription: Websockets server and client library
313*1c60b9acSAndroid Build Coastguard WorkerVersion: ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}
314*1c60b9acSAndroid Build Coastguard Worker
315*1c60b9acSAndroid Build Coastguard WorkerLibs: -L\${libdir} -lwebsockets
316*1c60b9acSAndroid Build Coastguard WorkerCflags: -I\${includedir}
317*1c60b9acSAndroid Build Coastguard Worker"
318*1c60b9acSAndroid Build Coastguard Worker)
319*1c60b9acSAndroid Build Coastguard Workerif (NOT ${lws_requires} STREQUAL "")
320*1c60b9acSAndroid Build Coastguard Worker        file(APPEND "${PROJECT_BINARY_DIR}/libwebsockets.pc" "Requires: ${lws_requires}")
321*1c60b9acSAndroid Build Coastguard Workerendif()
322*1c60b9acSAndroid Build Coastguard Worker
323*1c60b9acSAndroid Build Coastguard Worker
324*1c60b9acSAndroid Build Coastguard Worker	install(FILES "${PROJECT_BINARY_DIR}/libwebsockets.pc"
325*1c60b9acSAndroid Build Coastguard Worker		DESTINATION lib${LIB_SUFFIX}/pkgconfig)
326*1c60b9acSAndroid Build Coastguard Worker
327*1c60b9acSAndroid Build Coastguard Workerfile(WRITE "${PROJECT_BINARY_DIR}/libwebsockets_static.pc"
328*1c60b9acSAndroid Build Coastguard Worker"prefix=\"${CMAKE_INSTALL_PREFIX}\"
329*1c60b9acSAndroid Build Coastguard Workerexec_prefix=\${prefix}
330*1c60b9acSAndroid Build Coastguard Workerlibdir=\${exec_prefix}/lib${LIB_SUFFIX}
331*1c60b9acSAndroid Build Coastguard Workerincludedir=\${prefix}/include
332*1c60b9acSAndroid Build Coastguard Worker
333*1c60b9acSAndroid Build Coastguard WorkerName: libwebsockets_static
334*1c60b9acSAndroid Build Coastguard WorkerDescription: Websockets server and client static library
335*1c60b9acSAndroid Build Coastguard WorkerVersion: ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}
336*1c60b9acSAndroid Build Coastguard Worker
337*1c60b9acSAndroid Build Coastguard WorkerLibs: -L\${libdir} -lwebsockets_static
338*1c60b9acSAndroid Build Coastguard WorkerLibs.private:
339*1c60b9acSAndroid Build Coastguard WorkerCflags: -I\${includedir}
340*1c60b9acSAndroid Build Coastguard Worker"
341*1c60b9acSAndroid Build Coastguard Worker)
342*1c60b9acSAndroid Build Coastguard Worker
343*1c60b9acSAndroid Build Coastguard Workerif (NOT ${lws_requires} STREQUAL "")
344*1c60b9acSAndroid Build Coastguard Worker        file(APPEND "${PROJECT_BINARY_DIR}/libwebsockets_static.pc" "Requires: ${lws_requires}")
345*1c60b9acSAndroid Build Coastguard Workerendif()
346*1c60b9acSAndroid Build Coastguard Worker
347*1c60b9acSAndroid Build Coastguard Worker
348*1c60b9acSAndroid Build Coastguard Worker	install(FILES "${PROJECT_BINARY_DIR}/libwebsockets_static.pc"
349*1c60b9acSAndroid Build Coastguard Worker		DESTINATION lib${LIB_SUFFIX}/pkgconfig)
350*1c60b9acSAndroid Build Coastguard Worker
351*1c60b9acSAndroid Build Coastguard Workerendif(UNIX OR MINGW)
352*1c60b9acSAndroid Build Coastguard Worker
353*1c60b9acSAndroid Build Coastguard Worker
354*1c60b9acSAndroid Build Coastguard Worker# Keep explicit parent scope exports at end
355*1c60b9acSAndroid Build Coastguard Worker#
356*1c60b9acSAndroid Build Coastguard Worker
357*1c60b9acSAndroid Build Coastguard Workerexport_to_parent_intermediate()
358*1c60b9acSAndroid Build Coastguard Workerif (DEFINED LWS_PLAT_UNIX)
359*1c60b9acSAndroid Build Coastguard Worker	set(LWS_PLAT_UNIX ${LWS_PLAT_UNIX} PARENT_SCOPE)
360*1c60b9acSAndroid Build Coastguard Worker	if (ILLUMOS)
361*1c60b9acSAndroid Build Coastguard Worker		add_definitions("-D__illumos__")
362*1c60b9acSAndroid Build Coastguard Worker	endif()
363*1c60b9acSAndroid Build Coastguard Workerendif()
364*1c60b9acSAndroid Build Coastguard Workerset(LWS_HAVE_MBEDTLS_NET_SOCKETS ${LWS_HAVE_MBEDTLS_NET_SOCKETS} PARENT_SCOPE)
365*1c60b9acSAndroid Build Coastguard Workerset(TEST_SERVER_SSL_KEY "${TEST_SERVER_SSL_KEY}" PARENT_SCOPE)
366*1c60b9acSAndroid Build Coastguard Workerset(TEST_SERVER_SSL_CERT "${TEST_SERVER_SSL_CERT}" PARENT_SCOPE)
367*1c60b9acSAndroid Build Coastguard Workerset(TEST_SERVER_DATA ${TEST_SERVER_DATA} PARENT_SCOPE)
368*1c60b9acSAndroid Build Coastguard Workerset(LWS_HAVE_PIPE2 ${LWS_HAVE_PIPE2} PARENT_SCOPE)
369*1c60b9acSAndroid Build Coastguard Workerset(LWS_LIBRARIES ${LWS_LIBRARIES} PARENT_SCOPE)
370*1c60b9acSAndroid Build Coastguard Workerif (DEFINED WIN32_HELPERS_PATH)
371*1c60b9acSAndroid Build Coastguard Worker	set(WIN32_HELPERS_PATH ${WIN32_HELPERS_PATH} PARENT_SCOPE)
372*1c60b9acSAndroid Build Coastguard Workerendif()
373*1c60b9acSAndroid Build Coastguard Workerif (DEFINED HDR_PRIVATE)
374*1c60b9acSAndroid Build Coastguard Workerset(HDR_PRIVATE ${HDR_PRIVATE} PARENT_SCOPE)
375*1c60b9acSAndroid Build Coastguard Workerendif()
376*1c60b9acSAndroid Build Coastguard Workerif (DEFINED ZLIB_FOUND)
377*1c60b9acSAndroid Build Coastguard Worker	set(ZLIB_FOUND ${ZLIB_FOUND} PARENT_SCOPE)
378*1c60b9acSAndroid Build Coastguard Workerendif()
379*1c60b9acSAndroid Build Coastguard Workerif (DEFINED LIB_LIST_AT_END)
380*1c60b9acSAndroid Build Coastguard Workerset(LIB_LIST_AT_END ${LIB_LIST_AT_END} PARENT_SCOPE)
381*1c60b9acSAndroid Build Coastguard Workerendif()
382*1c60b9acSAndroid Build Coastguard Workerset(USE_WOLFSSL ${USE_WOLFSSL} PARENT_SCOPE)
383*1c60b9acSAndroid Build Coastguard Workerset(LWS_DEPS_LIB_PATHS ${LWS_DEPS_LIB_PATHS} PARENT_SCOPE)
384*1c60b9acSAndroid Build Coastguard Worker
385