diff options
Diffstat (limited to 'src/fluent-bit/lib/monkey/plugins/CMakeLists.txt')
-rw-r--r-- | src/fluent-bit/lib/monkey/plugins/CMakeLists.txt | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/src/fluent-bit/lib/monkey/plugins/CMakeLists.txt b/src/fluent-bit/lib/monkey/plugins/CMakeLists.txt new file mode 100644 index 000000000..a78d83695 --- /dev/null +++ b/src/fluent-bit/lib/monkey/plugins/CMakeLists.txt @@ -0,0 +1,111 @@ +set(static_plugins "" CACHE INTERNAL "static_plugins") +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + +# CHECK_STATIC_PLUGIN: Check if a plugin will be linked statically +macro(CHECK_STATIC_PLUGIN name) + string(REPLACE "," ";" plugins ${MK_STATIC_PLUGINS}) + list(FIND plugins ${name} found) + if(NOT found EQUAL -1) + set(IS_STATIC TRUE) + else() + set(IS_STATIC FALSE) + endif() +endmacro() + +# MONKEY_PLUGIN: Used by plugins to register and create the targets +macro(MONKEY_PLUGIN name src) + CHECK_STATIC_PLUGIN(${name}) + if(IS_STATIC) + add_library(monkey-${name}-static STATIC ${src}) + set_target_properties(monkey-${name}-static PROPERTIES OUTPUT_NAME monkey-${name}) + set_target_properties(monkey-${name}-static PROPERTIES PREFIX "") + else() + if(APPLE) + add_library(monkey-${name}-shared MODULE ${src}) + else() + add_library(monkey-${name}-shared SHARED ${src}) + endif() + set_target_properties(monkey-${name}-shared PROPERTIES OUTPUT_NAME monkey-${name}) + set_target_properties(monkey-${name}-shared PROPERTIES PREFIX "") + + if(NOT MK_LOCAL) + if(CMAKE_INSTALL_LIBDIR) + install(TARGETS monkey-${name}-shared LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + else() + install(TARGETS monkey-${name}-shared LIBRARY DESTINATION lib) + endif() + endif() + endif() +endmacro() + +# MK_BUILD_PLUGIN: This macro determinate if the plugin is enabled through the +# option MK_PLUGIN_NAME defined on the root CMakeLists.txt +macro(MK_BUILD_PLUGIN name) + set(mode "") + string(TOUPPER ${name} NAME) + + # Check if the plugin is enabled + set(option MK_PLUGIN_${NAME}) + if(${option}) + add_subdirectory(${name}) + + # Is this a static plugin ? + CHECK_STATIC_PLUGIN(${name}) + if(IS_STATIC) + # Let Monkey and CMake aware about this is a static plugin. A static plugin + # requires a different handling: link the object and register the plugin + # struct reference on mk_static_plugins.h + set(static_plugins "${static_plugins}monkey-${name}-static;") + set(STATIC_PLUGINS_INIT "${STATIC_PLUGINS_INIT}\n mk_static_plugin_attach(plugins, &mk_plugin_${name});\n") + set(STATIC_PLUGINS_DECL "${STATIC_PLUGINS_DECL}extern struct mk_plugin mk_plugin_${name};\n") + + # append message to stdout + set(mode "[== static ==]") + else() + if(MK_LOCAL) + set(MK_LOAD_PLUGINS "${MK_LOAD_PLUGINS} # Load ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/monkey-${name}.so\n") + else() + set(MK_LOAD_PLUGINS "${MK_LOAD_PLUGINS} # Load ${CMAKE_INSTALL_FULL_LIBDIR}/monkey-${name}.so\n") + endif() + endif() + message(STATUS "Plugin ${name} enabled ${mode}") + endif() +endmacro() + + +macro(MONKEY_PLUGIN_LINK_LIB target lib) + CHECK_STATIC_PLUGIN(${target}) + if(IS_STATIC) + target_link_libraries(monkey-${target}-static ${lib}) + else() + target_link_libraries(monkey-${target}-shared ${lib}) + endif() +endmacro() + +# Try to configure/build all plugins +MK_BUILD_PLUGIN("auth") +MK_BUILD_PLUGIN("cgi") +MK_BUILD_PLUGIN("cheetah") +MK_BUILD_PLUGIN("dirlisting") +MK_BUILD_PLUGIN("fastcgi") +MK_BUILD_PLUGIN("liana") +MK_BUILD_PLUGIN("logger") +MK_BUILD_PLUGIN("mandril") +MK_BUILD_PLUGIN("tls") +MK_BUILD_PLUGIN("duda") + +# Generate include/monkey/mk_static_plugins.h +configure_file( + "${PROJECT_SOURCE_DIR}/include/monkey/mk_static_plugins.h.in" + "${PROJECT_SOURCE_DIR}/include/monkey/mk_static_plugins.h" + ) + +# Generate conf/plugins.load +if(NOT MK_WITHOUT_CONF) + configure_file( + "${PROJECT_SOURCE_DIR}/conf/plugins.load.in" + "${PROJECT_BINARY_DIR}/conf/plugins.load" + ) +endif() + +set(STATIC_PLUGINS_LIBS "${static_plugins}" PARENT_SCOPE) |