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})