Skip to content

Commit c9cf315

Browse files
committed
plugins_builtin
1 parent 4a81dce commit c9cf315

3 files changed

Lines changed: 39 additions & 7 deletions

File tree

CMakeLists.txt

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,8 @@ if (CMAKE_TOOLCHAIN_FILE)
586586
endif()
587587

588588
if (WIN32)
589+
message(STATUS "LWS_BUILTIN_PLUGIN_NAMES: ${LWS_BUILTIN_PLUGIN_NAMES}")
590+
message(STATUS "CONFIG_SCOPE: ${LWS_BUILTIN_PLUGIN_NAMES}")
589591
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/win32port/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/win32port/version.rc @ONLY)
590592
set(RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/win32port/version.rc)
591593
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/win32port/win32helpers")
@@ -1194,6 +1196,27 @@ endif()
11941196

11951197
if (LWS_WITH_PLUGINS_BUILTIN)
11961198
add_subdirectory(plugins)
1199+
1200+
set(PLUGIN_EXTERNS "")
1201+
set(PLUGIN_PTRS "")
1202+
foreach(PLUGIN ${LWS_BUILTIN_PLUGIN_NAMES})
1203+
string(REGEX MATCH "^[^_-]+[-_](.*)$" MATCHED "${PLUGIN}")
1204+
set(PLUGIN_STRUCT_NAME ${CMAKE_MATCH_1})
1205+
string(APPEND PLUGIN_EXTERNS "extern const lws_plugin_protocol_t ${PLUGIN_STRUCT_NAME};\n")
1206+
string(APPEND PLUGIN_PTRS " &${PLUGIN_STRUCT_NAME},\n")
1207+
endforeach()
1208+
1209+
set(PLUGIN_BUILTIN_C_CONTENT "
1210+
/* Generated by CMake */
1211+
#include <libwebsockets.h>
1212+
${PLUGIN_EXTERNS}
1213+
const lws_plugin_protocol_t *builtin_pcols[] = {
1214+
${PLUGIN_PTRS}
1215+
NULL
1216+
};
1217+
")
1218+
file(WRITE "${PROJECT_BINARY_DIR}/lws_builtin_plugin_pcols.c" "${PLUGIN_BUILTIN_C_CONTENT}")
1219+
list(APPEND SOURCES "${PROJECT_BINARY_DIR}/lws_builtin_plugin_pcols.c")
11971220
endif()
11981221

11991222

@@ -1216,15 +1239,21 @@ else()
12161239
set(DEF_INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/libwebsockets)
12171240
endif()
12181241

1242+
message(STATUS "LWS_BUILTIN_PLUGIN_NAMES: ${LWS_BUILTIN_PLUGIN_NAMES}")
1243+
message(STATUS "CONFIG_SCOPE: ${LWS_BUILTIN_PLUGIN_NAMES}")
12191244
configure_file(${PROJECT_SOURCE_DIR}/cmake/LwsCheckRequirements.cmake
12201245
${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/LwsCheckRequirements.cmake
12211246
@ONLY)
12221247

1248+
message(STATUS "LWS_BUILTIN_PLUGIN_NAMES: ${LWS_BUILTIN_PLUGIN_NAMES}")
1249+
message(STATUS "CONFIG_SCOPE: ${LWS_BUILTIN_PLUGIN_NAMES}")
12231250
configure_file(${PROJECT_SOURCE_DIR}/cmake/LwsCheckRequirements.cmake
12241251
${PROJECT_BINARY_DIR}/LwsCheckRequirements.cmake
12251252
@ONLY)
12261253

12271254
# Generate version info for both build-tree and install-tree.
1255+
message(STATUS "LWS_BUILTIN_PLUGIN_NAMES: ${LWS_BUILTIN_PLUGIN_NAMES}")
1256+
message(STATUS "CONFIG_SCOPE: ${LWS_BUILTIN_PLUGIN_NAMES}")
12281257
configure_file(${PROJECT_SOURCE_DIR}/cmake/libwebsockets-config-version.cmake.in
12291258
${PROJECT_BINARY_DIR}/libwebsockets-config-version.cmake
12301259
@ONLY)
@@ -1234,6 +1263,8 @@ set(LWS__INCLUDE_DIRS
12341263
"${PROJECT_SOURCE_DIR}/lib"
12351264
"${PROJECT_BINARY_DIR}")
12361265
set(LIBWEBSOCKETS_INCLUDE_DIRS ${LWS__INCLUDE_DIRS} CACHE PATH "Libwebsockets include directories")
1266+
message(STATUS "LWS_BUILTIN_PLUGIN_NAMES: ${LWS_BUILTIN_PLUGIN_NAMES}")
1267+
message(STATUS "CONFIG_SCOPE: ${LWS_BUILTIN_PLUGIN_NAMES}")
12371268
configure_file(${PROJECT_SOURCE_DIR}/cmake/libwebsockets-config.cmake.in
12381269
${PROJECT_BINARY_DIR}/libwebsockets-config.cmake
12391270
@ONLY)
@@ -1275,6 +1306,8 @@ if (LWS_WITH_MCUFONT_ENCODER)
12751306
endif()
12761307

12771308
# Generate the lws_config.h that includes all the public compilation settings.
1309+
message(STATUS "LWS_BUILTIN_PLUGIN_NAMES: ${LWS_BUILTIN_PLUGIN_NAMES}")
1310+
message(STATUS "CONFIG_SCOPE: ${LWS_BUILTIN_PLUGIN_NAMES}")
12781311
configure_file(
12791312
"${PROJECT_SOURCE_DIR}/cmake/lws_config.h.in"
12801313
"${PROJECT_BINARY_DIR}/lws_config.h")
@@ -1344,7 +1377,7 @@ file(RELATIVE_PATH
13441377
"${LWS_ABSOLUTE_INSTALL_INCLUDE_DIR}") # Calculate the relative directory from the cmake dir.
13451378

13461379
if (DEFINED REL_INCLUDE_DIR)
1347-
set(LWS__INCLUDE_DIRS "\${LWS_CMAKE_DIR}/${REL_INCLUDE_DIR}")
1380+
set(LWS__INCLUDE_DIRS "${LWS_CMAKE_DIR}/${REL_INCLUDE_DIR}")
13481381
endif()
13491382

13501383
set(STRIPPED_LIB_LIST_AT_END "")
@@ -1359,6 +1392,8 @@ foreach(lib_path IN LISTS LIB_LIST_AT_END)
13591392
endforeach()
13601393
set(LIB_LIST_AT_END ${STRIPPED_LIB_LIST_AT_END})
13611394

1395+
message(STATUS "LWS_BUILTIN_PLUGIN_NAMES: ${LWS_BUILTIN_PLUGIN_NAMES}")
1396+
message(STATUS "CONFIG_SCOPE: ${LWS_BUILTIN_PLUGIN_NAMES}")
13621397
configure_file(${PROJECT_SOURCE_DIR}/cmake/libwebsockets-config.cmake.in
13631398
${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libwebsockets-config.cmake
13641399
@ONLY)

lib/misc/dir.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -367,19 +367,15 @@ lws_plugin_alloc(struct lws_plugin **pplugin)
367367

368368
#if defined(LWS_BUILTIN_PLUGIN_NAMES)
369369

370-
extern lws_plugin_protocol_t lws_sshd_demo, lws_ssh_base;
371-
372-
lws_plugin_protocol_t *builtin_pcols[] = {
373-
&lws_sshd_demo, &lws_ssh_base
374-
};
370+
extern const lws_plugin_protocol_t *builtin_pcols[];
375371

376372
int
377373
lws_plugins_handle_builtin(struct lws_plugin **pplugin,
378374
each_plugin_cb_t each, void *each_user)
379375
{
380376
size_t n = 0;
381377

382-
while (n < LWS_ARRAY_SIZE(builtin_pcols)) {
378+
while (builtin_pcols[n]) {
383379
struct lws_plugin *pin = lws_plugin_alloc(pplugin);
384380
if (!pin)
385381
return 1;

plugins/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,3 +210,4 @@ if (LWS_WITH_PLUGINS AND NOT LWS_WITH_PLUGINS_BUILTIN)
210210
endif()
211211

212212
export_to_parent_intermediate()
213+
set(LWS_BUILTIN_PLUGIN_NAMES ${LWS_BUILTIN_PLUGIN_NAMES} PARENT_SCOPE)

0 commit comments

Comments
 (0)