summaryrefslogtreecommitdiff
path: root/config/ac-macros/plugins.m4
diff options
context:
space:
mode:
authorunknown <acurtis@xiphis.org>2006-04-13 13:49:29 -0700
committerunknown <acurtis@xiphis.org>2006-04-13 13:49:29 -0700
commit83583111cadd1a411c6a51c1891e7ca5a4e45223 (patch)
tree7d7b722a3af9812d173de1c5398f625484467670 /config/ac-macros/plugins.m4
parent087cae1a1e5c5681886955c44726bddec2c5d94a (diff)
downloadmariadb-git-83583111cadd1a411c6a51c1891e7ca5a4e45223.tar.gz
WL#3201
" Configure support for server plugins " storage/blackhole/ha_blackhole.h: Rename: sql/ha_blackhole.h -> storage/blackhole/ha_blackhole.h BitKeeper/deleted/.del-storage.m4~24bf2fffdaa328ad: Delete: config/ac-macros/storage.m4 BitKeeper/deleted/.del-ha_archive.m4~a07fac7110b39294: Delete: config/ac-macros/ha_archive.m4 BitKeeper/deleted/.del-ha_blackhole.m4~8ed06eb91f6420ed: Delete: config/ac-macros/ha_blackhole.m4 BitKeeper/deleted/.del-ha_example.m4~1dfb268163297708: Delete: config/ac-macros/ha_example.m4 BitKeeper/deleted/.del-ha_federated.m4~7acddd58286acfd6: Delete: config/ac-macros/ha_federated.m4 BitKeeper/deleted/.del-ha_innodb.m4~6f141fb5b80c1f39: Delete: config/ac-macros/ha_innodb.m4 BitKeeper/deleted/.del-ha_partition.m4~bc57067550be5f89: Delete: config/ac-macros/ha_partition.m4 BitKeeper/deleted/.del-ha_tina.m4~f658506ebbc113ca: Delete: config/ac-macros/ha_tina.m4 BitKeeper/deleted/.del-handlerton.cc.in~377156e7b06067cc: Delete: sql/handlerton.cc.in BitKeeper/deleted/.del-handlerton-win.cc~322a7e59507976df: Delete: sql/handlerton-win.cc BUILD/SETUP.sh: WL#3201 Changes in configure arguments Makefile.am: WL#3201 changes in build subst names config/ac-macros/ha_berkeley.m4: WL#3201 remove unused variable Makefile is always made config/ac-macros/ha_ndbcluster.m4: WL#3201 remove unused variables Split big macro configure.in: WL#3201 out with storage.m4, in with plugins.m4 change how plugins are declared include makefiles, remove handlerton.cc, add sql_builtin.cc include/mysql/plugin.h: WL#3201 support static and dynamic build - MYSQL_DYNAMIC_PLUGIN libmysqld/Makefile.am: WL#3201 Storage engine files still left in sql subdir are not conditionally compiled. Should move them out soon, plugin/Makefile.am: WL#3201 update makefile plugin/fulltext/Makefile.am: WL#3201 update makefile plugin/fulltext/plugin_example.c: WL#3201 change to mysql_declare_plugin macro sql/Makefile.am: WL#3201 Storage engine files still left in sql subdir are not conditionally compiled. Should move them out soon, sql/ha_berkeley.cc: WL#3201 make into a plugin conditionally compile content sql/ha_federated.cc: WL#3201 make into a plugin conditionally compile content sql/ha_heap.cc: WL#3201 make into a plugin sql/ha_innodb.cc: WL#3201 make into a plugin conditionally compile content sql/ha_myisam.cc: WL#3201 make into a plugin sql/ha_myisammrg.cc: WL#3201 make into a plugin sql/ha_ndbcluster.cc: WL#3201 make into a plugin conditionally compile content sql/ha_ndbcluster_binlog.cc: WL#3201 make into a plugin conditionally compile content sql/ha_partition.cc: WL#3201 make into a plugin conditionally compile content sql/handler.cc: WL#3201 Simplify how storage engines are found by db_type (hopefully we can get rid of it soon) Code cleanup sql/handler.h: WL#3201 new DB_TYPE_FIRST_DYNAMIC new func ha_finalize_handlerton() remove ha_register_builtin_plugins() sql/log.cc: WL#3201 make into a plugin sql/mysqld.cc: WL#3201 remove ha_register_builtin_plugins() alter init order so that storage engines are initialized before first use sql/partition_info.cc: WL#3201 conditionally compile content sql/sql_delete.cc: WL#3201 conditionally include ha_innodb.h sql/sql_plugin.cc: WL#3201 All compiled in plugins are in mysqld_builtins[] add funcs for plugin finalization install builtin plugins on initialization sql/sql_show.cc: WL#3201 Fix to use plugin_foreach() sql/sql_yacc.yy: WL#3201 SHOW FULL PLUGIN storage/archive/Makefile.am: WL#3201 setup as plugin makefile storage/archive/ha_archive.cc: WL#3201 Convert into a plugin storage/archive/ha_archive.h: WL#3201 azlib.h now in local dir storage/blackhole/ha_blackhole.cc: WL#3201 convert into a plugin storage/csv/Makefile.am: WL#3201 setup as plugin makefile storage/csv/ha_tina.cc: WL#3201 remove conditional compilation on MYSQL_PLUGIN mysql_declare_plugin macro change storage/example/Makefile.am: WL#3201 fix as new-style plugin makefile storage/example/ha_example.cc: WL#3201 remove conditional compilation on MYSQL_PLUGIN mysql_declare_plugin macro change storage/innobase/Makefile.am: WL#3201 Lets make life easier and reduce innodb into a single library file config/ac-macros/plugins.m4: New BitKeeper file ``config/ac-macros/plugins.m4'' sql/sql_builtin.cc.in: New BitKeeper file ``sql/sql_builtin.cc.in'' storage/blackhole/Makefile.am: New BitKeeper file ``storage/blackhole/Makefile.am''
Diffstat (limited to 'config/ac-macros/plugins.m4')
-rw-r--r--config/ac-macros/plugins.m4603
1 files changed, 603 insertions, 0 deletions
diff --git a/config/ac-macros/plugins.m4 b/config/ac-macros/plugins.m4
new file mode 100644
index 00000000000..5969a85dc14
--- /dev/null
+++ b/config/ac-macros/plugins.m4
@@ -0,0 +1,603 @@
+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
+ AC_DEFUN([MYSQL_MODULE_NAME_]AS_TR_CPP([$1]), [$3]) dnl
+ AC_DEFUN([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
+ AC_DEFUN([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
+ AC_DEFUN([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
+ AC_DEFUN([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
+ AC_DEFUN([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
+ AC_DEFUN([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([none])
+ _MYSQL_CONFIGURE_PLUGINS(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" dnl
+ ],[
+ AC_MSG_RESULT([cannot build dynamically])
+ [with_module_]m4_bpatsubst([$1], -, _)="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"
+ fi
+ else
+ AC_MSG_RESULT([no])
+ fi
+
+ if test "[$with_module_]m4_bpatsubst([$1], -, _)" == "yes"; then
+ if test "[$plugin_]m4_bpatsubst([$1], -, _)[_static_target]" != ""; then
+ AC_MSG_RESULT([static])
+ elif test "[$plugin_]m4_bpatsubst([$1], -, _)[_shared_target]" != ""; then
+ AC_MSG_RESULT([plugin])
+ else
+ AC_MSG_ERROR([thats strange])
+ 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], [
+ elif test "$mysql_modules" == "[$1]"; then 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
+])
+
+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], [], [AC_DEFUN([$3],[ ])])
+ elif test "$plugin" == "[$1]"; then dnl
+m4_ifdef([$2],[
+ AC_MSG_ERROR([plugin $1 is disabled]) dnl
+],[
+ [mysql_module_]m4_bpatsubst([$1], -, _)="yes" dnl
+]) 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
+])
+
+AC_DEFUN([_MYSQL_GEN_DEPENDS], [ dnl
+ ifelse($#, 0, [], $#, 1, [
+ [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
+ ],[
+ [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
+ _MYSQL_GEN_DEPENDS(m4_shift($@)) 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="$withval"], [mysql_modules=['$1']])
+
+m4_divert_once([HELP_VAR_END],[
+Description of plugin modules:
+m4_indir([MYSQL_LIST_PLUGINS])
+])
+
+ if test "$mysql_modules" == "all"; then
+ mysql_modules="m4_bpatsubst(__mysql_plugin_list__, :, [,])"
+ elif test "$mysql_modules" == "none"; then
+ mysql_modules="" dnl
+m4_ifdef([__mysql_metaplugin_list__],[ dnl
+_MYSQL_MODULE_META_CHECK(m4_bpatsubst(__mysql_metaplugin_list__, :, [,])) dnl
+])
+ fi
+
+ for plugin in `echo $mysql_modules | tr ",.:;" " "`; do
+ if test "$plugin" == "all" -o "$plugin" == "none"; then
+ AC_MSG_ERROR([bad module name: $plugin]) dnl
+_MYSQL_MODULE_ARGS_CHECK(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
+ else
+ AC_MSG_ERROR([unknown plugin module: $plugin])
+ fi
+ done
+
+ _MYSQL_CHECK_DEPENDENCIES(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
+])
+
+
+dnl ===========================================================================