Started redoing CMake support based on the up to date repos
authorJoakim Soderberg <joakim.soderberg@gmail.com>
Fri, 1 Feb 2013 13:52:53 +0000 (14:52 +0100)
committerAndy Green <andy.green@linaro.org>
Wed, 6 Feb 2013 06:49:12 +0000 (15:49 +0900)
CMakeLists.txt [new file with mode: 0644]

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..3d6b293
--- /dev/null
@@ -0,0 +1,194 @@
+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})
+