mirror of
https://github.com/warmcat/libwebsockets.git
synced 2025-03-16 00:00:07 +01:00

Building the examples may face the same situations as building lws with the same dependencies, bring over the same CMakeLists.txt approach
141 lines
4.7 KiB
CMake
141 lines
4.7 KiB
CMake
project(lws-minimal-http-server-eventlib-foreign)
|
|
cmake_minimum_required(VERSION 2.8)
|
|
include(CheckCSourceCompiles)
|
|
|
|
set(SAMP lws-minimal-http-server-eventlib-foreign)
|
|
set(SRCS minimal-http-server-eventlib-foreign.c)
|
|
|
|
|
|
# If we are being built as part of lws, confirm current build config supports
|
|
# reqconfig, else skip building ourselves.
|
|
#
|
|
# If we are being built externally, confirm installed lws was configured to
|
|
# support reqconfig, else error out with a helpful message about the problem.
|
|
#
|
|
MACRO(require_lws_config reqconfig _val result)
|
|
|
|
if (DEFINED ${reqconfig})
|
|
if (${reqconfig})
|
|
set (rq 1)
|
|
else()
|
|
set (rq 0)
|
|
endif()
|
|
else()
|
|
set(rq 0)
|
|
endif()
|
|
|
|
if (${_val} EQUAL ${rq})
|
|
set(SAME 1)
|
|
else()
|
|
set(SAME 0)
|
|
endif()
|
|
|
|
if (LWS_WITH_MINIMAL_EXAMPLES AND NOT ${SAME})
|
|
if (${_val})
|
|
message("${SAMP}: skipping as lws being built without ${reqconfig}")
|
|
else()
|
|
message("${SAMP}: skipping as lws built with ${reqconfig}")
|
|
endif()
|
|
set(${result} 0)
|
|
else()
|
|
if (LWS_WITH_MINIMAL_EXAMPLES)
|
|
set(MET ${SAME})
|
|
else()
|
|
CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(${reqconfig})\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" HAS_${reqconfig})
|
|
if (NOT DEFINED HAS_${reqconfig} OR NOT HAS_${reqconfig})
|
|
set(HAS_${reqconfig} 0)
|
|
else()
|
|
set(HAS_${reqconfig} 1)
|
|
endif()
|
|
if ((HAS_${reqconfig} AND ${_val}) OR (NOT HAS_${reqconfig} AND NOT ${_val}))
|
|
set(MET 1)
|
|
else()
|
|
set(MET 0)
|
|
endif()
|
|
endif()
|
|
if (NOT MET)
|
|
if (${_val})
|
|
message(FATAL_ERROR "This project requires lws must have been configured with ${reqconfig}")
|
|
else()
|
|
message(FATAL_ERROR "Lws configuration of ${reqconfig} is incompatible with this project")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
ENDMACRO()
|
|
|
|
set(requirements 1)
|
|
require_lws_config(LWS_ROLE_H1 1 requirements)
|
|
require_lws_config(LWS_WITH_SERVER 1 requirements)
|
|
|
|
|
|
|
|
CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(LWS_WITH_LIBUV)\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" LWS_WITH_LIBUV)
|
|
CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(LWS_WITH_LIBEVENT)\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" LWS_WITH_LIBEVENT)
|
|
CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(LWS_WITH_LIBEV)\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" LWS_WITH_LIBEV)
|
|
CHECK_C_SOURCE_COMPILES("#include <libwebsockets.h>\nint main(void) {\n#if defined(LWS_WITH_GLIB)\n return 0;\n#else\n fail;\n#endif\n return 0;\n}\n" LWS_WITH_GLIB)
|
|
|
|
|
|
if (LWS_WITH_LIBUV)
|
|
find_path(LIBUV_INCLUDE_DIRS NAMES uv.h)
|
|
find_library(LIBUV_LIBRARIES NAMES uv)
|
|
message("libuv include dir: ${LIBUV_INCLUDE_DIRS}")
|
|
message("libuv libraries: ${LIBUV_LIBRARIES}")
|
|
include_directories("${LIBUV_INCLUDE_DIRS}")
|
|
set(extralibs ${extralibs} ${LIBUV_LIBRARIES})
|
|
endif()
|
|
if (LWS_WITH_LIBEVENT)
|
|
find_path(LIBEVENT_INCLUDE_DIRS NAMES event2/event.h)
|
|
find_library(LIBEVENT_LIBRARIES NAMES event)
|
|
message("libevent include dir: ${LIBEVENT_INCLUDE_DIRS}")
|
|
message("libevent libraries: ${LIBEVENT_LIBRARIES}")
|
|
include_directories("${LIBEVENT_INCLUDE_DIRS}")
|
|
set(extralibs ${extralibs} ${LIBEVENT_LIBRARIES})
|
|
endif()
|
|
if (LWS_WITH_LIBEV)
|
|
find_path(LIBEV_INCLUDE_DIRS NAMES ev.h)
|
|
find_library(LIBEV_LIBRARIES NAMES ev)
|
|
message("libev include dir: ${LIBEV_INCLUDE_DIRS}")
|
|
message("libev libraries: ${LIBEV_LIBRARIES}")
|
|
include_directories("${LIBEV_INCLUDE_DIRS}")
|
|
set(extralibs ${extralibs} ${LIBEV_LIBRARIES})
|
|
endif()
|
|
if (LWS_WITH_GLIB)
|
|
set(LWS_GLIB_INCLUDE_DIRS CACHE PATH "Path to the glib include directory")
|
|
set(LWS_GLIB_LIBRARIES CACHE PATH "Path to the glib library")
|
|
include (FindPkgConfig)
|
|
if (NOT GLIB_FOUND)
|
|
find_path(GLIB_INCLUDE_DIRS NAMES glib-2.0/glib.h)
|
|
find_library(GLIB_LIBRARIES NAMES glib-2.0)
|
|
if(GLIB_INCLUDE_DIRS AND GLIB_LIBRARIES)
|
|
set(GLIB_FOUND 1)
|
|
endif()
|
|
if (GLIB_INCLUDE_DIRS)
|
|
set(GLIB_INCLUDE_DIRS "${GLIB_INCLUDE_DIRS}/glib-2.0")
|
|
endif()
|
|
endif()
|
|
PKG_SEARCH_MODULE(LWS_GLIB2 glib-2.0)
|
|
if (LWS_GLIB2_FOUND)
|
|
list(APPEND GLIB_INCLUDE_DIRS "${LWS_GLIB2_INCLUDE_DIRS}")
|
|
endif()
|
|
message("glib include dir: ${GLIB_INCLUDE_DIRS}")
|
|
message("glib libraries: ${GLIB_LIBRARIES}")
|
|
include_directories("${GLIB_INCLUDE_DIRS}")
|
|
set(extralibs ${extralibs} ${GLIB_LIBRARIES})
|
|
endif()
|
|
|
|
message("Extra libs: ${extralibs}")
|
|
|
|
if (NOT LWS_WITH_LIBUV AND NOT LWS_WITH_LIBEVENT AND NOT LWS_WITH_LIBEV AND NOT LWS_WITH_GLIB)
|
|
set(requirements 0)
|
|
endif()
|
|
|
|
if (requirements)
|
|
add_executable(${SAMP} ${SRCS})
|
|
|
|
if (websockets_shared)
|
|
target_link_libraries(${SAMP} websockets_shared ${extralibs})
|
|
add_dependencies(${SAMP} websockets_shared)
|
|
else()
|
|
target_link_libraries(${SAMP} websockets ${extralibs})
|
|
endif()
|
|
endif()
|