--- /dev/null
+cmake_minimum_required(VERSION 2.6)
+
+project(libwebsockets)
+
+set(PACKAGE "libwebsockets")
+set(PACKAGE_VERSION "1.1")
+set(PACKAGE_BUGREPORT "andy@warmcat.com")
+set(PACKAGE_NAME "${PACKAGE}")
+set(PACKAGE_STRING "${PACKAGE} ${PACKAGE_VERSION}")
+set(PACKAGE_TARNAME "${PACKAGE}")
+set(PACKAGE_URL "http://libwebsockets.org")
+set(VERSION "{PACKAGE_VERSION}")
+
+option(WITH_SSL "Include SSL support", ON)
+option(USE_INCLUDED_WIN32_ZLIB "Use the internal version of ZLib instead of searching the system" ON)
+option(USE_CYASSL "Use CyaSSL replacement for OpenSSL" OFF)
+option(WITH_BUILTIN_GETIFADDRS "Use BSD getifaddrs implementation from libwebsockets... default is your libc provides it" OFF)
+set(CYASSL_LIB ON CACHE STRING "")
+set(CYASSL_INCLUDE_DIRS ON CACHE STRING "")
+
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/")
+include_directories(${PROJECT_BINARY_DIR})
+
+include(CheckFunctionExists)
+include(CheckIncludeFile)
+include(CheckIncludeFiles)
+include(CheckLibraryExists)
+
+CHECK_FUNCTION_EXISTS(bzero HAVE_BZERO)
+CHECK_FUNCTION_EXISTS(fork HAVE_FORK)
+CHECK_FUNCTION_EXISTS(malloc HAVE_MALLOC)
+CHECK_FUNCTION_EXISTS(memset HAVE_MEMSET)
+CHECK_FUNCTION_EXISTS(realloc HAVE_REALLOC)
+CHECK_FUNCTION_EXISTS(socket HAVE_SOCKET)
+CHECK_FUNCTION_EXISTS(strerror HAVE_STRERROR)
+CHECK_FUNCTION_EXISTS(vfork HAVE_VFORK)
+CHECK_FUNCTION_EXISTS(getifaddrs HAVE_GETIFADDRS)
+
+CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
+CHECK_INCLUDE_FILE(fcntl.h HAVE_FCNTL_H)
+CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
+CHECK_INCLUDE_FILE(memory.h HAVE_MEMORY_H)
+CHECK_INCLUDE_FILE(netinet/in.h HAVE_NETINET_IN_H)
+CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
+CHECK_INCLUDE_FILE(stdlib.h HAVE_STDLIB_H)
+CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
+CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)
+CHECK_INCLUDE_FILE(sys/prctl.h HAVE_SYS_PRCTL_H)
+CHECK_INCLUDE_FILE(sys/socket.h HAVE_SYS_SOCKET_H)
+CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H)
+CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H)
+CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
+CHECK_INCLUDE_FILE(vfork.h HAVE_VFORK_H)
+CHECK_INCLUDE_FILE(zlib.h HAVE_ZLIB_H)
+
+# TODO: These can be tested if they actually work also...
+set(HAVE_WORKING_FORK HAVE_FORK)
+set(HAVE_WORKING_VFORK HAVE_VFORK)
+
+CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS)
+
+if (NOT HAVE_SYS_TYPES_H)
+ set(pid_t int)
+ set(size_t "unsigned int")
+endif()
+
+if (NOT HAVE_MALLOC)
+ set(malloc rpl_malloc)
+endif()
+
+if (NOT HAVE_REALLOC)
+ set(realloc rpl_realloc)
+endif()
+
+if (WITH_SSL)
+ set(LWS_OPENSSL_SUPPORT)
+endif()
+
+# Generate the config.h that includes all the compilation settings.
+configure_file(
+ ${PROJECT_SOURCE_DIR}/config.h.cmake
+ ${PROJECT_BINARY_DIR}/config.h)
+
+set(LIB_LIST)
+
+if (MSVC)
+ # Turn off stupid microsoft security warnings.
+ add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
+endif()
+
+if (WIN32)
+ # For windows, do not allow the compiler to use default target (Vista).
+ add_definitions(-D_WIN32_WINNT=0x0501)
+endif(WIN32)
+
+
+set(HDR_PRIVATE
+ lib/private-libwebsockets.h)
+
+set(HDR_PUBLIC
+ lib/extension-deflate-frame.h
+ lib/lib/extension-deflate-stream.h
+ lib/libwebsockets.h
+ )
+
+set(SOURCES
+ lib/base64-decode.c
+ lib/client.c
+ lib/client-handshake.c
+ lib/client-parser.c
+ lib/daemonize.c
+ lib/extension.c
+ lib/extension-defalte-frame.c
+ lib/extension-deflate-stream.c
+ lib/handshake.c
+ lib/libwebsockets.c
+ lib/minilex.c
+ lib/output.c
+ lib/parsers.c
+ lib/server.c
+ lib/server-handshake.c
+ lib/sha-1.c
+ )
+
+source_group("Headers Private" FILES ${HDR_PRIVATE})
+source_group("Headers Public" FILES ${HDR_PUBLIC})
+source_group("Sources" FILES ${SOURCES})
+
+if (UNIX)
+ if (!WITH_BUILTIN_GETIFADDRS)
+ list(APPEND HDR_PUBLIC lib/getifaddrs.h)
+ list(APPEND SOURCES lib/getifaddrs.c)
+ endif()
+endif()
+
+#
+# ZLIB.
+#
+if (WIN32 AND USE_INCLUDED_WIN32_ZLIB)
+ # Compile ZLib if needed.
+ if (USE_INCLUDED_WIN32_ZLIB)
+ set(WIN32_ZLIB_PATH "${PROJECT_SOURCE_DIR}/win32port/zlib")
+ set(ZLIB_SRCS
+ ${WIN32_ZLIB_PATH}/adler32.c
+ ${WIN32_ZLIB_PATH}/compress.c
+ ${WIN32_ZLIB_PATH}/crc32.c
+ ${WIN32_ZLIB_PATH}/deflate.c
+ ${WIN32_ZLIB_PATH}/gzclose.c
+ ${WIN32_ZLIB_PATH}/gzio.c
+ ${WIN32_ZLIB_PATH}/gzlib.c
+ ${WIN32_ZLIB_PATH}/gzread.c
+ ${WIN32_ZLIB_PATH}/gzwrite.c
+ ${WIN32_ZLIB_PATH}/infback.c
+ ${WIN32_ZLIB_PATH}/inffast.c
+ ${WIN32_ZLIB_PATH}/inflate.c
+ ${WIN32_ZLIB_PATH}/inftrees.c
+ ${WIN32_ZLIB_PATH}/trees.c
+ ${WIN32_ZLIB_PATH}/uncompr.c
+ ${WIN32_ZLIB_PATH}/zutil.c
+ )
+
+ # Create the library.
+ add_library(zlib STATIC ${ZLIB_SRCS})
+
+ # Set the same variables as find_package would.
+ set(${ZLIB_INCLUDE_DIRS} ${WIN32_ZLIB_PATH})
+ get_property(ZLIB_LIBRARIES TARGET zlib PROPERTY LOCATION)
+ set(ZLIB_FOUND 1)
+ endif()
+else()
+ find_package(zlib REQUIRED)
+endif()
+
+include_directories(${ZLIB_INCLUDE_DIRS})
+target_link_libraries(websockets ${ZLIB_LIBRARIES})
+
+#
+# OpenSSL
+#
+if (WITH_SSL)
+ if (USE_CYASSL)
+ # Use CyaSSL as OpenSSL replacement.
+ set(OPENSSL_LIBRARIES ${CYASSL_LIB})
+ set(OPENSSL_INCLUDE_DIRS ${CYASSL_INCLUDE_DIRS})
+ set(OPENSSL_FOUND 1)
+ else()
+ # TODO: Add support for STATIC also.
+ find_package(OpenSSL REQUIRED)
+ endif()
+endif()
+
+include_directories(${OPENSSL_INCLUDE_DIR})
+target_link_libraries(websockets ${OPENSSL_LIBRARIES})
+