Started redoing CMake support based on the up to date repos
[profile/ivi/libwebsockets.git] / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.6)
2
3 project(libwebsockets)
4
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}")
13
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 "")
20
21 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/")
22 include_directories(${PROJECT_BINARY_DIR})
23
24 include(CheckFunctionExists)
25 include(CheckIncludeFile)
26 include(CheckIncludeFiles)
27 include(CheckLibraryExists)
28
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)
38
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)
55
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)
59
60 CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS)
61
62 if (NOT HAVE_SYS_TYPES_H)
63         set(pid_t int)
64         set(size_t "unsigned int")
65 endif()
66
67 if (NOT HAVE_MALLOC)
68         set(malloc rpl_malloc)
69 endif()
70
71 if (NOT HAVE_REALLOC)
72         set(realloc rpl_realloc)
73 endif()
74
75 if (WITH_SSL)
76         set(LWS_OPENSSL_SUPPORT)
77 endif()
78
79 # Generate the config.h that includes all the compilation settings.
80 configure_file(
81                 ${PROJECT_SOURCE_DIR}/config.h.cmake 
82                 ${PROJECT_BINARY_DIR}/config.h)
83
84 set(LIB_LIST)
85
86 if (MSVC)
87         # Turn off stupid microsoft security warnings.
88         add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
89 endif()
90
91 if (WIN32)
92         # For windows, do not allow the compiler to use default target (Vista).
93         add_definitions(-D_WIN32_WINNT=0x0501)
94 endif(WIN32)
95
96
97 set(HDR_PRIVATE
98         lib/private-libwebsockets.h)
99
100 set(HDR_PUBLIC
101         lib/extension-deflate-frame.h
102         lib/lib/extension-deflate-stream.h
103         lib/libwebsockets.h
104         )
105
106 set(SOURCES
107         lib/base64-decode.c
108         lib/client.c
109         lib/client-handshake.c
110         lib/client-parser.c
111         lib/daemonize.c
112         lib/extension.c
113         lib/extension-defalte-frame.c
114         lib/extension-deflate-stream.c
115         lib/handshake.c
116         lib/libwebsockets.c
117         lib/minilex.c
118         lib/output.c
119         lib/parsers.c
120         lib/server.c
121         lib/server-handshake.c
122         lib/sha-1.c
123         )
124
125 source_group("Headers Private"  FILES ${HDR_PRIVATE})
126 source_group("Headers Public"   FILES ${HDR_PUBLIC})
127 source_group("Sources"          FILES ${SOURCES})
128
129 if (UNIX)
130         if (!WITH_BUILTIN_GETIFADDRS)
131                 list(APPEND HDR_PUBLIC lib/getifaddrs.h)
132                 list(APPEND SOURCES lib/getifaddrs.c)
133         endif()
134 endif()
135
136 #
137 # ZLIB.
138 #
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")
143                 set(ZLIB_SRCS
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
160                 )
161
162                 # Create the library.
163                 add_library(zlib STATIC ${ZLIB_SRCS})
164
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)
168                 set(ZLIB_FOUND 1)
169         endif()
170 else()
171         find_package(zlib REQUIRED)
172 endif()
173
174 include_directories(${ZLIB_INCLUDE_DIRS})
175 target_link_libraries(websockets ${ZLIB_LIBRARIES})
176
177 #
178 # OpenSSL
179 #
180 if (WITH_SSL)
181         if (USE_CYASSL)
182                 # Use CyaSSL as OpenSSL replacement.
183                 set(OPENSSL_LIBRARIES ${CYASSL_LIB})
184                 set(OPENSSL_INCLUDE_DIRS ${CYASSL_INCLUDE_DIRS})
185                 set(OPENSSL_FOUND 1)
186         else()
187                 # TODO: Add support for STATIC also.
188                 find_package(OpenSSL REQUIRED)
189         endif()
190 endif()
191
192 include_directories(${OPENSSL_INCLUDE_DIR})
193 target_link_libraries(websockets ${OPENSSL_LIBRARIES})
194