summaryrefslogtreecommitdiff
path: root/config/ac-macros/plugins.m4
diff options
context:
space:
mode:
Diffstat (limited to 'config/ac-macros/plugins.m4')
-rw-r--r--config/ac-macros/plugins.m4665
1 files changed, 665 insertions, 0 deletions
diff --git a/config/ac-macros/plugins.m4 b/config/ac-macros/plugins.m4
new file mode 100644
index 00000000000..20d7e2cc11c
--- /dev/null
+++ b/config/ac-macros/plugins.m4
@@ -0,0 +1,665 @@
+dnl ===========================================================================
+dnl Support for plugable mysql server modules
+dnl ===========================================================================
+dnl
+dnl WorkLog#3201
+dnl
+dnl Framework for pluggable static and dynamic modules for mysql
+dnl
+dnl ---------------------------------------------------------------------------
+dnl Macro: MYSQL_MODULE
+dnl
+dnl Syntax:
+dnl MYSQL_MODULE([name],[Plugin module name],
+dnl [Plugin module description],
+dnl [group,group...])
+dnl
+dnl What it does:
+dnl First declaration for a plugin module (mandatory).
+dnl Adds module as member to configuration groups (if specified)
+dnl
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([MYSQL_MODULE],[ dnl
+ _MYSQL_MODULE(
+ [$1],
+ [__MYSQL_MODULE_]AS_TR_CPP([$1])[__],
+ m4_default([$2], [$1 plugin]),
+ m4_default([$3], [plugin for $1]),
+ m4_default([$4], []),
+ ) dnl
+])
+
+AC_DEFUN([_MYSQL_MODULE],[ dnl
+ m4_ifdef([$2], [ dnl
+ AC_FATAL([[Duplicate MYSQL_MODULE declaration for ]][$3]) dnl
+ ],[ dnl
+ m4_define([$2], [$1]) dnl
+ _MYSQL_PLUGAPPEND([__mysql_plugin_list__],[$1]) dnl
+ m4_define([MYSQL_MODULE_NAME_]AS_TR_CPP([$1]), [$3]) dnl
+ m4_define([MYSQL_MODULE_DESC_]AS_TR_CPP([$1]), [$4]) dnl
+ ifelse([$5], [], [], [ dnl
+ _MYSQL_PLUGAPPEND_OPTS([$1], $5) dnl
+ ]) dnl
+ ]) dnl
+])
+
+
+dnl ---------------------------------------------------------------------------
+dnl Macro: MYSQL_STORAGE_ENGINE
+dnl
+dnl What it does:
+dnl Short cut for storage engine declarations
+dnl
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([MYSQL_STORAGE_ENGINE],[ dnl
+ MYSQL_MODULE([$1], [$3], [$4], [[$5]]) dnl
+ MYSQL_MODULE_DEFINE([$1], [WITH_]AS_TR_CPP([$1])[_STORAGE_ENGINE]) dnl
+ ifelse([$2],[no],[],[ dnl
+ _MYSQL_LEGACY_STORAGE_ENGINE([$1],m4_default([$2], [$1-storage-engine])) dnl
+ ]) dnl
+])
+
+AC_DEFUN([_MYSQL_LEGACY_STORAGE_ENGINE],[
+if test "[${with_]m4_bpatsubst($2, -, _)[+set}]" = set; then
+ [with_module_]m4_bpatsubst($1, -, _)="[$with_]m4_bpatsubst($2, -, _)"
+fi dnl
+])
+
+
+dnl ---------------------------------------------------------------------------
+dnl Macro: MYSQL_MODULE_DEFINE
+dnl
+dnl What it does:
+dnl When a plugin module is to be statically linked, define the C macro
+dnl
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([MYSQL_MODULE_DEFINE],[ dnl
+ REQUIRE_PLUGIN([$1]) dnl
+ m4_define([MYSQL_MODULE_DEFINE_]AS_TR_CPP([$1]), [$2]) dnl
+])
+
+
+dnl ---------------------------------------------------------------------------
+dnl Macro: MYSQL_MODULE_DIRECTORY
+dnl
+dnl What it does:
+dnl Adds a directory to the build process
+dnl
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([MYSQL_MODULE_DIRECTORY],[ dnl
+ REQUIRE_PLUGIN([$1]) dnl
+ m4_define([MYSQL_MODULE_DIRECTORY_]AS_TR_CPP([$1]), [$2]) dnl
+])
+
+
+dnl ---------------------------------------------------------------------------
+dnl Macro: MYSQL_MODULE_STATIC
+dnl
+dnl What it does:
+dnl Declare the name for the static library
+dnl
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([MYSQL_MODULE_STATIC],[ dnl
+ REQUIRE_PLUGIN([$1]) dnl
+ m4_define([MYSQL_MODULE_STATIC_]AS_TR_CPP([$1]), [$2]) dnl
+])
+
+
+dnl ---------------------------------------------------------------------------
+dnl Macro: MYSQL_MODULE_DYNAMIC
+dnl
+dnl What it does:
+dnl Declare the name for the shared library
+dnl
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([MYSQL_MODULE_DYNAMIC],[ dnl
+ REQUIRE_PLUGIN([$1]) dnl
+ m4_define([MYSQL_MODULE_DYNAMIC_]AS_TR_CPP([$1]), [$2]) dnl
+])
+
+
+dnl ---------------------------------------------------------------------------
+dnl Macro: MYSQL_MODULE_MANDATORY
+dnl
+dnl What it does:
+dnl Marks the specified plugin as a mandatory module
+dnl
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([MYSQL_MODULE_MANDATORY],[ dnl
+ REQUIRE_PLUGIN([$1]) dnl
+ _MYSQL_MODULE_MANDATORY([$1],
+ [MYSQL_MODULE_MANDATORY_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DISABLED_]AS_TR_CPP([$1])
+ ) dnl
+])
+
+AC_DEFUN([_MYSQL_MODULE_MANDATORY],[ dnl
+ m4_define([$2], [yes]) dnl
+ m4_ifdef([$3], [ dnl
+ AC_WARNING([syntax],[Mandatory plugin $1 has been disabled]) dnl
+ m4_undefine([$2]) dnl
+ ]) dnl
+])
+
+
+dnl ---------------------------------------------------------------------------
+dnl Macro: MYSQL_MODULE_DISABLED
+dnl
+dnl What it does:
+dnl Marks the specified plugin as a disabled module
+dnl
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([MYSQL_MODULE_DISABLED],[ dnl
+ REQUIRE_PLUGIN([$1]) dnl
+ _MYSQL_MODULE_DISABLED([$1],
+ [MYSQL_MODULE_DISABLED_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_MANDATORY_]AS_TR_CPP([$1])
+ ) dnl
+])
+
+AC_DEFUN([_MYSQL_MODULE_DISABLED],[ dnl
+ m4_define([$2], [yes]) dnl
+ m4_ifdef([$3], [ dnl
+ AC_FATAL([attempt to disable mandatory plugin $1]) dnl
+ m4_undefine([$2]) dnl
+ ]) dnl
+])
+
+
+dnl ---------------------------------------------------------------------------
+dnl Macro: MYSQL_MODULE_DEPENDS
+dnl
+dnl What it does:
+dnl Enables other modules neccessary for this module
+dnl Dependency checking is not recursive so if any
+dnl required module requires further modules, list them
+dnl here too!
+dnl
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([MYSQL_MODULE_DEPENDS],[ dnl
+ REQUIRE_PLUGIN([$1]) dnl
+ ifelse($#, 0, [], $#, 1, [ dnl
+ AC_FATAL([[bad number of arguments]]) dnl
+ ], $#, 2, [ dnl
+ _MYSQL_MODULE_DEPEND([$1],[$2]) dnl
+ ],[ dnl
+ _MYSQL_MODULE_DEPEND([$1],[$2]) dnl
+ MYSQL_MODULE_DEPENDS([$1], m4_shift(m4_shift($@))) dnl
+ ])
+])
+
+AC_DEFUN([_MYSQL_MODULE_DEPEND],[ dnl
+ REQUIRE_PLUGIN([$2]) dnl
+ _MYSQL_PLUGAPPEND([__mysql_plugdepends_$1__],[$2]) dnl
+])
+
+
+dnl ---------------------------------------------------------------------------
+dnl Macro: MYSQL_MODULE_ACTIONS
+dnl
+dnl What it does:
+dnl Declares additional actions required to configure the module
+dnl
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([MYSQL_MODULE_ACTIONS],[ dnl
+ REQUIRE_PLUGIN([$1]) dnl
+ m4_ifdef([$2],[ dnl
+ m4_define([MYSQL_MODULE_ACTIONS_]AS_TR_CPP([$1]),m4_defn([$2])) dnl
+ ],[ dnl
+ m4_define([MYSQL_MODULE_ACTIONS_]AS_TR_CPP([$1]), [$2]) dnl
+ ])
+])
+
+
+dnl ---------------------------------------------------------------------------
+dnl Macro: MYSQL_CONFIGURE_PLUGINS
+dnl
+dnl What it does:
+dnl Called last, emits all required shell code to configure the modules
+dnl
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([MYSQL_CONFIGURE_PLUGINS],[ dnl
+ m4_ifdef([__mysql_plugin_configured__],[ dnl
+ AC_FATAL([cannot call [MYSQL_CONFIGURE_PLUGINS] multiple times]) dnl
+ ],[ dnl
+ m4_define([__mysql_plugin_configured__],[done]) dnl
+ m4_ifdef([__mysql_plugin_list__],[ dnl
+ _MYSQL_CHECK_PLUGIN_ARGS([$1])
+ _MYSQL_CONFIGURE_PLUGINS(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
+ _MYSQL_DO_PLUGIN_ACTIONS(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
+ ]) dnl
+ ]) dnl
+])
+
+AC_DEFUN([_MYSQL_CONFIGURE_PLUGINS],[ dnl
+ ifelse($#, 0, [], $#, 1, [ dnl
+ _MYSQL_CHECK_PLUGIN([$1]) dnl
+ ],[ dnl
+ _MYSQL_CHECK_PLUGIN([$1]) dnl
+ _MYSQL_CONFIGURE_PLUGINS(m4_shift($@)) dnl
+ ])
+])
+
+AC_DEFUN([_MYSQL_CHECK_PLUGIN],[ dnl
+ _DO_MYSQL_CHECK_PLUGIN(
+ [$1],
+ [$1-plugin],
+ [MYSQL_MODULE_NAME_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DESC_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DEFINE_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DIRECTORY_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_STATIC_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DYNAMIC_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_MANDATORY_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DISABLED_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_ACTIONS_]AS_TR_CPP([$1])
+ ) dnl
+])
+
+AC_DEFUN([_DO_MYSQL_CHECK_PLUGIN],[ dnl
+ m4_ifdef([$5],[ dnl
+ AH_TEMPLATE($5, [Include ]$4[ into mysqld])
+ ])
+ AC_MSG_CHECKING([whether to use ]$3) dnl
+ m4_ifdef([$10],[
+ if test "[$mysql_module_]m4_bpatsubst([$1], -, _)" = yes -a \
+ "[$with_module_]m4_bpatsubst([$1], -, _)" != no -o \
+ "[$with_module_]m4_bpatsubst([$1], -, _)" = yes; then
+ AC_MSG_ERROR([disabled])
+ fi
+ AC_MSG_RESULT([no]) dnl
+ ],[ dnl
+ m4_ifdef([$9],[
+ if test "[$with_module_]m4_bpatsubst([$1], -, _)" = no; then
+ AC_MSG_ERROR([cannot disable mandatory module])
+ fi
+ [mysql_module_]m4_bpatsubst([$1], -, _)=yes dnl
+ ])
+ if test "[$with_module_]m4_bpatsubst([$1], -, _)" != no; then
+ if test "[$mysql_module_]m4_bpatsubst([$1], -, _)" != yes -a \
+ "[$with_module_]m4_bpatsubst([$1], -, _)" != yes; then dnl
+ m4_ifdef([$8],[ dnl
+ m4_ifdef([$6],[
+ mysql_plugin_dirs="$mysql_plugin_dirs $6" dnl
+ ])
+ AC_SUBST([plugin_]m4_bpatsubst([$1], -, _)[_shared_target], "$8")
+ AC_SUBST([plugin_]m4_bpatsubst([$1], -, _)[_static_target], [""])
+ [with_module_]m4_bpatsubst([$1], -, _)=yes
+ AC_MSG_RESULT([plugin]) dnl
+ ],[
+ [with_module_]m4_bpatsubst([$1], -, _)=no
+ AC_MSG_RESULT([no]) dnl
+ ])
+ else dnl
+ m4_ifdef([$7],[
+ ifelse(m4_bregexp($7, [^lib[^.]+\.a$]), -2, [ dnl
+ m4_ifdef([$6],[
+ mysql_plugin_dirs="$mysql_plugin_dirs $6"
+ mysql_plugin_libs="$mysql_plugin_libs -L[\$(top_builddir)]/$6" dnl
+ ])
+ mysql_plugin_libs="$mysql_plugin_libs dnl
+[-l]m4_bregexp($7, [^lib\([^.]+\)], [\1])" dnl
+ ], m4_bregexp($7, [^\\\$]), 0, [ dnl
+ m4_ifdef([$6],[
+ mysql_plugin_dirs="$mysql_plugin_dirs $6" dnl
+ ])
+ mysql_plugin_libs="$mysql_plugin_libs $7" dnl
+ ], [ dnl
+ m4_ifdef([$6],[
+ mysql_plugin_dirs="$mysql_plugin_dirs $6"
+ mysql_plugin_libs="$mysql_plugin_libs \$(top_builddir)/$6/$7" dnl
+ ],[
+ mysql_plugin_libs="$mysql_plugin_libs $7" dnl
+ ]) dnl
+ ]) dnl
+ m4_ifdef([$5],[
+ AC_DEFINE($5) dnl
+ ])
+ AC_SUBST([plugin_]m4_bpatsubst([$1], -, _)[_static_target], "$7")
+ AC_SUBST([plugin_]m4_bpatsubst([$1], -, _)[_shared_target], [""]) dnl
+ ],[ dnl
+ m4_ifdef([$6],[
+ AC_FATAL([plugin directory specified without library for ]$3) dnl
+ ],[ dnl
+ m4_ifdef([$5],[
+ AC_DEFINE($5)
+ AC_SUBST([plugin_]m4_bpatsubst([$1], -, _)[_static_target], ["yes"])
+ AC_SUBST([plugin_]m4_bpatsubst([$1], -, _)[_shared_target], [""]) dnl
+ ]) dnl
+ ]) dnl
+ ])
+ mysql_plugin_defs="$mysql_plugin_defs, [builtin_]m4_bpatsubst([$2], -, _)"
+ [with_module_]m4_bpatsubst([$1], -, _)=yes
+ AC_MSG_RESULT([yes])
+ fi
+ else
+ AC_MSG_RESULT([no])
+ fi dnl
+ ]) dnl
+])
+
+AC_DEFUN([_MYSQL_DO_PLUGIN_ACTIONS],[ dnl
+ ifelse($#, 0, [], $#, 1, [ dnl
+ _MYSQL_PLUGIN_ACTIONS([$1]) dnl
+ ],[ dnl
+ _MYSQL_PLUGIN_ACTIONS([$1]) dnl
+ _MYSQL_DO_PLUGIN_ACTIONS(m4_shift($@)) dnl
+ ])
+])
+
+AC_DEFUN([_MYSQL_PLUGIN_ACTIONS],[ dnl
+ _DO_MYSQL_PLUGIN_ACTIONS(
+ [$1],
+ [$1-plugin],
+ [MYSQL_MODULE_NAME_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DESC_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DEFINE_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DIRECTORY_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_STATIC_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DYNAMIC_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_MANDATORY_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DISABLED_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_ACTIONS_]AS_TR_CPP([$1])
+ ) dnl
+])
+
+
+AC_DEFUN([_DO_MYSQL_PLUGIN_ACTIONS],[ dnl
+ m4_ifdef([$10], [], [
+ if test "[$with_module_]m4_bpatsubst([$1], -, _)" = yes; then
+ if test -z "[$plugin_]m4_bpatsubst([$1], -, _)[_static_target]" -a \
+ -z "[$plugin_]m4_bpatsubst([$1], -, _)[_shared_target]"; then
+ AC_MSG_ERROR([thats strange, $1 failed sanity check])
+ fi
+ $11
+ fi dnl
+ ]) dnl
+])
+
+
+
+dnl ===========================================================================
+dnl Private helper macros
+dnl ===========================================================================
+
+
+AC_DEFUN([REQUIRE_PLUGIN],[ dnl
+ _REQUIRE_PLUGIN([$1], [__MYSQL_MODULE_]AS_TR_CPP([$1])[__]) dnl
+])
+
+define([_REQUIRE_PLUGIN],[ dnl
+ ifdef([$2],[ dnl
+ ifelse($2, [$1], [], [ dnl
+ AC_FATAL([[Misspelt MYSQL_MODULE declaration for ]][$1]) dnl
+ ]) dnl
+ ],[ dnl
+ AC_FATAL([[Missing MYSQL_MODULE declaration for ]][$1]) dnl
+ ])
+])
+
+
+dnl ---------------------------------------------------------------------------
+
+
+AC_DEFUN([_MYSQL_MODULE_META_CHECK], [ifelse($#, 0, [], $#, 1, dnl
+[_MYSQL_CHECK_PLUGIN_META([$1], [__mysql_]m4_bpatsubst($1, -, _)[_plugins__]) dnl
+], dnl
+[_MYSQL_CHECK_PLUGIN_META([$1], [__mysql_]m4_bpatsubst($1, -, _)[_plugins__]) dnl
+_MYSQL_MODULE_META_CHECK(m4_shift($@))]) dnl
+])
+
+AC_DEFUN([_MYSQL_CHECK_PLUGIN_META], [
+ [$1] ) dnl
+m4_ifdef([$2], [
+ mysql_modules='m4_bpatsubst($2, :, [ ])' dnl
+],[
+ mysql_modules='' dnl
+])
+ ;; dnl
+])
+
+
+dnl ---------------------------------------------------------------------------
+
+
+AC_DEFUN([_MYSQL_PLUGAPPEND],[ dnl
+ m4_ifdef([$1],[ dnl
+ m4_define([__plugin_append_tmp__], m4_defn([$1])) dnl
+ m4_undefine([$1]) dnl
+ m4_define([$1], __plugin_append_tmp__[:$2]) dnl
+ m4_undefine([__plugin_append_tmp__]) dnl
+ ],[ dnl
+ m4_define([$1], [$2]) dnl
+ $3 dnl
+ ]) dnl
+])
+
+AC_DEFUN([_MYSQL_PLUGAPPEND_OPTS],[ dnl
+ ifelse($#, 0, [], $#, 1, [ dnl
+ AC_FATAL([[bad number of args]])
+ ], $#, 2, [ dnl
+ _MYSQL_PLUGAPPEND_OPTONE([$1],[$2]) dnl
+ ],[ dnl
+ _MYSQL_PLUGAPPEND_OPTONE([$1],[$2]) dnl
+ _MYSQL_PLUGAPPEND_OPTS([$1], m4_shift(m4_shift($@)))
+ ])
+])
+
+AC_DEFUN([_MYSQL_PLUGAPPEND_OPTONE],[ dnl
+ ifelse([$2], [all], [ dnl
+ AC_FATAL([[protected plugin group: all]]) dnl
+ ],[ dnl
+ ifelse([$2], [none], [ dnl
+ AC_FATAL([[protected plugin group: none]]) dnl
+ ],[ dnl
+ _MYSQL_PLUGAPPEND([__mysql_$1_configs__],[$2]) dnl
+ _MYSQL_PLUGAPPEND([__mysql_]m4_bpatsubst($2, -, _)[_plugins__],[$1], [ dnl
+ _MYSQL_PLUGAPPEND([__mysql_metaplugin_list__],[$2]) dnl
+ ]) dnl
+ ]) dnl
+ ]) dnl
+])
+
+
+dnl ---------------------------------------------------------------------------
+
+
+AC_DEFUN([MYSQL_LIST_PLUGINS],[ dnl
+ m4_ifdef([__mysql_plugin_list__],[ dnl
+ _MYSQL_LIST_PLUGINS(m4_bpatsubst(__mysql_plugin_list__, :, [,])) dnl
+ ]) dnl
+])
+
+AC_DEFUN([_MYSQL_LIST_PLUGINS],[ dnl
+ ifelse($#, 0, [], $#, 1, [ dnl
+ MYSQL_SHOW_PLUGIN([$1]) dnl
+ ],[ dnl
+ MYSQL_SHOW_PLUGIN([$1]) dnl
+ _MYSQL_LIST_PLUGINS(m4_shift($@)) dnl
+ ]) dnl
+])
+
+AC_DEFUN([MYSQL_SHOW_PLUGIN],[ dnl
+ _MYSQL_SHOW_PLUGIN(
+ [$1],
+ [$1-plugin],
+ [MYSQL_MODULE_NAME_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DESC_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DEFINE_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DIRECTORY_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_STATIC_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DYNAMIC_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_MANDATORY_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_DISABLED_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_ACTIONS_]AS_TR_CPP([$1]),
+ __mysql_[$1]_configs__,
+ )
+])
+
+AC_DEFUN([_MYSQL_SHOW_PLUGIN],[
+ === Plug-in: $3 ===
+ Module Name: [$1]
+ Description: $4
+ Supports build: _PLUGIN_BUILD_TYPE([$7],[$8]) dnl
+m4_ifdef([$12],[
+ Configurations: m4_bpatsubst($12, :, [, ])]) dnl
+m4_ifdef([$10],[
+ Status: disabled], [ dnl
+m4_ifdef([$9],[
+ Status: mandatory])])])
+
+AC_DEFUN([_PLUGIN_BUILD_TYPE], dnl
+[m4_ifdef([$1],[ifelse($1,[no],[],[static ]m4_ifdef([$2],[and dnl
+]))])[]m4_ifdef([$2],[dynamic],[m4_ifdef([$1],[],[static])])])
+
+
+dnl ---------------------------------------------------------------------------
+
+
+AC_DEFUN([_MYSQL_MODULE_ARGS_CHECK],[ dnl
+ ifelse($#, 0, [], $#, 1, [ dnl
+ _MYSQL_CHECK_PLUGIN_ARG([$1],
+ [MYSQL_MODULE_DISABLED_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_ACTIONS_]AS_TR_CPP([$1])) dnl
+ ],[ dnl
+ _MYSQL_CHECK_PLUGIN_ARG([$1],
+ [MYSQL_MODULE_DISABLED_]AS_TR_CPP([$1]),
+ [MYSQL_MODULE_ACTIONS_]AS_TR_CPP([$1])) dnl
+ _MYSQL_MODULE_ARGS_CHECK(m4_shift($@)) dnl
+ ]) dnl
+])
+
+AC_DEFUN([_MYSQL_CHECK_PLUGIN_ARG],[ dnl
+ m4_ifdef([$3], [], [m4_define([$3],[ ])])
+ [$1] ) dnl
+ m4_ifdef([$2],[
+ AC_MSG_ERROR([plugin $1 is disabled]) dnl
+ ],[
+ [mysql_module_]m4_bpatsubst([$1], -, _)=yes dnl
+ ])
+ ;; dnl
+])
+
+AC_DEFUN([_MYSQL_SANE_VARS], [ dnl
+ ifelse($#, 0, [], $#, 1, [ dnl
+ _MYSQL_SANEVAR([$1]) dnl
+ ],[ dnl
+ _MYSQL_SANEVAR([$1]) dnl
+ _MYSQL_SANE_VARS(m4_shift($@)) dnl
+ ]) dnl
+])
+
+AC_DEFUN([_MYSQL_SANEVAR], [
+ test -z "[$mysql_module_]m4_bpatsubst([$1], -, _)" && dnl
+[mysql_module_]m4_bpatsubst([$1], -, _)='.'
+ test -z "[$with_module_]m4_bpatsubst([$1], -, _)" && dnl
+[with_module_]m4_bpatsubst([$1], -, _)='.' dnl
+])
+
+AC_DEFUN([_MYSQL_CHECK_DEPENDENCIES], [ dnl
+ ifelse($#, 0, [], $#, 1, [ dnl
+ _MYSQL_CHECK_DEPENDS([$1],[__mysql_plugdepends_$1__]) dnl
+ ],[ dnl
+ _MYSQL_CHECK_DEPENDS([$1],[__mysql_plugdepends_$1__]) dnl
+ _MYSQL_CHECK_DEPENDENCIES(m4_shift($@)) dnl
+ ]) dnl
+])
+
+AC_DEFUN([_MYSQL_CHECK_DEPENDS], [ dnl
+ m4_ifdef([$2], [
+ if test "[$mysql_module_]m4_bpatsubst([$1], -, _)" = yes -a \
+ "[$with_module_]m4_bpatsubst([$1], -, _)" != no -o \
+ "[$with_module_]m4_bpatsubst([$1], -, _)" = yes; then dnl
+ _MYSQL_GEN_DEPENDS(m4_bpatsubst($2, :, [,]))
+ fi dnl
+ ]) dnl
+])
+
+AC_DEFUN([_MYSQL_GEN_DEPENDS], [ dnl
+ ifelse($#, 0, [], $#, 1, [ dnl
+ _MYSQL_GEN_DEPEND([$1]) dnl
+ ],[ dnl
+ _MYSQL_GEN_DEPEND([$1]) dnl
+ _MYSQL_GEN_DEPENDS(m4_shift($@)) dnl
+ ]) dnl
+])
+
+AC_DEFUN([_MYSQL_GEN_DEPEND], [ dnl
+ m4_ifdef([MYSQL_MODULE_DISABLED_]AS_TR_CPP([$1]),[
+ AC_MSG_ERROR([depends upon disabled module $1]) dnl
+ ],[
+ [mysql_module_]m4_bpatsubst([$1], -, _)=yes
+ if test "[$with_module_]m4_bpatsubst([$1], -, _)" = no; then
+ AC_MSG_ERROR([depends upon disabled module $1])
+ fi dnl
+ ]) dnl
+])
+
+AC_DEFUN([_MYSQL_CHECK_PLUGIN_ARGS],[
+ AC_ARG_WITH([modules], [
+ --with-modules=PLUGIN[[,PLUGIN..]]
+m4_text_wrap([Plugin modules to include in mysqld. (default is: $1)
+Must be configuration name or a comma seperated list of modules.],
+[ ])
+m4_text_wrap([Available configurations are: ]
+m4_bpatsubst(m4_ifdef([__mysql_metaplugin_list__], dnl
+none:all:__mysql_metaplugin_list__,none:all), :, [ ])[.],
+[ ])
+m4_text_wrap([Available plugin modules are: ] dnl
+m4_bpatsubst(__mysql_plugin_list__, :, [ ])[.], [ ])
+ --without-module-PLUGIN
+m4_text_wrap([Disable the named module from being built. Otherwise,
+for modules which are not selected for inclusion in mysqld will be
+built dynamically (if supported)],[ ])
+],[mysql_modules="`echo $withval | tr ',.:;*[]' ' '`"],
+ [mysql_modules=['$1']])
+
+m4_divert_once([HELP_VAR_END],[
+Description of plugin modules:
+m4_indir([MYSQL_LIST_PLUGINS])
+])
+
+ case "$mysql_modules" in
+ all )
+ mysql_modules='m4_bpatsubst(__mysql_plugin_list__, :, [ ])'
+ ;;
+ none )
+ mysql_modules=''
+ ;; dnl
+m4_ifdef([__mysql_metaplugin_list__],[ dnl
+_MYSQL_MODULE_META_CHECK(m4_bpatsubst(__mysql_metaplugin_list__, :, [,])) dnl
+])
+ esac
+
+ for plugin in $mysql_modules; do
+ case "$plugin" in
+ all )
+ AC_MSG_ERROR([bad module name: $plugin])
+ ;;
+ none )
+ AC_MSG_ERROR([bad module name: $plugin])
+ ;; dnl
+_MYSQL_MODULE_ARGS_CHECK(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
+ * )
+ AC_MSG_ERROR([unknown plugin module: $plugin])
+ ;;
+ esac
+ done
+
+ _MYSQL_SANE_VARS(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
+ _MYSQL_CHECK_DEPENDENCIES(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
+])
+
+
+dnl ===========================================================================