# # libwebsockets - small server side websockets and web server implementation # # Copyright (C) 2010 - 2021 Andy Green # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. # include_directories(.) if (DEFINED LIB_LIST_AT_END) link_libraries(${LIB_LIST_AT_END}) endif() if ((LWS_WITH_PLUGINS AND LWS_WITH_SHARED) OR LWS_WITH_PLUGINS_BUILTIN) # # Either build the plugins as separate dynamic libs (LWS_WITH_PLUGINS) # or build into the main lws library (LWS_WITH_PLUGINS_BUILTIN) # macro(create_plugin PLUGIN_NAME PLUGIN_INCLUDE MAIN_SRC S2 S3) if (NOT LWS_WITH_PLUGINS_BUILTIN) set(PLUGIN_SRCS ${MAIN_SRC}) if ("${S2}" STREQUAL "") else() list(APPEND PLUGIN_SRCS ${S2}) endif() if ("${S3}" STREQUAL "") else() list(APPEND PLUGIN_SRCS ${S3}) endif() if (WIN32) list(APPEND PLUGIN_SRCS ${WIN32_HELPERS_PATH}/getopt.c ${WIN32_HELPERS_PATH}/getopt_long.c ${WIN32_HELPERS_PATH}/gettimeofday.c ) list(APPEND PLUGIN_HDR ${WIN32_HELPERS_PATH}/getopt.h ${WIN32_HELPERS_PATH}/gettimeofday.h ) endif(WIN32) source_group("Headers Private" FILES ${PLUGIN_HDR}) source_group("Sources" FILES ${PLUGIN_SRCS}) add_library(${PLUGIN_NAME} SHARED ${PLUGIN_SRCS} ${PLUGIN_HDR}) target_link_libraries(${PLUGIN_NAME} websockets_shared) add_dependencies(${PLUGIN_NAME} websockets_shared) # doesn't work inside macro :-O # target_compile_definitions(${PLUGIN_NAME} PRIVATE LWS_BUILDING_SHARED) target_include_directories(${PLUGIN_NAME} PRIVATE ${PLUGIN_INCLUDE} ${LWS_LIB_BUILD_INC_PATHS}) set_property(TARGET ${PLUGIN_NAME} PROPERTY COMPILE_DEFINITIONS INSTALL_DATADIR="${CMAKE_INSTALL_PREFIX}/plugins" ) set(CMAKE_POSITION_INDEPENDENT_CODE ON) list(APPEND PLUGINS_LIST ${PLUGIN_NAME}) else() # let's just build the things into the lib message("Building in plugin ${PLUGIN_NAME}") if ("${PLUGIN_INCLUDE}" STREQUAL "") else() list(APPEND LWS_LIB_BUILD_INC_PATHS ../plugins/${PLUGIN_INCLUDE}) endif() if ("${MAIN_SRC}" STREQUAL "") else() foreach(A ${MAIN_SRC}) list(APPEND SOURCES ../plugins/${A}) endforeach() endif() if ("${S2}" STREQUAL "") else() foreach(A ${S2}) list(APPEND SOURCES ../plugins/${A}) endforeach() endif() if ("${S3}" STREQUAL "") else() foreach(A ${S3}) list(APPEND SOURCES ../plugins/${A}) endforeach() endif() endif(NOT LWS_WITH_PLUGINS_BUILTIN) endmacro() if (LWS_ROLE_WS) create_plugin(protocol_dumb_increment "" "protocol_dumb_increment.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_dumb_increment PRIVATE LWS_BUILDING_SHARED) endif() create_plugin(protocol_lws_mirror "" "protocol_lws_mirror.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_mirror PRIVATE LWS_BUILDING_SHARED) endif() create_plugin(protocol_lws_status "" "protocol_lws_status.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_status PRIVATE LWS_BUILDING_SHARED) endif() if (NOT WIN32) create_plugin(protocol_lws_raw_test "" "protocol_lws_raw_test.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_raw_test PRIVATE LWS_BUILDING_SHARED) endif() if (UNIX AND LWS_HAVE_PTHREAD_H) create_plugin(protocol_deaddrop "" "deaddrop/protocol_lws_deaddrop.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_deaddrop PRIVATE LWS_BUILDING_SHARED) endif() endif() endif() if (LWS_WITH_SYS_METRICS) create_plugin(protocol_lws_openmetrics_export "" "protocol_lws_openmetrics_export.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_openmetrics_export PRIVATE LWS_BUILDING_SHARED) endif() endif() if (NOT LWS_WITHOUT_CLIENT) create_plugin(protocol_client_loopback_test "" "protocol_client_loopback_test.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_client_loopback_test PRIVATE LWS_BUILDING_SHARED) endif() endif() endif(LWS_ROLE_WS) create_plugin(protocol_post_demo "" "protocol_post_demo.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_post_demo PRIVATE LWS_BUILDING_SHARED) endif() if (LWS_ROLE_RAW_PROXY) create_plugin(protocol_lws_raw_proxy "" "raw-proxy/protocol_lws_raw_proxy.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_raw_proxy PRIVATE LWS_BUILDING_SHARED) endif() endif() if (LWS_WITH_FTS) create_plugin(protocol_fulltext_demo "" "protocol_fulltext_demo.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_fulltext_demo PRIVATE LWS_BUILDING_SHARED) endif() endif() if (LWS_WITH_SSL) create_plugin(protocol_lws_ssh_base "ssh-base/include" "ssh-base/sshd.c;ssh-base/telnet.c;ssh-base/kex-25519.c" "ssh-base/crypto/chacha.c;ssh-base/crypto/ed25519.c;ssh-base/crypto/fe25519.c;ssh-base/crypto/ge25519.c;ssh-base/crypto/poly1305.c;ssh-base/crypto/sc25519.c;ssh-base/crypto/smult_curve25519_ref.c" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_ssh_base PRIVATE LWS_BUILDING_SHARED) endif() create_plugin(protocol_lws_sshd_demo "ssh-base/include" "protocol_lws_sshd_demo.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_sshd_demo PRIVATE LWS_BUILDING_SHARED) endif() include_directories("${PROJECT_SOURCE_DIR}/plugins/ssh-base/include") endif() if (LWS_WITH_ACME) create_plugin(protocol_lws_acme_client "" "acme-client/protocol_lws_acme_client.c" "" "") if (NOT LWS_WITH_PLUGINS_BUILTIN) target_compile_definitions(protocol_lws_acme_client PRIVATE LWS_BUILDING_SHARED) endif() endif() endif((LWS_WITH_PLUGINS AND LWS_WITH_SHARED) OR LWS_WITH_PLUGINS_BUILTIN) # plugins if (LWS_WITH_PLUGINS AND NOT LWS_WITH_PLUGINS_BUILTIN) install(TARGETS ${PLUGINS_LIST} PERMISSIONS OWNER_WRITE OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE OWNER_READ GROUP_READ WORLD_READ DESTINATION share/libwebsockets-test-server/plugins COMPONENT plugins) if (NOT WIN32) install(FILES deaddrop/assets/index.html;deaddrop/assets/deaddrop.js;deaddrop/assets/deaddrop.css;deaddrop/assets/drop.svg DESTINATION share/libwebsockets-test-server/deaddrop COMPONENT plugins) endif() endif() export_to_parent_intermediate()