1 cmake_minimum_required(VERSION 2.6)
5 set(PACKAGE "libwebsockets")
6 set(PACKAGE_VERSION "1.1")
7 set(PACKAGE_BUGREPORT "andy@warmcat.com")
8 set(PACKAGE_NAME "${PACKAGE}")
9 set(PACKAGE_STRING "${PACKAGE} ${PACKAGE_VERSION}")
10 set(PACKAGE_TARNAME "${PACKAGE}")
11 set(PACKAGE_URL "http://libwebsockets.org")
12 set(VERSION "{PACKAGE_VERSION}")
14 option(WITH_SSL "Include SSL support", ON)
15 option(USE_INCLUDED_WIN32_ZLIB "Use the internal version of ZLib instead of searching the system" ON)
16 option(USE_CYASSL "Use CyaSSL replacement for OpenSSL" OFF)
17 option(WITH_BUILTIN_GETIFADDRS "Use BSD getifaddrs implementation from libwebsockets... default is your libc provides it" OFF)
18 set(CYASSL_LIB ON CACHE STRING "")
19 set(CYASSL_INCLUDE_DIRS ON CACHE STRING "")
21 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/")
22 include_directories(${PROJECT_BINARY_DIR})
24 include(CheckFunctionExists)
25 include(CheckIncludeFile)
26 include(CheckIncludeFiles)
27 include(CheckLibraryExists)
29 CHECK_FUNCTION_EXISTS(bzero HAVE_BZERO)
30 CHECK_FUNCTION_EXISTS(fork HAVE_FORK)
31 CHECK_FUNCTION_EXISTS(malloc HAVE_MALLOC)
32 CHECK_FUNCTION_EXISTS(memset HAVE_MEMSET)
33 CHECK_FUNCTION_EXISTS(realloc HAVE_REALLOC)
34 CHECK_FUNCTION_EXISTS(socket HAVE_SOCKET)
35 CHECK_FUNCTION_EXISTS(strerror HAVE_STRERROR)
36 CHECK_FUNCTION_EXISTS(vfork HAVE_VFORK)
37 CHECK_FUNCTION_EXISTS(getifaddrs HAVE_GETIFADDRS)
39 CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
40 CHECK_INCLUDE_FILE(fcntl.h HAVE_FCNTL_H)
41 CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
42 CHECK_INCLUDE_FILE(memory.h HAVE_MEMORY_H)
43 CHECK_INCLUDE_FILE(netinet/in.h HAVE_NETINET_IN_H)
44 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
45 CHECK_INCLUDE_FILE(stdlib.h HAVE_STDLIB_H)
46 CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
47 CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)
48 CHECK_INCLUDE_FILE(sys/prctl.h HAVE_SYS_PRCTL_H)
49 CHECK_INCLUDE_FILE(sys/socket.h HAVE_SYS_SOCKET_H)
50 CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H)
51 CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H)
52 CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
53 CHECK_INCLUDE_FILE(vfork.h HAVE_VFORK_H)
54 CHECK_INCLUDE_FILE(zlib.h HAVE_ZLIB_H)
56 # TODO: These can be tested if they actually work also...
57 set(HAVE_WORKING_FORK HAVE_FORK)
58 set(HAVE_WORKING_VFORK HAVE_VFORK)
60 CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS)
62 if (NOT HAVE_SYS_TYPES_H)
64 set(size_t "unsigned int")
68 set(malloc rpl_malloc)
72 set(realloc rpl_realloc)
76 set(LWS_OPENSSL_SUPPORT)
79 # Generate the config.h that includes all the compilation settings.
81 ${PROJECT_SOURCE_DIR}/config.h.cmake
82 ${PROJECT_BINARY_DIR}/config.h)
87 # Turn off stupid microsoft security warnings.
88 add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
92 # For windows, do not allow the compiler to use default target (Vista).
93 add_definitions(-D_WIN32_WINNT=0x0501)
98 lib/private-libwebsockets.h)
101 lib/extension-deflate-frame.h
102 lib/lib/extension-deflate-stream.h
109 lib/client-handshake.c
113 lib/extension-defalte-frame.c
114 lib/extension-deflate-stream.c
121 lib/server-handshake.c
125 source_group("Headers Private" FILES ${HDR_PRIVATE})
126 source_group("Headers Public" FILES ${HDR_PUBLIC})
127 source_group("Sources" FILES ${SOURCES})
130 if (!WITH_BUILTIN_GETIFADDRS)
131 list(APPEND HDR_PUBLIC lib/getifaddrs.h)
132 list(APPEND SOURCES lib/getifaddrs.c)
139 if (WIN32 AND USE_INCLUDED_WIN32_ZLIB)
140 # Compile ZLib if needed.
141 if (USE_INCLUDED_WIN32_ZLIB)
142 set(WIN32_ZLIB_PATH "${PROJECT_SOURCE_DIR}/win32port/zlib")
144 ${WIN32_ZLIB_PATH}/adler32.c
145 ${WIN32_ZLIB_PATH}/compress.c
146 ${WIN32_ZLIB_PATH}/crc32.c
147 ${WIN32_ZLIB_PATH}/deflate.c
148 ${WIN32_ZLIB_PATH}/gzclose.c
149 ${WIN32_ZLIB_PATH}/gzio.c
150 ${WIN32_ZLIB_PATH}/gzlib.c
151 ${WIN32_ZLIB_PATH}/gzread.c
152 ${WIN32_ZLIB_PATH}/gzwrite.c
153 ${WIN32_ZLIB_PATH}/infback.c
154 ${WIN32_ZLIB_PATH}/inffast.c
155 ${WIN32_ZLIB_PATH}/inflate.c
156 ${WIN32_ZLIB_PATH}/inftrees.c
157 ${WIN32_ZLIB_PATH}/trees.c
158 ${WIN32_ZLIB_PATH}/uncompr.c
159 ${WIN32_ZLIB_PATH}/zutil.c
162 # Create the library.
163 add_library(zlib STATIC ${ZLIB_SRCS})
165 # Set the same variables as find_package would.
166 set(${ZLIB_INCLUDE_DIRS} ${WIN32_ZLIB_PATH})
167 get_property(ZLIB_LIBRARIES TARGET zlib PROPERTY LOCATION)
171 find_package(zlib REQUIRED)
174 include_directories(${ZLIB_INCLUDE_DIRS})
175 target_link_libraries(websockets ${ZLIB_LIBRARIES})
182 # Use CyaSSL as OpenSSL replacement.
183 set(OPENSSL_LIBRARIES ${CYASSL_LIB})
184 set(OPENSSL_INCLUDE_DIRS ${CYASSL_INCLUDE_DIRS})
187 # TODO: Add support for STATIC also.
188 find_package(OpenSSL REQUIRED)
192 include_directories(${OPENSSL_INCLUDE_DIR})
193 target_link_libraries(websockets ${OPENSSL_LIBRARIES})