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

In the case code is composed into a single process, but it isn't monolithic in the sense it's made up of modular "applications" that are written separate projects, provide a way for the "applications" to request a callback from the lws event loop thread context safely. From the callback the applications can set up their operations on the lws event loop and drop their own thread. Since it requires system-specific locking to be threadsafe, provide a non-threadsafe helper and then indirect the actual usage through a user-defined lws_system ops function pointer that wraps the unsafe api with the system locking to make it safe.
91 lines
2.4 KiB
CMake
91 lines
2.4 KiB
CMake
cmake_minimum_required(VERSION 2.8)
|
|
include(CheckIncludeFile)
|
|
include(CheckCSourceCompiles)
|
|
|
|
Project(lws-minimal-http-client-attach)
|
|
set(SAMP lws-minimal-http-client-attach)
|
|
set(SRCS minimal-http-client-attach.c)
|
|
|
|
MACRO(require_pthreads result)
|
|
CHECK_INCLUDE_FILE(pthread.h LWS_HAVE_PTHREAD_H)
|
|
if (NOT LWS_HAVE_PTHREAD_H)
|
|
if (LWS_WITH_MINIMAL_EXAMPLES)
|
|
set(result 0)
|
|
else()
|
|
message(FATAL_ERROR "threading support requires pthreads")
|
|
endif()
|
|
endif()
|
|
ENDMACRO()
|
|
|
|
# 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_pthreads(requirements)
|
|
require_lws_config(LWS_ROLE_H1 1 requirements)
|
|
require_lws_config(LWS_WITH_CLIENT 1 requirements)
|
|
|
|
if (requirements)
|
|
add_executable(${SAMP} ${SRCS})
|
|
|
|
if (websockets_shared)
|
|
target_link_libraries(${SAMP} websockets_shared pthread)
|
|
add_dependencies(${SAMP} websockets_shared)
|
|
else()
|
|
target_link_libraries(${SAMP} websockets pthread)
|
|
endif()
|
|
endif()
|