This is an automated email from the ASF dual-hosted git repository. cmcfarlen pushed a commit to branch 10.0.x in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit 456c41433e2243fe510efa4356dd3c71ed906cac Author: JosiahWI <[email protected]> AuthorDate: Fri May 31 15:18:51 2024 -0500 Add auto options for all experimental plugins (#10967) * Add auto options for all experimental plugins Auto options were added for the experimental plugins with special dependencies in #10741. This adds options for the remaining experimental plugins. It was pointed out that WITH_SUBDIRECTORY is giving auto_options too many responsibilities and it will be removed. * Remove WITH_SUBDIRECTORY from auto_option (cherry picked from commit 1036e47eda5e4a395d51c3e54a290263a3fa2e81) --- CMakeLists.txt | 21 ++--- cmake/AutoOptionHelpers.cmake | 12 +-- cmake/ExperimentalPlugins.cmake | 72 +++++++++++------ plugins/CMakeLists.txt | 29 +++++-- plugins/experimental/CMakeLists.txt | 126 +++++++++++++++++++++-------- plugins/experimental/magick/CMakeLists.txt | 3 + 6 files changed, 176 insertions(+), 87 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6e621f760c..df518379a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -108,21 +108,8 @@ auto_option( "sys/prctl.h" ) auto_option(LUAJIT PACKAGE_DEPENDS luajit) -auto_option( - MAGICK - PACKAGE_DEPENDS - ImageMagick - COMPONENTS - Magick++ - MagickWand - MagickCore -) - auto_option(UNWIND FEATURE_VAR TS_USE_REMOTE_UNWINDING PACKAGE_DEPENDS unwind) -# This creates the magic import target if necessary (older cmake) -include(magick_target) - option(ENABLE_ASAN "Use address sanitizer (default OFF)") option(ENABLE_FUZZING "Enable fuzzing (default OFF)") option(ENABLE_FIPS "Enable fips compliance (default OFF)") @@ -655,10 +642,16 @@ endif() if(ENABLE_FUZZING) add_subdirectory(tests/fuzzing) endif() -add_subdirectory(plugins) # set up auto options for experimental plugins +# This must be done before setting up the stable plugins +# because they check whether the experimental plugins +# already found ImageMagick, but not the other way around. +# Doing these in the other order may add ImageMagick::Magick++ +# twice which is an error. include(ExperimentalPlugins) +# This also adds any experimental plugins that have been enabled. +add_subdirectory(plugins) add_subdirectory(configs) if(ENABLE_EXAMPLE) diff --git a/cmake/AutoOptionHelpers.cmake b/cmake/AutoOptionHelpers.cmake index 8af3e6d7ed..0bd52720a2 100644 --- a/cmake/AutoOptionHelpers.cmake +++ b/cmake/AutoOptionHelpers.cmake @@ -87,7 +87,6 @@ endmacro() # [DESCRIPTION <description>] # [DEFAULT <default>] # [FEATURE_VAR <feature_var>] -# [WITH_SUBDIRECTORY <name>] # [COMPONENT <component>] # [PACKAGE_DEPENDS <package_one> <package_two> ...] # [HEADER_DEPENDS <header_one> <header_two> ...] @@ -120,9 +119,6 @@ endmacro() # used, given the value of the option and whether the requirements for the # feature are satisfied. By default, it is USE_<feature_name>. # -# WITH_SUBDIRECTORY is an optional subdirectory that should be added if the -# feature is enabled. -# # COMPONENT check for a component of the package. Currently this only works if # specifying a single package in PACKAGE_DEPENDS # @@ -131,9 +127,7 @@ endmacro() # HEADER_DEPENDS is a list of headers that are required for the feature. # macro(auto_option _FEATURE_NAME) - cmake_parse_arguments( - ARG "" "DESCRIPTION;DEFAULT;FEATURE_VAR;WITH_SUBDIRECTORY" "PACKAGE_DEPENDS;HEADER_DEPENDS;COMPONENTS" ${ARGN} - ) + cmake_parse_arguments(ARG "" "DESCRIPTION;DEFAULT;FEATURE_VAR" "PACKAGE_DEPENDS;HEADER_DEPENDS;COMPONENTS" ${ARGN}) set(OPTION_VAR "ENABLE_${_FEATURE_NAME}") if(ARG_FEATURE_VAR) @@ -165,10 +159,6 @@ macro(auto_option _FEATURE_NAME) else() set(${FEATURE_VAR} FALSE) endif() - - if(ARG_WITH_SUBDIRECTORY AND ${${FEATURE_VAR}}) - add_subdirectory(${ARG_WITH_SUBDIRECTORY}) - endif() endmacro() # Prints a colorized summary of one auto option. diff --git a/cmake/ExperimentalPlugins.cmake b/cmake/ExperimentalPlugins.cmake index c96c69fb22..c555f34385 100644 --- a/cmake/ExperimentalPlugins.cmake +++ b/cmake/ExperimentalPlugins.cmake @@ -27,61 +27,87 @@ else() set(_DEFAULT OFF) endif() -include(add_atsplugin) - +auto_option(ACCESS_CONTROL FEATURE_VAR BUILD_ACCESS_CONTROL DEFAULT ${_DEFAULT}) +auto_option(BLOCK_ERRORS FEATURE_VAR BUILD_BLOCK_ERRORS DEFAULT ${_DEFAULT}) +auto_option(CACHE_FILL FEATURE_VAR BUILD_CACHE_FILL DEFAULT ${_DEFAULT}) +auto_option(CERT_REPORTING_TOOL FEATURE_VAR BUILD_CERT_REPORTING_TOOL DEFAULT ${_DEFAULT}) +auto_option(COOKIE_REMAP FEATURE_VAR BUILD_COOKIE_REMAP DEFAULT ${_DEFAULT}) +auto_option(CUSTOM_REDIRECT FEATURE_VAR BUILD_CUSTOM_REDIRECT DEFAULT ${_DEFAULT}) +auto_option(FQ_PACING FEATURE_VAR BUILD_FQ_PACING DEFAULT ${_DEFAULT}) +auto_option(GEOIP_ACL FEATURE_VAR BUILD_GEOIP_ACL DEFAULT ${_DEFAULT}) +auto_option(HEADER_FREQ FEATURE_VAR BUILD_HEADER_FREQ DEFAULT ${_DEFAULT}) +auto_option(HOOK_TRACE FEATURE_VAR BUILD_HOOK_TRACE DEFAULT ${_DEFAULT}) +auto_option(HTTP_STATS FEATURE_VAR BUILD_HTTP_STATS DEFAULT ${_DEFAULT}) +auto_option(ICAP FEATURE_VAR BUILD_ICAP DEFAULT ${_DEFAULT}) +auto_option(INLINER FEATURE_VAR BUILD_INLINER DEFAULT ${_DEFAULT}) +auto_option( + MAGICK + FEATURE_VAR + BUILD_MAGICK + PACKAGE_DEPENDS + ImageMagick + COMPONENTS + Magick++ + MagickWand + MagickCore + DEFAULT + ${_DEFAULT} +) auto_option( MAXMIND_ACL FEATURE_VAR BUILD_MAXMIND_ACL - WITH_SUBDIRECTORY - plugins/experimental/maxmind_acl PACKAGE_DEPENDS maxminddb DEFAULT ${_DEFAULT} ) +auto_option(MEMCACHE FEATURE_VAR BUILD_MEMCACHE DEFAULT ${_DEFAULT}) +auto_option(MEMORY_PROFILE FEATURE_VAR BUILD_MEMORY_PROFILE DEFAULT ${_DEFAULT}) +auto_option(MONEY_TRACE FEATURE_VAR BUILD_MONEY_TRACE DEFAULT ${_DEFAULT}) +auto_option(MP4 FEATURE_VAR BUILD_MP4 DEFAULT ${_DEFAULT}) +auto_option( + OTEL_TRACER + FEATURE_VAR + BUILD_OTEL_TRACER + PACKAGE_DEPENDS + opentelemetry + Protobuf + CURL + DEFAULT + ${_DEFAULT} +) +auto_option(RATE_LIMIT FEATURE_VAR BUILD_RATE_LIMIT DEFAULT ${_DEFAULT}) +auto_option(REDO_CACHE_LOOKUP FEATURE_VAR BUILD_REDO_CACHE_LOOKUP DEFAULT ${_DEFAULT}) +auto_option(SSLHEADERS FEATURE_VAR BUILD_SSLHEADERS DEFAULT ${_DEFAULT}) auto_option( STEK_SHARE FEATURE_VAR BUILD_STEK_SHARE - WITH_SUBDIRECTORY - plugins/experimental/stek_share PACKAGE_DEPENDS nuraft DEFAULT ${_DEFAULT} ) +auto_option(STREAM_EDITOR FEATURE_VAR BUILD_STREAM_EDITOR DEFAULT ${_DEFAULT}) +auto_option(SYSTEM_STATS FEATURE_VAR BUILD_SYSTEM_STATS DEFAULT ${_DEFAULT}) +auto_option(TLS_BRIDGE FEATURE_VAR BUILD_TLS_BRIDGE DEFAULT ${_DEFAULT}) +auto_option(TXN_BOX FEATURE_VAR BUILD_TXN_BOX DEFAULT ${_DEFAULT}) auto_option( URI_SIGNING FEATURE_VAR BUILD_URI_SIGNING - WITH_SUBDIRECTORY - plugins/experimental/uri_signing PACKAGE_DEPENDS cjose jansson DEFAULT ${_DEFAULT} ) -auto_option( - OTEL_TRACER - FEATURE_VAR - BUILD_OTEL_TRACER - WITH_SUBDIRECTORY - plugins/experimental/otel_tracer - PACKAGE_DEPENDS - opentelemetry - Protobuf - CURL - DEFAULT - ${_DEFAULT} -) +auto_option(URL_SIG FEATURE_VAR BUILD_URL_SIG DEFAULT ${_DEFAULT}) auto_option( WASM FEATURE_VAR BUILD_WASM - WITH_SUBDIRECTORY - plugins/experimental/wasm PACKAGE_DEPENDS wamr DEFAULT diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 4d0e24419b..499b18fc08 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -17,6 +17,8 @@ include(add_atsplugin) +# The experimental plugins are handled in cmake/ExperimentalPlugins.cmake. + add_subdirectory(authproxy) add_subdirectory(background_fetch) add_subdirectory(cache_promote) @@ -53,14 +55,31 @@ if(USE_LUAJIT) add_subdirectory(lua) endif() -if(BUILD_EXPERIMENTAL_PLUGINS) - add_subdirectory(experimental) -endif() - if(HOST_OS STREQUAL "linux") add_subdirectory(healthchecks) endif() -if(USE_MAGICK) +# FindImageMagick.cmake fails to check whether the target +# exists before creating it, and we also find this for +# the experimental/magick plugin. We have to guard the +# find_package() call to ensure the module doesn't try +# to create the same target twice. +if(NOT TARGET ImageMagick::Magick++) + auto_option( + WEBP_TRANSFORM + FEATURE_VAR + BUILD_WEBP_TRANSFORM + PACKAGE_DEPENDS + ImageMagick + COMPONENTS + Magick++ + ) + + include(magick_target) +endif() + +if(BUILD_WEBP_TRANSFORM) add_subdirectory(webp_transform) endif() + +add_subdirectory(experimental) diff --git a/plugins/experimental/CMakeLists.txt b/plugins/experimental/CMakeLists.txt index a02d891d1c..0dcdcbb73b 100644 --- a/plugins/experimental/CMakeLists.txt +++ b/plugins/experimental/CMakeLists.txt @@ -15,40 +15,98 @@ # ####################### -add_subdirectory(access_control) -add_subdirectory(block_errors) -add_subdirectory(cache_fill) -add_subdirectory(cert_reporting_tool) -add_subdirectory(cookie_remap) -add_subdirectory(custom_redirect) -add_subdirectory(fq_pacing) -add_subdirectory(geoip_acl) -add_subdirectory(header_freq) -add_subdirectory(hook-trace) -add_subdirectory(http_stats) -add_subdirectory(icap) -add_subdirectory(inliner) -add_subdirectory(memcache) -add_subdirectory(memory_profile) -add_subdirectory(money_trace) -add_subdirectory(mp4) -add_subdirectory(rate_limit) -add_subdirectory(redo_cache_lookup) -add_subdirectory(sslheaders) -add_subdirectory(stale_response) -add_subdirectory(stream_editor) -add_subdirectory(system_stats) -add_subdirectory(tls_bridge) -add_subdirectory(url_sig) -add_subdirectory(txn_box) +# See cmake/ExperimentalPlugins.cmake for the auto_options. -if(USE_MAGICK) +if(BUILD_ACCESS_CONTROL) + add_subdirectory(access_control) +endif() +if(BUILD_BLOCK_ERRORS) + add_subdirectory(block_errors) +endif() +if(BUILD_CACHE_FILL) + add_subdirectory(cache_fill) +endif() +if(BUILD_CERT_REPORTING_TOOL) + add_subdirectory(cert_reporting_tool) +endif() +if(BUILD_COOKIE_REMAP) + add_subdirectory(cookie_remap) +endif() +if(BUILD_CUSTOM_REDIRECT) + add_subdirectory(custom_redirect) +endif() +if(BUILD_FQ_PACING) + add_subdirectory(fq_pacing) +endif() +if(BUILD_GEOIP_ACL) + add_subdirectory(geoip_acl) +endif() +if(BUILD_HEADER_FREQ) + add_subdirectory(header_freq) +endif() +if(BUILD_HOOK_TRACE) + add_subdirectory(hook-trace) +endif() +if(BUILD_HOOK_STATS) + add_subdirectory(hook_stats) +endif() +if(BUILD_ICAP) + add_subdirectory(icap) +endif() +if(BUILD_INLINER) + add_subdirectory(inliner) +endif() +if(BUILD_MAGICK) add_subdirectory(magick) endif() -#add_subdirectory(wasm) - -# These are included via cmake/ExperimentalPlugins.cmake -#add_subdirectory(maxmind_acl) -#add_subdirectory(stek_share) -#add_subdirectory(uri_signing) -#add_subdirectory(otel_tracer) +if(BUILD_MAXMIND_ACL) + add_subdirectory(maxmind_acl) +endif() +if(BUILD_MEMCACHE) + add_subdirectory(memcache) +endif() +if(BUILD_MEMORY_PROFILE) + add_subdirectory(memory_profile) +endif() +if(BUILD_MONEY_TRACE) + add_subdirectory(money_trace) +endif() +if(BUILD_MP4) + add_subdirectory(mp4) +endif() +if(BUILD_OTEL_TRACER) + add_subdirectory(otel_tracer) +endif() +if(BUILD_RATE_LIMIT) + add_subdirectory(rate_limit) +endif() +if(BUILD_REDO_CACHE_LOOKUP) + add_subdirectory(redo_cache_lookup) +endif() +if(BUILD_SSLHEADERS) + add_subdirectory(sslheaders) +endif() +if(BUILD_STEK_SHARE) + add_subdirectory(stek_share) +endif() +if(BUILD_STREAM_EDITOR) + add_subdirectory(stream_editor) +endif() +if(BUILD_SYSTEM_STATS) + add_subdirectory(system_stats) +endif() +if(BUILD_TLS_BRIDGE) + add_subdirectory(tls_bridge) +endif() +if(BUILD_TXN_BOX) + add_subdirectory(txn_box) +endif() +if(BUILD_URI_SIGNING) + add_subdirectory(uri_signing) +endif() +if(BUILD_URL_SIG) + add_subdirectory(url_sig) +endif() +if(BUILD_WASM) + add_subdirectory(wasm) +endif() diff --git a/plugins/experimental/magick/CMakeLists.txt b/plugins/experimental/magick/CMakeLists.txt index 1fd0dc3dcb..d534a9de55 100644 --- a/plugins/experimental/magick/CMakeLists.txt +++ b/plugins/experimental/magick/CMakeLists.txt @@ -17,6 +17,9 @@ add_atsplugin(magick magick.cc) +# This creates the magic import target if necessary (older cmake) +include(magick_target) + target_link_libraries(magick PRIVATE ImageMagick::MagickWand ImageMagick::MagickCore ts::tscppapi OpenSSL::Crypto) verify_global_plugin(magick ${CMAKE_CURRENT_SOURCE_DIR}/image_magic_dlopen_leak_suppression.txt)
