summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xBUILD/SETUP.sh15
-rw-r--r--Makefile.am3
-rw-r--r--config/ac-macros/ha_archive.m429
-rw-r--r--config/ac-macros/ha_berkeley.m43
-rw-r--r--config/ac-macros/ha_blackhole.m429
-rw-r--r--config/ac-macros/ha_example.m430
-rw-r--r--config/ac-macros/ha_federated.m429
-rw-r--r--config/ac-macros/ha_innodb.m477
-rw-r--r--config/ac-macros/ha_ndbcluster.m47
-rw-r--r--config/ac-macros/ha_partition.m433
-rw-r--r--config/ac-macros/ha_tina.m429
-rw-r--r--config/ac-macros/plugins.m4603
-rw-r--r--config/ac-macros/storage.m455
-rw-r--r--configure.in185
-rw-r--r--include/mysql/plugin.h21
-rw-r--r--libmysqld/Makefile.am24
-rw-r--r--plugin/Makefile.am28
-rw-r--r--plugin/fulltext/Makefile.am47
-rw-r--r--plugin/fulltext/plugin_example.c2
-rw-r--r--sql/Makefile.am32
-rw-r--r--sql/ha_berkeley.cc18
-rw-r--r--sql/ha_federated.cc19
-rw-r--r--sql/ha_heap.cc13
-rw-r--r--sql/ha_innodb.cc17
-rw-r--r--sql/ha_myisam.cc16
-rw-r--r--sql/ha_myisammrg.cc15
-rw-r--r--sql/ha_ndbcluster.cc19
-rw-r--r--sql/ha_ndbcluster_binlog.cc2
-rw-r--r--sql/ha_partition.cc19
-rw-r--r--sql/handler.cc153
-rw-r--r--sql/handler.h5
-rw-r--r--sql/handlerton-win.cc72
-rw-r--r--sql/handlerton.cc.in14
-rw-r--r--sql/log.cc15
-rw-r--r--sql/mysqld.cc30
-rw-r--r--sql/partition_info.cc3
-rw-r--r--sql/sql_builtin.cc.in13
-rw-r--r--sql/sql_delete.cc2
-rw-r--r--sql/sql_plugin.cc75
-rw-r--r--sql/sql_show.cc45
-rw-r--r--sql/sql_yacc.yy2
-rw-r--r--storage/archive/Makefile.am50
-rw-r--r--storage/archive/ha_archive.cc (renamed from sql/ha_archive.cc)50
-rw-r--r--storage/archive/ha_archive.h (renamed from sql/ha_archive.h)2
-rw-r--r--storage/blackhole/Makefile.am51
-rw-r--r--storage/blackhole/ha_blackhole.cc (renamed from sql/ha_blackhole.cc)14
-rw-r--r--storage/blackhole/ha_blackhole.h (renamed from sql/ha_blackhole.h)0
-rw-r--r--storage/csv/Makefile.am13
-rw-r--r--storage/csv/ha_tina.cc6
-rw-r--r--storage/example/Makefile.am30
-rw-r--r--storage/example/ha_example.cc6
-rw-r--r--storage/innobase/Makefile.am29
52 files changed, 1384 insertions, 715 deletions
diff --git a/BUILD/SETUP.sh b/BUILD/SETUP.sh
index 3c3facae34f..7b6dc29ad66 100755
--- a/BUILD/SETUP.sh
+++ b/BUILD/SETUP.sh
@@ -146,18 +146,9 @@ static_link="$static_link --with-client-ldflags=-all-static"
local_infile_configs="--enable-local-infile"
-max_configs="--with-innodb --with-berkeley-db"
-max_configs="$max_configs --with-archive-storage-engine"
-max_configs="$max_configs --with-big-tables"
-max_configs="$max_configs --with-blackhole-storage-engine"
-max_configs="$max_configs --with-federated-storage-engine"
-max_configs="$max_configs --with-csv-storage-engine"
-max_configs="$max_configs --with-example-storage-engine"
-max_configs="$max_configs --with-partition $SSL_LIBRARY"
-
-max_no_embedded_configs="$max_configs --with-ndbcluster"
-max_no_ndb_configs="$max_configs --without-ndbcluster --with-embedded-server"
-max_configs="$max_configs --with-ndbcluster --with-embedded-server"
+max_no_embedded_configs="$SSL_LIBRARY --with-modules=max"
+max_no_ndb_configs="$SSL_LIBRARY --with-modules=max-no-ndb --with-embedded-server"
+max_configs="$SSL_LIBRARY --with-modules=max --with-embedded-server"
#
# CPU and platform specific compilation flags.
diff --git a/Makefile.am b/Makefile.am
index 4e648dabe27..86bf6d6c03d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -24,9 +24,8 @@ EXTRA_DIST = INSTALL-SOURCE INSTALL-WIN-SOURCE \
SUBDIRS = . include @docs_dirs@ @zlib_dir@ @yassl_dir@ \
@readline_topdir@ sql-common \
@thread_dirs@ pstack \
- @sql_union_dirs@ @mysql_se_dirs@ \
+ @sql_union_dirs@ @mysql_plugin_dirs@ \
@sql_server@ scripts @man_dirs@ tests \
- @mysql_se_plugins@ \
netware @libmysqld_dirs@ \
@bench_dirs@ support-files @tools_dirs@ \
plugin win
diff --git a/config/ac-macros/ha_archive.m4 b/config/ac-macros/ha_archive.m4
deleted file mode 100644
index 2d2558ea600..00000000000
--- a/config/ac-macros/ha_archive.m4
+++ /dev/null
@@ -1,29 +0,0 @@
-dnl ---------------------------------------------------------------------------
-dnl Macro: MYSQL_CHECK_ARCHIVEDB
-dnl Sets HAVE_ARCHIVE_DB if --with-archive-storage-engine is used
-dnl ---------------------------------------------------------------------------
-AC_DEFUN([MYSQL_CHECK_ARCHIVEDB], [
- AC_ARG_WITH([archive-storage-engine],
- [
- --with-archive-storage-engine
- Enable the Archive Storage Engine],
- [archivedb="$withval"],
- [archivedb=no])
- AC_MSG_CHECKING([for archive storage engine])
-
- case "$archivedb" in
- yes )
- AC_DEFINE([HAVE_ARCHIVE_DB], [1], [Builds Archive Storage Engine])
- AC_MSG_RESULT([yes])
- [archivedb=yes]
- ;;
- * )
- AC_MSG_RESULT([no])
- [archivedb=no]
- ;;
- esac
-
-])
-dnl ---------------------------------------------------------------------------
-dnl END OF MYSQL_CHECK_ARCHIVE SECTION
-dnl ---------------------------------------------------------------------------
diff --git a/config/ac-macros/ha_berkeley.m4 b/config/ac-macros/ha_berkeley.m4
index 183a622dfc9..c389077ea8b 100644
--- a/config/ac-macros/ha_berkeley.m4
+++ b/config/ac-macros/ha_berkeley.m4
@@ -120,12 +120,9 @@ AC_DEFUN([MYSQL_SETUP_BERKELEY_DB], [
sh $rel_srcdir/$bdb/dist/configure $bdb_conf_flags) || \
AC_MSG_ERROR([could not configure Berkeley DB])
- mysql_se_libs="$mysql_se_libs $bdb_libs_with_path"
-
AC_SUBST(bdb_includes)
AC_SUBST(bdb_libs)
AC_SUBST(bdb_libs_with_path)
- AC_CONFIG_FILES(storage/bdb/Makefile)
])
AC_DEFUN([MYSQL_CHECK_INSTALLED_BDB], [
diff --git a/config/ac-macros/ha_blackhole.m4 b/config/ac-macros/ha_blackhole.m4
deleted file mode 100644
index cc4d360f5a8..00000000000
--- a/config/ac-macros/ha_blackhole.m4
+++ /dev/null
@@ -1,29 +0,0 @@
-dnl ---------------------------------------------------------------------------
-dnl Macro: MYSQL_CHECK_BLACKHOLEDB
-dnl Sets HAVE_BLACKHOLE_DB if --with-blackhole-storage-engine is used
-dnl ---------------------------------------------------------------------------
-AC_DEFUN([MYSQL_CHECK_BLACKHOLEDB], [
- AC_ARG_WITH([blackhole-storage-engine],
- [
- --with-blackhole-storage-engine
- Enable the Blackhole Storage Engine],
- [blackholedb="$withval"],
- [blackholedb=no])
- AC_MSG_CHECKING([for blackhole storage engine])
-
- case "$blackholedb" in
- yes )
- AC_DEFINE([HAVE_BLACKHOLE_DB], [1], [Builds Blackhole Storage Engine])
- AC_MSG_RESULT([yes])
- [blackholedb=yes]
- ;;
- * )
- AC_MSG_RESULT([no])
- [blackholedb=no]
- ;;
- esac
-
-])
-dnl ---------------------------------------------------------------------------
-dnl END OF MYSQL_CHECK_BLACKHOLE SECTION
-dnl ---------------------------------------------------------------------------
diff --git a/config/ac-macros/ha_example.m4 b/config/ac-macros/ha_example.m4
deleted file mode 100644
index f8067931ce6..00000000000
--- a/config/ac-macros/ha_example.m4
+++ /dev/null
@@ -1,30 +0,0 @@
-dnl ---------------------------------------------------------------------------
-dnl Macro: MYSQL_CHECK_EXAMPLEDB
-dnl Sets HAVE_EXAMPLE_DB if --with-example-storage-engine is used
-dnl ---------------------------------------------------------------------------
-AC_DEFUN([MYSQL_CHECK_EXAMPLEDB], [
- AC_ARG_WITH([example-storage-engine],
- [
- --with-example-storage-engine
- Enable the Example Storage Engine],
- [exampledb="$withval"],
- [exampledb=no])
- AC_MSG_CHECKING([for example storage engine])
-
- case "$exampledb" in
- yes )
- AC_DEFINE([HAVE_EXAMPLE_DB], [1], [Builds Example DB])
- AC_MSG_RESULT([yes])
- [exampledb=yes]
- ;;
- * )
- AC_MSG_RESULT([no])
- [exampledb=no]
- ;;
- esac
-
-])
-dnl ---------------------------------------------------------------------------
-dnl END OF MYSQL_CHECK_EXAMPLE SECTION
-dnl ---------------------------------------------------------------------------
-
diff --git a/config/ac-macros/ha_federated.m4 b/config/ac-macros/ha_federated.m4
deleted file mode 100644
index 5c991f31666..00000000000
--- a/config/ac-macros/ha_federated.m4
+++ /dev/null
@@ -1,29 +0,0 @@
-dnl ---------------------------------------------------------------------------
-dnl Macro: MYSQL_CHECK_FEDERATED
-dnl Sets HAVE_FEDERATED if --with-federated-storage-engine is used
-dnl ---------------------------------------------------------------------------
-AC_DEFUN([MYSQL_CHECK_FEDERATED], [
- AC_ARG_WITH([federated-storage-engine],
- [
- --with-federated-storage-engine
- Enable the MySQL Federated Storage Engine],
- [federateddb="$withval"],
- [federateddb=no])
- AC_MSG_CHECKING([for MySQL federated storage engine])
-
- case "$federateddb" in
- yes )
- AC_DEFINE([HAVE_FEDERATED_DB], [1], [Define to enable Federated Handler])
- AC_MSG_RESULT([yes])
- [federateddb=yes]
- ;;
- * )
- AC_MSG_RESULT([no])
- [federateddb=no]
- ;;
- esac
-
-])
-dnl ---------------------------------------------------------------------------
-dnl END OF MYSQL_CHECK_FEDERATED SECTION
-dnl ---------------------------------------------------------------------------
diff --git a/config/ac-macros/ha_innodb.m4 b/config/ac-macros/ha_innodb.m4
deleted file mode 100644
index 287b77c8851..00000000000
--- a/config/ac-macros/ha_innodb.m4
+++ /dev/null
@@ -1,77 +0,0 @@
-dnl ---------------------------------------------------------------------------
-dnl Macro: MYSQL_CHECK_INNODB
-dnl Sets HAVE_INNOBASE_DB if --with-innodb is used
-dnl ---------------------------------------------------------------------------
-
-AC_DEFUN([MYSQL_CHECK_INNODB], [
- AC_ARG_WITH([innodb],
- [
- --without-innodb Do not include the InnoDB table handler],
- [innodb="$withval"],
- [innodb=yes])
-
- AC_MSG_CHECKING([for Innodb])
-
- have_innodb=no
- innodb_includes=
- innodb_libs=
- case "$innodb" in
- yes )
- AC_MSG_RESULT([Using Innodb])
- AC_DEFINE([HAVE_INNOBASE_DB], [1], [Using Innobase DB])
- have_innodb="yes"
- innodb_includes="-I\$(top_builddir)/innobase/include"
- innodb_system_libs=""
-dnl Some libs are listed several times, in order for gcc to sort out
-dnl circular references.
- innodb_libs="\
- \$(top_builddir)/storage/innobase/usr/libusr.a\
- \$(top_builddir)/storage/innobase/srv/libsrv.a\
- \$(top_builddir)/storage/innobase/dict/libdict.a\
- \$(top_builddir)/storage/innobase/que/libque.a\
- \$(top_builddir)/storage/innobase/srv/libsrv.a\
- \$(top_builddir)/storage/innobase/ibuf/libibuf.a\
- \$(top_builddir)/storage/innobase/row/librow.a\
- \$(top_builddir)/storage/innobase/pars/libpars.a\
- \$(top_builddir)/storage/innobase/btr/libbtr.a\
- \$(top_builddir)/storage/innobase/trx/libtrx.a\
- \$(top_builddir)/storage/innobase/read/libread.a\
- \$(top_builddir)/storage/innobase/usr/libusr.a\
- \$(top_builddir)/storage/innobase/buf/libbuf.a\
- \$(top_builddir)/storage/innobase/ibuf/libibuf.a\
- \$(top_builddir)/storage/innobase/eval/libeval.a\
- \$(top_builddir)/storage/innobase/log/liblog.a\
- \$(top_builddir)/storage/innobase/fsp/libfsp.a\
- \$(top_builddir)/storage/innobase/fut/libfut.a\
- \$(top_builddir)/storage/innobase/fil/libfil.a\
- \$(top_builddir)/storage/innobase/lock/liblock.a\
- \$(top_builddir)/storage/innobase/mtr/libmtr.a\
- \$(top_builddir)/storage/innobase/page/libpage.a\
- \$(top_builddir)/storage/innobase/rem/librem.a\
- \$(top_builddir)/storage/innobase/thr/libthr.a\
- \$(top_builddir)/storage/innobase/sync/libsync.a\
- \$(top_builddir)/storage/innobase/data/libdata.a\
- \$(top_builddir)/storage/innobase/mach/libmach.a\
- \$(top_builddir)/storage/innobase/ha/libha.a\
- \$(top_builddir)/storage/innobase/dyn/libdyn.a\
- \$(top_builddir)/storage/innobase/mem/libmem.a\
- \$(top_builddir)/storage/innobase/sync/libsync.a\
- \$(top_builddir)/storage/innobase/ut/libut.a\
- \$(top_builddir)/storage/innobase/os/libos.a\
- \$(top_builddir)/storage/innobase/ut/libut.a"
-
- AC_CHECK_LIB(rt, aio_read, [innodb_system_libs="-lrt"])
- ;;
- * )
- AC_MSG_RESULT([Not using Innodb])
- ;;
- esac
-
- AC_SUBST(innodb_includes)
- AC_SUBST(innodb_libs)
- AC_SUBST(innodb_system_libs)
-])
-
-dnl ---------------------------------------------------------------------------
-dnl END OF MYSQL_CHECK_INNODB SECTION
-dnl ---------------------------------------------------------------------------
diff --git a/config/ac-macros/ha_ndbcluster.m4 b/config/ac-macros/ha_ndbcluster.m4
index 8e839d8fee9..1358807e000 100644
--- a/config/ac-macros/ha_ndbcluster.m4
+++ b/config/ac-macros/ha_ndbcluster.m4
@@ -191,7 +191,6 @@ AC_DEFUN([MYSQL_SETUP_NDBCLUSTER], [
ndbcluster_libs="\$(top_builddir)/storage/ndb/src/.libs/libndbclient.a"
ndbcluster_system_libs=""
ndb_mgmclient_libs="\$(top_builddir)/storage/ndb/src/mgmclient/libndbmgmclient.la"
- mysql_se_objs="$mysql_se_objs ha_ndbcluster_binlog.o"
MYSQL_CHECK_NDB_OPTIONS
NDBCLUSTER_WORKAROUNDS
@@ -282,9 +281,6 @@ AC_DEFUN([MYSQL_SETUP_NDBCLUSTER], [
ndb_bin_am_ldflags=""
fi
- mysql_se_libs="$mysql_se_libs $ndbcluster_libs $ndbcluster_system_libs"
- mysql_se_libs="$mysql_se_libs $NDB_SCI_LIBS"
-
AC_SUBST(NDB_VERSION_MAJOR)
AC_SUBST(NDB_VERSION_MINOR)
AC_SUBST(NDB_VERSION_BUILD)
@@ -302,6 +298,7 @@ AC_DEFUN([MYSQL_SETUP_NDBCLUSTER], [
AC_SUBST(ndbcluster_libs)
AC_SUBST(ndbcluster_system_libs)
AC_SUBST(ndb_mgmclient_libs)
+ AC_SUBST(NDB_SCI_LIBS)
AC_SUBST(ndb_transporter_opt_objs)
AC_SUBST(ndb_port)
@@ -310,7 +307,9 @@ AC_DEFUN([MYSQL_SETUP_NDBCLUSTER], [
AC_SUBST(NDB_DEFS)
AC_SUBST(ndb_cxxflags_fix)
+])
+AC_DEFUN([NDBCLUSTER_CONFIG_FILES], [
AC_CONFIG_FILES(storage/ndb/Makefile storage/ndb/include/Makefile dnl
storage/ndb/src/Makefile storage/ndb/src/common/Makefile dnl
storage/ndb/docs/Makefile dnl
diff --git a/config/ac-macros/ha_partition.m4 b/config/ac-macros/ha_partition.m4
deleted file mode 100644
index 1ce7dedc5f3..00000000000
--- a/config/ac-macros/ha_partition.m4
+++ /dev/null
@@ -1,33 +0,0 @@
-dnl ---------------------------------------------------------------------------
-dnl Macro: MYSQL_CHECK_PARTITIONDB
-dnl Sets HAVE_PARTITION_DB if --with-partition is used
-dnl ---------------------------------------------------------------------------
-AC_DEFUN([MYSQL_CHECK_PARTITIONDB], [
- AC_ARG_WITH([partition],
- [
- --with-partition
- Enable the Partition Storage Engine],
- [partitiondb="$withval"],
- [partitiondb=no])
- AC_MSG_CHECKING([for partition])
-
-dnl case "$partitiondb" in
-dnl yes )
-dnl AC_DEFINE([HAVE_PARTITION_DB], [1], [Builds Partition DB])
-dnl AC_MSG_RESULT([yes])
-dnl [partitiondb=yes]
-dnl ;;
-dnl * )
-dnl AC_MSG_RESULT([no])
-dnl [partitiondb=no]
-dnl ;;
-dnl esac
- AC_DEFINE([HAVE_PARTITION_DB], [1], [Builds Partition DB])
- AC_MSG_RESULT([yes])
- [partitiondb=yes]
-
-])
-dnl ---------------------------------------------------------------------------
-dnl END OF MYSQL_CHECK_PARTITION SECTION
-dnl ---------------------------------------------------------------------------
-
diff --git a/config/ac-macros/ha_tina.m4 b/config/ac-macros/ha_tina.m4
deleted file mode 100644
index fe6e382ce20..00000000000
--- a/config/ac-macros/ha_tina.m4
+++ /dev/null
@@ -1,29 +0,0 @@
-dnl ---------------------------------------------------------------------------
-dnl Macro: MYSQL_CHECK_CSVDB
-dnl Sets HAVE_CSV_DB if --with-csv-storage-engine is used
-dnl ---------------------------------------------------------------------------
-AC_DEFUN([MYSQL_CHECK_CSVDB], [
- AC_ARG_WITH([csv-storage-engine],
- [
- --with-csv-storage-engine
- Enable the CSV Storage Engine],
- [csvdb="$withval"],
- [csvdb=no])
- AC_MSG_CHECKING([for csv storage engine])
-
- case "$csvdb" in
- yes )
- AC_DEFINE([HAVE_CSV_DB], [1], [Builds the CSV Storage Engine])
- AC_MSG_RESULT([yes])
- [csvdb=yes]
- ;;
- * )
- AC_MSG_RESULT([no])
- [csvdb=no]
- ;;
- esac
-
-])
-dnl ---------------------------------------------------------------------------
-dnl END OF MYSQL_CHECK_CSV SECTION
-dnl ---------------------------------------------------------------------------
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 ===========================================================================
diff --git a/config/ac-macros/storage.m4 b/config/ac-macros/storage.m4
deleted file mode 100644
index 4148aed818d..00000000000
--- a/config/ac-macros/storage.m4
+++ /dev/null
@@ -1,55 +0,0 @@
-dnl ---------------------------------------------------------------------------
-dnl Macro: MYSQL_STORAGE_ENGINE
-dnl
-dnl What it does:
-dnl creates --with-xxx configure option
-dnl adds HAVE_XXX to config.h
-dnl appends &xxx_hton, to the list of hanldertons
-dnl appends a dir to the list of source directories
-dnl appends ha_xxx.cc to the list of handler files
-dnl
-dnl all names above are configurable with reasonable defaults.
-dnl
-dnl ---------------------------------------------------------------------------
-
-AC_DEFUN([MYSQL_STORAGE_ENGINE],
-[_MYSQL_STORAGE_ENGINE(
-[$1], dnl name
-m4_default([$2], [$1 storage engine]), dnl verbose name
-m4_default([$3], [$1-storage-engine]), dnl with-name
-m4_default([$4], no), dnl default
-m4_default([$5], [WITH_]AS_TR_CPP([$1])[_STORAGE_ENGINE]),
-m4_default([$6], $1[_hton]), dnl hton
-m4_default([$7], []), dnl path to the code
-m4_default([$8], [ha_$1.o]), dnl path to the handler in
-m4_default([$9], []), dnl path to extra libraries
-[$10], dnl code-if-set
-)])
-
-AC_DEFUN([_MYSQL_STORAGE_ENGINE],
-[
-AC_ARG_WITH([$3], AS_HELP_STRING([--with-$3], [enable $2 (default is $4)]),
-[], [ [with_]m4_bpatsubst([$3], -, _)=['$4']])
-AC_CACHE_CHECK([whether to use $2], [mysql_cv_use_]m4_bpatsubst([$3], -, _),
-[mysql_cv_use_]m4_bpatsubst([$3], -, _)=[$with_]m4_bpatsubst([$3], -, _))
-AH_TEMPLATE([$5], [Build $2])
-if test "[$mysql_cv_use_]m4_bpatsubst([$3], -, _)" != no; then
-if test "$6" != "no"
-then
- AC_DEFINE([$5])
- mysql_se_decls="${mysql_se_decls},$6"
- mysql_se_htons="${mysql_se_htons},&$6"
- if test "$8" != "no"
- then
- mysql_se_objs="$mysql_se_objs $8"
- fi
- mysql_se_dirs="$mysql_se_dirs $7"
- mysql_se_libs="$mysql_se_libs $9"
-else
- mysql_se_plugins="$mysql_se_plugins $7"
-fi
-$10
-fi
-])
-
-dnl ---------------------------------------------------------------------------
diff --git a/configure.in b/configure.in
index e2c94060ae7..70d36ee84f5 100644
--- a/configure.in
+++ b/configure.in
@@ -31,7 +31,7 @@ sinclude(config/ac-macros/alloca.m4)
sinclude(config/ac-macros/check_cpu.m4)
sinclude(config/ac-macros/character_sets.m4)
sinclude(config/ac-macros/compiler_flag.m4)
-sinclude(config/ac-macros/storage.m4)
+sinclude(config/ac-macros/plugins.m4)
sinclude(config/ac-macros/ha_berkeley.m4)
sinclude(config/ac-macros/ha_ndbcluster.m4)
sinclude(config/ac-macros/large_file.m4)
@@ -48,6 +48,92 @@ czech danish dutch english estonian french german greek hungarian \
italian japanese korean norwegian norwegian-ny polish portuguese \
romanian russian serbian slovak spanish swedish ukrainian"
+#--------------------------------------------------------------------
+# Declare our plugin modules
+#--------------------------------------------------------------------
+
+MYSQL_STORAGE_ENGINE(archive,, [Archive Storage Engine],
+ [Archive Storage Engine], [max,max-no-ndb])
+MYSQL_MODULE_DIRECTORY(archive, [storage/archive])
+MYSQL_MODULE_STATIC(archive, [libarchive.a])
+MYSQL_MODULE_DYNAMIC(archive, [ha_archive.la])
+
+MYSQL_STORAGE_ENGINE(berkeley, berkeley-db, [BerkeleyDB Storage Engine],
+ [Transactional Tables using BerkeleyDB], [max,max-no-ndb])
+MYSQL_MODULE_DIRECTORY(berkeley,[storage/bdb])
+MYSQL_MODULE_STATIC(berkeley, [[\$(bdb_libs_with_path)]])
+MYSQL_MODULE_ACTIONS(berkeley, [MYSQL_SETUP_BERKELEY_DB])
+
+MYSQL_STORAGE_ENGINE(blackhole,,[Blackhole Storage Engine],
+ [Basic Write-only Read-never tables], [max,max-no-ndb])
+MYSQL_MODULE_DIRECTORY(blackhole, [storage/blackhole])
+MYSQL_MODULE_STATIC(blackhole, [libblackhole.a])
+MYSQL_MODULE_DYNAMIC(blackhole, [ha_blackhole.la])
+
+MYSQL_STORAGE_ENGINE(csv,, [CSV Storage Engine],
+ [Stores tables in text CSV format])
+MYSQL_MODULE_DIRECTORY(csv, [storage/csv])
+MYSQL_MODULE_STATIC(csv, [libcsv.a])
+
+MYSQL_STORAGE_ENGINE(example,, [Example Storage Engine],
+ [Skeleton for Storage Engines for developers], [max,max-no-ndb])
+MYSQL_MODULE_DIRECTORY(example, [storage/example])
+MYSQL_MODULE_STATIC(example, [libexample.a])
+MYSQL_MODULE_DYNAMIC(example, [ha_example.la])
+
+MYSQL_STORAGE_ENGINE(federated,,[Federated Storage Engine],
+ [Connects to tables on remote MySQL servers], [max,max-no-ndb])
+
+MYSQL_MODULE(ftexample, [Simple Parser],
+ [Simple full-text parser plugin])
+MYSQL_MODULE_DIRECTORY(ftexample, [plugin/fulltext])
+MYSQL_MODULE_STATIC(ftexample, [libftexample.a])
+MYSQL_MODULE_DYNAMIC(ftexample, [ft_example.la])
+
+MYSQL_STORAGE_ENGINE(heap,no, [Memory Storage Engine],
+ [In memory hashed tables])
+MYSQL_MODULE_DIRECTORY(heap, [storage/heap])
+MYSQL_MODULE_STATIC(heap, [libheap.a])
+
+MYSQL_STORAGE_ENGINE(innobase, innodb, [InnoDB Storage Engine],
+ [Transactional Tables using InnoDB], [max,max-no-ndb])
+MYSQL_MODULE_DIRECTORY(innobase, [storage/innobase])
+MYSQL_MODULE_STATIC(innobase, [libinnobase.a])
+MYSQL_MODULE_ACTIONS(innobase, [
+ AC_CHECK_LIB(rt, aio_read, [innodb_system_libs="-lrt"])
+ AC_SUBST(innodb_includes)
+ AC_SUBST(innodb_libs)
+ AC_SUBST(innodb_system_libs)
+ other_configures="$other_configures storage/innobase/configure"
+])
+
+MYSQL_STORAGE_ENGINE(myisam,no, [MyISAM Storage Engine],
+ [Traditional non-transactional MySQL tables])
+MYSQL_MODULE_DIRECTORY(myisam, [storage/myisam])
+MYSQL_MODULE_STATIC(myisam, [libmyisam.a])
+
+MYSQL_STORAGE_ENGINE(myisammrg,no,[MyISAM MERGE Engine],
+ [Merge multiple MySQL tables into one])
+MYSQL_MODULE_DIRECTORY(myisammrg,[storage/myisammrg])
+MYSQL_MODULE_STATIC(myisammrg, [libmyisammrg.a])
+
+MYSQL_STORAGE_ENGINE(ndbcluster, ndbcluster, [Cluster Storage Engine],
+ [High Availability Clustered tables], [max])
+MYSQL_MODULE_DIRECTORY(ndbcluster,[storage/ndb])
+MYSQL_MODULE_STATIC(ndbcluster, [[\$(ndbcluster_libs) \$(ndbcluster_system_libs) \$(NDB_SCI_LIBS)]])
+MYSQL_MODULE_ACTIONS(ndbcluster,[MYSQL_SETUP_NDBCLUSTER])
+
+MYSQL_STORAGE_ENGINE(partition, partition, [Partition Engine],
+ [MySQL Table Partitioning Engine], [max,max-no-ndb])
+
+MYSQL_MODULE_MANDATORY(csv) dnl Used for logging
+MYSQL_MODULE_MANDATORY(heap) dnl Memory tables
+MYSQL_MODULE_MANDATORY(myisam) dnl Default
+MYSQL_MODULE_MANDATORY(myisammrg)
+
+dnl -- ndbcluster requires partition to be enabled
+MYSQL_MODULE_DEPENDS(ndbcluster, partition)
+
#####
#####
@@ -672,6 +758,16 @@ MYSQL_SYS_LARGEFILE
AC_TYPE_SIZE_T
#--------------------------------------------------------------------
+# Check for requested features
+#--------------------------------------------------------------------
+
+MYSQL_CHECK_BIG_TABLES
+MYSQL_CHECK_MAX_INDEXES
+MYSQL_CHECK_REPLICATION
+
+MYSQL_CONFIGURE_PLUGINS([none])
+
+#--------------------------------------------------------------------
# Check for system header files
#--------------------------------------------------------------------
@@ -2416,74 +2512,6 @@ AC_SUBST(readline_basedir)
AC_SUBST(readline_link)
AC_SUBST(readline_h_ln_cmd)
-MYSQL_CHECK_BIG_TABLES
-MYSQL_CHECK_MAX_INDEXES
-MYSQL_CHECK_REPLICATION
-
-MYSQL_STORAGE_ENGINE(innobase,,innodb,,,,storage/innobase,ha_innodb.o,[ dnl
- \$(top_builddir)/storage/innobase/usr/libusr.a dnl
- \$(top_builddir)/storage/innobase/srv/libsrv.a dnl
- \$(top_builddir)/storage/innobase/dict/libdict.a dnl
- \$(top_builddir)/storage/innobase/que/libque.a dnl
- \$(top_builddir)/storage/innobase/srv/libsrv.a dnl
- \$(top_builddir)/storage/innobase/ibuf/libibuf.a dnl
- \$(top_builddir)/storage/innobase/row/librow.a dnl
- \$(top_builddir)/storage/innobase/pars/libpars.a dnl
- \$(top_builddir)/storage/innobase/btr/libbtr.a dnl
- \$(top_builddir)/storage/innobase/trx/libtrx.a dnl
- \$(top_builddir)/storage/innobase/read/libread.a dnl
- \$(top_builddir)/storage/innobase/usr/libusr.a dnl
- \$(top_builddir)/storage/innobase/buf/libbuf.a dnl
- \$(top_builddir)/storage/innobase/ibuf/libibuf.a dnl
- \$(top_builddir)/storage/innobase/eval/libeval.a dnl
- \$(top_builddir)/storage/innobase/log/liblog.a dnl
- \$(top_builddir)/storage/innobase/fsp/libfsp.a dnl
- \$(top_builddir)/storage/innobase/fut/libfut.a dnl
- \$(top_builddir)/storage/innobase/fil/libfil.a dnl
- \$(top_builddir)/storage/innobase/lock/liblock.a dnl
- \$(top_builddir)/storage/innobase/mtr/libmtr.a dnl
- \$(top_builddir)/storage/innobase/page/libpage.a dnl
- \$(top_builddir)/storage/innobase/rem/librem.a dnl
- \$(top_builddir)/storage/innobase/thr/libthr.a dnl
- \$(top_builddir)/storage/innobase/sync/libsync.a dnl
- \$(top_builddir)/storage/innobase/data/libdata.a dnl
- \$(top_builddir)/storage/innobase/mach/libmach.a dnl
- \$(top_builddir)/storage/innobase/ha/libha.a dnl
- \$(top_builddir)/storage/innobase/dyn/libdyn.a dnl
- \$(top_builddir)/storage/innobase/mem/libmem.a dnl
- \$(top_builddir)/storage/innobase/sync/libsync.a dnl
- \$(top_builddir)/storage/innobase/ut/libut.a dnl
- \$(top_builddir)/storage/innobase/os/libos.a dnl
- \$(top_builddir)/storage/innobase/ut/libut.a],[
- AC_CHECK_LIB(rt, aio_read, [innodb_system_libs="-lrt"])
- AC_SUBST(innodb_includes)
- AC_SUBST(innodb_libs)
- AC_SUBST(innodb_system_libs)
- other_configures="$other_configures storage/innobase/configure"
-])
-
-MYSQL_STORAGE_ENGINE(berkeley,,berkeley-db,,,,storage/bdb,,,[
- MYSQL_SETUP_BERKELEY_DB
-])
-MYSQL_STORAGE_ENGINE(example,,,,,,storage/example,no,
- \$(top_builddir)/storage/example/libexample.a,[
- AC_CONFIG_FILES(storage/example/Makefile)
-])
-MYSQL_STORAGE_ENGINE(archive,,,,,,storage/archive,,
- \$(top_builddir)/storage/archive/libarchive.a, [
- AC_CONFIG_FILES(storage/archive/Makefile)
-])
-MYSQL_STORAGE_ENGINE(csv,,,"yes",,tina_hton,storage/csv,no,
- \$(top_builddir)/storage/csv/libcsv.a,[
- AC_CONFIG_FILES(storage/csv/Makefile)
-])
-MYSQL_STORAGE_ENGINE(blackhole)
-MYSQL_STORAGE_ENGINE(federated)
-MYSQL_STORAGE_ENGINE(ndbcluster,,ndbcluster,,,,storage/ndb,,,[
- MYSQL_SETUP_NDBCLUSTER
-])
-MYSQL_STORAGE_ENGINE(partition,,partition)
-
# If we have threads generate some library functions and test programs
sql_server_dirs=
sql_server=
@@ -2539,7 +2567,6 @@ then
AC_SUBST(THREAD_LOBJECTS)
server_scripts="mysqld_safe mysql_install_db"
sql_server_dirs="strings mysys dbug extra regex"
- mysql_se_dirs="storage/myisam storage/myisammrg storage/heap $mysql_se_dirs"
sql_server="$sql_server vio sql"
fi
@@ -2555,12 +2582,9 @@ AC_SUBST(sql_server)
AC_SUBST(thread_dirs)
AC_SUBST(server_scripts)
-AC_SUBST(mysql_se_dirs)
-AC_SUBST(mysql_se_libs)
-AC_SUBST(mysql_se_objs)
-AC_SUBST(mysql_se_htons)
-AC_SUBST(mysql_se_decls)
-AC_SUBST(mysql_se_plugins)
+AC_SUBST(mysql_plugin_dirs)
+AC_SUBST(mysql_plugin_libs)
+AC_SUBST(mysql_plugin_defs)
# Now that sql_client_dirs and sql_server_dirs are stable, determine the union.
@@ -2600,14 +2624,19 @@ done
AC_SUBST(MAKE_BINARY_DISTRIBUTION_OPTIONS)
+NDBCLUSTER_CONFIG_FILES
+
# Output results
AC_CONFIG_FILES(Makefile extra/Makefile mysys/Makefile dnl
- strings/Makefile regex/Makefile storage/Makefile storage/heap/Makefile dnl
+ strings/Makefile regex/Makefile dnl
+ storage/Makefile dnl
+ storage/archive/Makefile storage/bdb/Makefile storage/blackhole/Makefile dnl
+ storage/csv/Makefile storage/example/Makefile storage/heap/Makefile dnl
storage/myisam/Makefile storage/myisammrg/Makefile dnl
man/Makefile BUILD/Makefile vio/Makefile dnl
libmysql/Makefile client/Makefile dnl
pstack/Makefile pstack/aout/Makefile sql/Makefile sql/share/Makefile dnl
- sql/handlerton.cc sql-common/Makefile SSL/Makefile dnl
+ sql/sql_builtin.cc sql-common/Makefile SSL/Makefile dnl
dbug/Makefile scripts/Makefile dnl
include/Makefile sql-bench/Makefile dnl
server-tools/Makefile server-tools/instance-manager/Makefile dnl
diff --git a/include/mysql/plugin.h b/include/mysql/plugin.h
index a7b3606061f..2093043744a 100644
--- a/include/mysql/plugin.h
+++ b/include/mysql/plugin.h
@@ -37,10 +37,25 @@
be a st_mysql_plugin struct for each plugin to be declared.
*/
-#define mysql_declare_plugin \
-int _mysql_plugin_interface_version_= MYSQL_PLUGIN_INTERFACE_VERSION; \
-int _mysql_sizeof_struct_st_plugin_= sizeof(struct st_mysql_plugin); \
+
+#ifndef MYSQL_DYNAMIC_PLUGIN
+#define __DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \
+int VERSION= MYSQL_PLUGIN_INTERFACE_VERSION; \
+int PSIZE= sizeof(struct st_mysql_plugin); \
+struct st_mysql_plugin DECLS[]= {
+#else
+#define __DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \
+int _mysql_plugin_interface_version_= MYSQL_PLUGIN_INTERFACE_VERSION; \
+int _mysql_sizeof_struct_st_plugin_= sizeof(struct st_mysql_plugin); \
struct st_mysql_plugin _mysql_plugin_declarations_[]= {
+#endif
+
+#define _DECLARE_PLUGIN(NAME) \
+__DECLARE_PLUGIN(NAME, builtin_ ## NAME ## _plugin_interface_version, \
+ builtin_ ## NAME ## _sizeof_struct_st_plugin, \
+ builtin_ ## NAME ## _plugin)
+
+#define mysql_declare_plugin(NAME) _DECLARE_PLUGIN(NAME)
#define mysql_declare_plugin_end ,{0,0,0,0,0,0,0,0,0}}
/*
diff --git a/libmysqld/Makefile.am b/libmysqld/Makefile.am
index 6e38fb267d9..32cccf2c942 100644
--- a/libmysqld/Makefile.am
+++ b/libmysqld/Makefile.am
@@ -44,7 +44,10 @@ libmysqlsources = errmsg.c get_password.c libmysql.c client.c pack.c \
noinst_HEADERS = embedded_priv.h emb_qcache.h
sqlsources = derror.cc field.cc field_conv.cc strfunc.cc filesort.cc \
- ha_heap.cc ha_myisam.cc ha_myisammrg.cc handler.cc sql_handler.cc \
+ ha_heap.cc ha_myisam.cc ha_myisammrg.cc \
+ ha_innodb.cc ha_berkeley.cc ha_federated.cc ha_ndbcluster.cc \
+ ha_ndbcluster_binlog.cc ha_partition.cc \
+ handler.cc sql_handler.cc \
hostname.cc init.cc password.c \
item.cc item_buff.cc item_cmpfunc.cc item_create.cc \
item_func.cc item_strfunc.cc item_sum.cc item_timefunc.cc \
@@ -65,17 +68,12 @@ sqlsources = derror.cc field.cc field_conv.cc strfunc.cc filesort.cc \
spatial.cc gstream.cc sql_help.cc tztime.cc sql_cursor.cc \
sp_head.cc sp_pcontext.cc sp.cc sp_cache.cc sp_rcontext.cc \
parse_file.cc sql_view.cc sql_trigger.cc my_decimal.cc \
- event_executor.cc event.cc event_timed.cc \
- rpl_filter.cc sql_partition.cc handlerton.cc sql_plugin.cc \
- sql_tablespace.cc \
- rpl_injector.cc my_user.c partition_info.cc
+ event_executor.cc event.cc event_timed.cc \
+ rpl_filter.cc sql_partition.cc sql_builtin.cc sql_plugin.cc \
+ sql_tablespace.cc \
+ rpl_injector.cc my_user.c partition_info.cc
libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources)
-EXTRA_libmysqld_a_SOURCES = ha_innodb.cc ha_berkeley.cc ha_archive.cc \
- ha_blackhole.cc ha_federated.cc ha_ndbcluster.cc \
- ha_ndbcluster_binlog.cc \
- ha_partition.cc
-libmysqld_a_DEPENDENCIES= @mysql_se_objs@
libmysqld_a_SOURCES=
sqlstoragesources = $(EXTRA_libmysqld_a_SOURCES)
@@ -85,15 +83,11 @@ sql_yacc.cc sql_yacc.h: $(top_srcdir)/sql/sql_yacc.yy
# The following libraries should be included in libmysqld.a
INC_LIB= $(top_builddir)/regex/libregex.a \
- $(top_builddir)/storage/myisam/libmyisam.a \
- $(top_builddir)/storage/myisammrg/libmyisammrg.a \
- $(top_builddir)/storage/archive/libarchive.a \
- $(top_builddir)/storage/heap/libheap.a \
$(top_builddir)/mysys/libmysys.a \
$(top_builddir)/strings/libmystrings.a \
$(top_builddir)/dbug/libdbug.a \
$(top_builddir)/vio/libvio.a \
- @mysql_se_libs@ \
+ @mysql_plugin_libs@ \
$(yassl_las)
if HAVE_YASSL
diff --git a/plugin/Makefile.am b/plugin/Makefile.am
index da4ff0a8d5c..2e98d6a3328 100644
--- a/plugin/Makefile.am
+++ b/plugin/Makefile.am
@@ -1 +1,27 @@
-SUBDIRS= fulltext
+# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Process this file with automake to create Makefile.in
+
+AUTOMAKE_OPTIONS = foreign
+
+# These are built from source in the Docs directory
+EXTRA_DIST =
+SUBDIRS =
+DIST_SUBDIRS = . fulltext
+
+# Don't update the files from bitkeeper
+%::SCCS/s.%
diff --git a/plugin/fulltext/Makefile.am b/plugin/fulltext/Makefile.am
index 4df5a1dc78a..331db7c98f8 100644
--- a/plugin/fulltext/Makefile.am
+++ b/plugin/fulltext/Makefile.am
@@ -1,9 +1,44 @@
#Makefile.am example for a plugin
-pkglibdir=$(libdir)/mysql
-INCLUDES= -I$(top_builddir)/include -I$(top_srcdir)/include
-noinst_LTLIBRARIES= mypluglib.la
-#pkglib_LTLIBRARIES= mypluglib.la
-mypluglib_la_SOURCES= plugin_example.c
-mypluglib_la_LDFLAGS= -module -rpath $(pkglibdir)
+#MYSQL_MODULE(ftexample, [Simple Parser],
+# [Simple full-text parser plugin])
+#MYSQL_MODULE_DIRECTORY(ftexample, [plugin/fulltext])
+#MYSQL_MODULE_STATIC(ftexample, [libftexample.a])
+#MYSQL_MODULE_DYNAMIC(ftexample, [ft_example.la])
+
+#called from the top level Makefile
+
+MYSQLDATAdir = $(localstatedir)
+MYSQLSHAREdir = $(pkgdatadir)
+MYSQLBASEdir= $(prefix)
+MYSQLLIBdir= $(pkglibdir)
+INCLUDES = -I$(top_srcdir)/include \
+ -I$(top_srcdir)/regex \
+ -I$(top_srcdir)/sql \
+ -I$(srcdir)
+WRAPLIBS=
+
+LDADD =
+
+DEFS = @DEFS@
+
+noinst_HEADERS =
+
+EXTRA_LTLIBRARIES = ft_example.la
+pkglib_LTLIBRARIES = @plugin_ftexample_shared_target@
+ft_example_la_LDFLAGS = -module -rpath $(MYSQLLIBdir)
+ft_example_la_CXXFLAGS= $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN
+ft_example_la_CFLAGS= $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN
+ft_example_la_SOURCES = plugin_example.c
+
+
+EXTRA_LIBRARIES = libftexample.a
+noinst_LIBRARIES = @plugin_ftexample_static_target@
+libftexample_a_CXXFLAGS=$(AM_CFLAGS)
+libftexample_a_CFLAGS = $(AM_CFLAGS)
+libftexample_a_SOURCES= plugin_example.c
+
+
+# Don't update the files from bitkeeper
+%::SCCS/s.%
diff --git a/plugin/fulltext/plugin_example.c b/plugin/fulltext/plugin_example.c
index cdf1527b310..9b937453ce4 100644
--- a/plugin/fulltext/plugin_example.c
+++ b/plugin/fulltext/plugin_example.c
@@ -216,7 +216,7 @@ static struct st_mysql_show_var simple_status[]=
Plugin library descriptor
*/
-mysql_declare_plugin
+mysql_declare_plugin(ftexample)
{
MYSQL_FTPARSER_PLUGIN, /* type */
&simple_parser_descriptor, /* descriptor */
diff --git a/sql/Makefile.am b/sql/Makefile.am
index 60e7891931f..2665e3fcfd5 100644
--- a/sql/Makefile.am
+++ b/sql/Makefile.am
@@ -30,10 +30,7 @@ libexec_PROGRAMS = mysqld
noinst_PROGRAMS = gen_lex_hash
bin_PROGRAMS = mysql_tzinfo_to_sql
gen_lex_hash_LDFLAGS = @NOINST_LDFLAGS@
-LDADD = $(top_builddir)/storage/myisam/libmyisam.a \
- $(top_builddir)/storage/myisammrg/libmyisammrg.a \
- $(top_builddir)/storage/heap/libheap.a \
- $(top_builddir)/vio/libvio.a \
+LDADD = $(top_builddir)/vio/libvio.a \
$(top_builddir)/mysys/libmysys.a \
$(top_builddir)/dbug/libdbug.a \
$(top_builddir)/regex/libregex.a \
@@ -41,7 +38,7 @@ LDADD = $(top_builddir)/storage/myisam/libmyisam.a \
mysqld_LDADD = @MYSQLD_EXTRA_LDFLAGS@ \
@pstack_libs@ \
- @mysql_se_objs@ @mysql_se_libs@ \
+ @mysql_plugin_libs@ \
$(LDADD) $(CXXLDFLAGS) $(WRAPLIBS) @LIBDL@ \
@yassl_libs@ @openssl_libs@
noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \
@@ -53,6 +50,9 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \
sql_manager.h sql_map.h sql_string.h unireg.h \
sql_error.h field.h handler.h mysqld_suffix.h \
ha_heap.h ha_myisam.h ha_myisammrg.h ha_partition.h \
+ ha_innodb.h ha_berkeley.h ha_federated.h \
+ ha_ndbcluster.h ha_ndbcluster_binlog.h \
+ ha_ndbcluster_tables.h
opt_range.h protocol.h rpl_tblmap.h \
log.h sql_show.h rpl_rli.h \
sql_select.h structs.h table.h sql_udf.h hash_filo.h\
@@ -61,12 +61,12 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \
rpl_injector.h \
stacktrace.h sql_sort.h sql_cache.h set_var.h \
spatial.h gstream.h client_settings.h tzfile.h \
- tztime.h my_decimal.h\
+ tztime.h my_decimal.h\
sp_head.h sp_pcontext.h sp_rcontext.h sp.h sp_cache.h \
parse_file.h sql_view.h sql_trigger.h \
sql_array.h sql_cursor.h event.h event_priv.h \
sql_plugin.h authors.h sql_partition.h \
- partition_info.h partition_element.h
+ partition_info.h partition_element.h
mysqld_SOURCES = sql_lex.cc sql_handler.cc sql_partition.cc \
item.cc item_sum.cc item_buff.cc item_func.cc \
item_cmpfunc.cc item_strfunc.cc item_timefunc.cc \
@@ -79,7 +79,7 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc sql_partition.cc \
mysqld.cc password.c hash_filo.cc hostname.cc \
set_var.cc sql_parse.cc sql_yacc.yy \
sql_base.cc table.cc sql_select.cc sql_insert.cc \
- sql_prepare.cc sql_error.cc \
+ sql_prepare.cc sql_error.cc \
sql_update.cc sql_delete.cc uniques.cc sql_do.cc \
procedure.cc item_uniq.cc sql_test.cc \
log.cc log_event.cc init.cc derror.cc sql_acl.cc \
@@ -87,6 +87,9 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc sql_partition.cc \
discover.cc time.cc opt_range.cc opt_sum.cc \
records.cc filesort.cc handler.cc \
ha_heap.cc ha_myisam.cc ha_myisammrg.cc \
+ ha_partition.cc ha_innodb.cc ha_berkeley.cc \
+ ha_federated.cc \
+ ha_ndbcluster.cc ha_ndbcluster_binlog.cc \
sql_db.cc sql_table.cc sql_rename.cc sql_crypt.cc \
sql_load.cc mf_iocache.cc field_conv.cc sql_show.cc \
sql_udf.cc sql_analyse.cc sql_analyse.h sql_cache.cc \
@@ -102,15 +105,9 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc sql_partition.cc \
sp_cache.cc parse_file.cc sql_trigger.cc \
event_executor.cc event.cc event_timed.cc \
sql_plugin.cc sql_binlog.cc \
- handlerton.cc sql_tablespace.cc partition_info.cc
-EXTRA_mysqld_SOURCES = ha_innodb.cc ha_berkeley.cc ha_archive.cc \
- ha_innodb.h ha_berkeley.h ha_archive.h \
- ha_blackhole.cc ha_federated.cc ha_ndbcluster.cc \
- ha_blackhole.h ha_federated.h ha_ndbcluster.h \
- ha_ndbcluster_binlog.cc ha_ndbcluster_binlog.h \
- ha_ndbcluster_tables.h \
- ha_partition.cc ha_partition.h
-mysqld_DEPENDENCIES = @mysql_se_objs@
+ sql_builtin.cc sql_tablespace.cc partition_info.cc
+
+
gen_lex_hash_SOURCES = gen_lex_hash.cc
gen_lex_hash_LDADD = $(LDADD) $(CXXLDFLAGS)
mysql_tzinfo_to_sql_SOURCES = mysql_tzinfo_to_sql.cc
@@ -162,6 +159,7 @@ sql_yacc.o: sql_yacc.cc sql_yacc.h $(HEADERS)
lex_hash.h: gen_lex_hash$(EXEEXT)
./gen_lex_hash$(EXEEXT) > $@
+# the following three should eventually be moved out of this directory
ha_berkeley.o: ha_berkeley.cc ha_berkeley.h
$(CXXCOMPILE) @bdb_includes@ $(LM_CFLAGS) -c $<
diff --git a/sql/ha_berkeley.cc b/sql/ha_berkeley.cc
index 6ea4cc9aeb5..0fabd00faa3 100644
--- a/sql/ha_berkeley.cc
+++ b/sql/ha_berkeley.cc
@@ -56,10 +56,14 @@
#include <m_ctype.h>
#include <myisampack.h>
#include <hash.h>
+
+#ifdef WITH_BERKELEY_STORAGE_ENGINE
#include "ha_berkeley.h"
#include "sql_manager.h"
#include <stdarg.h>
+#include <mysql/plugin.h>
+
#define HA_BERKELEY_ROWS_IN_TABLE 10000 /* to get optimization right */
#define HA_BERKELEY_RANGE_COUNT 100
#define HA_BERKELEY_MAX_ROWS 10000000 /* Max rows in table */
@@ -2725,3 +2729,17 @@ bool ha_berkeley::check_if_incompatible_data(HA_CREATE_INFO *info,
}
+mysql_declare_plugin(berkeley)
+{
+ MYSQL_STORAGE_ENGINE_PLUGIN,
+ &berkeley_hton,
+ berkeley_hton.name,
+ "MySQL AB",
+ "BerkeleyDB Storage Engine",
+ NULL, /* Plugin Init */
+ NULL, /* Plugin Deinit */
+ 0x0100 /* 1.0 */,
+}
+mysql_declare_plugin_end;
+
+#endif
diff --git a/sql/ha_federated.cc b/sql/ha_federated.cc
index 129a44b5721..f1d2b0025a9 100644
--- a/sql/ha_federated.cc
+++ b/sql/ha_federated.cc
@@ -351,9 +351,13 @@
#pragma implementation // gcc: Class implementation
#endif
+#ifdef WITH_FEDERATED_STORAGE_ENGINE
#include "ha_federated.h"
#include "m_string.h"
+
+#include <mysql/plugin.h>
+
/* Variables for federated share methods */
static HASH federated_open_tables; // To track open tables
pthread_mutex_t federated_mutex; // To init the hash
@@ -2804,3 +2808,18 @@ int ha_federated::execute_simple_query(const char *query, int len)
DBUG_RETURN(0);
}
+
+mysql_declare_plugin(federated)
+{
+ MYSQL_STORAGE_ENGINE_PLUGIN,
+ &federated_hton,
+ federated_hton.name,
+ "Patrick Galbraith and Brian Aker, MySQL AB",
+ "Federated Storage Engine",
+ NULL, /* Plugin Init */
+ NULL, /* Plugin Deinit */
+ 0x0100 /* 1.0 */,
+}
+mysql_declare_plugin_end;
+
+#endif
diff --git a/sql/ha_heap.cc b/sql/ha_heap.cc
index f20dfe259fb..1223de37af8 100644
--- a/sql/ha_heap.cc
+++ b/sql/ha_heap.cc
@@ -706,3 +706,16 @@ bool ha_heap::check_if_incompatible_data(HA_CREATE_INFO *info,
return COMPATIBLE_DATA_NO;
return COMPATIBLE_DATA_YES;
}
+
+mysql_declare_plugin(heap)
+{
+ MYSQL_STORAGE_ENGINE_PLUGIN,
+ &heap_hton,
+ heap_hton.name,
+ NULL,
+ heap_hton.comment,
+ NULL,
+ NULL,
+ 0
+}
+mysql_declare_plugin_end;
diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc
index 1b0f4c34acc..e94b08cf4fb 100644
--- a/sql/ha_innodb.cc
+++ b/sql/ha_innodb.cc
@@ -42,6 +42,7 @@ have disables the InnoDB inlining in this file. */
#define MAX_ULONG_BIT ((ulong) 1 << (sizeof(ulong)*8-1))
+#ifdef WITH_INNOBASE_STORAGE_ENGINE
#include "ha_innodb.h"
pthread_mutex_t innobase_share_mutex, /* to protect innobase_open_files */
@@ -7533,3 +7534,19 @@ bool ha_innobase::check_if_incompatible_data(
return COMPATIBLE_DATA_YES;
}
+
+
+mysql_declare_plugin(innobase)
+{
+ MYSQL_STORAGE_ENGINE_PLUGIN,
+ &innobase_hton,
+ innobase_hton.name,
+ "Innobase OY",
+ "InnoDB Storage Engine",
+ NULL, /* Plugin Init */
+ NULL, /* Plugin Deinit */
+ 0x0100 /* 1.0 */,
+}
+mysql_declare_plugin_end;
+
+#endif
diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc
index ec39ee00efc..9a0a4a9896f 100644
--- a/sql/ha_myisam.cc
+++ b/sql/ha_myisam.cc
@@ -31,6 +31,8 @@
#include "../storage/myisam/rt_index.h"
#endif
+#include <mysql/plugin.h>
+
ulong myisam_recover_options= HA_RECOVER_NONE;
/* bits in myisam_recover_options */
@@ -1787,3 +1789,17 @@ bool ha_myisam::check_if_incompatible_data(HA_CREATE_INFO *info,
return COMPATIBLE_DATA_NO;
return COMPATIBLE_DATA_YES;
}
+
+
+mysql_declare_plugin(myisam)
+{
+ MYSQL_STORAGE_ENGINE_PLUGIN,
+ &myisam_hton,
+ myisam_hton.name,
+ "MySQL AB",
+ "MyISAM Storage Engine",
+ NULL, /* Plugin Init */
+ NULL, /* Plugin Deinit */
+ 0x0100 /* 1.0 */,
+}
+mysql_declare_plugin_end;
diff --git a/sql/ha_myisammrg.cc b/sql/ha_myisammrg.cc
index 0ce4e1d8bcb..8130a5d939a 100644
--- a/sql/ha_myisammrg.cc
+++ b/sql/ha_myisammrg.cc
@@ -28,6 +28,8 @@
#include "../storage/myisammrg/myrg_def.h"
#endif
+#include <mysql/plugin.h>
+
/*****************************************************************************
** MyISAM MERGE tables
*****************************************************************************/
@@ -573,3 +575,16 @@ bool ha_myisammrg::check_if_incompatible_data(HA_CREATE_INFO *info,
*/
return COMPATIBLE_DATA_NO;
}
+
+mysql_declare_plugin(myisammrg)
+{
+ MYSQL_STORAGE_ENGINE_PLUGIN,
+ &myisammrg_hton,
+ myisammrg_hton.name,
+ "MySQL AB",
+ "MyISAMMRG Storage Engine",
+ NULL, /* Plugin Init */
+ NULL, /* Plugin Deinit */
+ 0x0100 /* 1.0 */,
+}
+mysql_declare_plugin_end;
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index 28e026b8a10..83367fa4bee 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -27,6 +27,7 @@
#include "mysql_priv.h"
#include <my_dir.h>
+#ifdef WITH_NDBCLUSTER_STORAGE_ENGINE
#include "ha_ndbcluster.h"
#include <ndbapi/NdbApi.hpp>
#include <ndbapi/NdbScanFilter.hpp>
@@ -36,6 +37,8 @@
#include "ha_ndbcluster_binlog.h"
#include "ha_ndbcluster_tables.h"
+#include <mysql/plugin.h>
+
#ifdef ndb_dynamite
#undef assert
#define assert(x) do { if(x) break; ::printf("%s %d: assert failed: %s\n", __FILE__, __LINE__, #x); ::fflush(stdout); ::signal(SIGABRT,SIG_DFL); ::abort(); ::kill(::getpid(),6); ::kill(::getpid(),9); } while (0)
@@ -10146,3 +10149,19 @@ static int ndbcluster_fill_files_table(THD *thd, TABLE_LIST *tables, COND *cond)
}
DBUG_RETURN(0);
}
+
+
+mysql_declare_plugin(ndbcluster)
+{
+ MYSQL_STORAGE_ENGINE_PLUGIN,
+ &ndbcluster_hton,
+ ndbcluster_hton.name,
+ "MySQL AB",
+ "NDB Storage Engine",
+ NULL, /* Plugin Init */
+ NULL, /* Plugin Deinit */
+ 0x0100 /* 1.0 */,
+}
+mysql_declare_plugin_end;
+
+#endif
diff --git a/sql/ha_ndbcluster_binlog.cc b/sql/ha_ndbcluster_binlog.cc
index 60ccb661703..b248bb8534a 100644
--- a/sql/ha_ndbcluster_binlog.cc
+++ b/sql/ha_ndbcluster_binlog.cc
@@ -16,6 +16,7 @@
*/
#include "mysql_priv.h"
+#ifdef WITH_NDBCLUSTER_STORAGE_ENGINE
#include "ha_ndbcluster.h"
#ifdef HAVE_NDB_BINLOG
@@ -3510,3 +3511,4 @@ ndbcluster_show_status_binlog(THD* thd, stat_print_fn *stat_print,
}
#endif /* HAVE_NDB_BINLOG */
+#endif
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc
index 3ee9a2954eb..fc9985cf87f 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -54,8 +54,11 @@
#include "mysql_priv.h"
+#ifdef WITH_PARTITION_STORAGE_ENGINE
#include "ha_partition.h"
+#include <mysql/plugin.h>
+
static const char *ha_par_ext= ".par";
#ifdef NOT_USED
static int free_share(PARTITION_SHARE * share);
@@ -5487,3 +5490,19 @@ static int free_share(PARTITION_SHARE *share)
return 0;
}
#endif /* NOT_USED */
+
+
+mysql_declare_plugin(partition)
+{
+ MYSQL_STORAGE_ENGINE_PLUGIN,
+ &partition_hton,
+ partition_hton.name,
+ "Mikael Ronstrom, MySQL AB",
+ "Partitioning Engine",
+ NULL, /* Plugin Init */
+ NULL, /* Plugin Deinit */
+ 0x0100 /* 1.0 */,
+}
+mysql_declare_plugin_end;
+
+#endif
diff --git a/sql/handler.cc b/sql/handler.cc
index 808dd0841c5..56938f2eff7 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -35,6 +35,7 @@
#define NDB_MAX_ATTRIBUTES_IN_TABLE 128
#include "ha_ndbcluster.h"
#endif
+
#ifdef WITH_PARTITION_STORAGE_ENGINE
#include "ha_partition.h"
#endif
@@ -43,7 +44,7 @@
#include "ha_innodb.h"
#endif
-extern handlerton *sys_table_types[];
+static handlerton *installed_htons[128];
#define BITMAP_STACKBUF_SIZE (128/8)
@@ -138,30 +139,8 @@ handlerton *ha_resolve_by_name(THD *thd, LEX_STRING *name)
}
-struct plugin_find_dbtype_st
-{
- enum legacy_db_type db_type;
- handlerton *hton;
-};
-
-
-static my_bool plugin_find_dbtype(THD *unused, st_plugin_int *plugin,
- void *arg)
-{
- handlerton *types= (handlerton *) plugin->plugin->info;
- if (types->db_type == ((struct plugin_find_dbtype_st *)arg)->db_type)
- {
- ((struct plugin_find_dbtype_st *)arg)->hton= types;
- return TRUE;
- }
- return FALSE;
-}
-
-
const char *ha_get_storage_engine(enum legacy_db_type db_type)
{
- struct plugin_find_dbtype_st info;
-
switch (db_type)
{
case DB_TYPE_DEFAULT:
@@ -169,13 +148,10 @@ const char *ha_get_storage_engine(enum legacy_db_type db_type)
case DB_TYPE_UNKNOWN:
return "UNKNOWN";
default:
- info.db_type= db_type;
-
- if (!plugin_foreach(NULL, plugin_find_dbtype,
- MYSQL_STORAGE_ENGINE_PLUGIN, &info))
+ if (db_type > DB_TYPE_UNKNOWN && db_type < DB_TYPE_DEFAULT &&
+ installed_htons[db_type])
+ return installed_htons[db_type]->name;
return "*NONE*";
-
- return info.hton->name;
}
}
@@ -190,8 +166,6 @@ static handler *create_default(TABLE_SHARE *table)
handlerton *ha_resolve_by_legacy_type(THD *thd, enum legacy_db_type db_type)
{
- struct plugin_find_dbtype_st info;
-
switch (db_type)
{
case DB_TYPE_DEFAULT:
@@ -202,12 +176,9 @@ handlerton *ha_resolve_by_legacy_type(THD *thd, enum legacy_db_type db_type)
case DB_TYPE_UNKNOWN:
return NULL;
default:
- info.db_type= db_type;
- if (!plugin_foreach(NULL, plugin_find_dbtype,
- MYSQL_STORAGE_ENGINE_PLUGIN, &info))
+ if (db_type > DB_TYPE_UNKNOWN && db_type < DB_TYPE_DEFAULT)
+ return installed_htons[db_type];
return NULL;
-
- return info.hton;
}
}
@@ -394,32 +365,77 @@ static int ha_finish_errors(void)
}
-static void ha_was_inited_ok(handlerton *ht)
+int ha_finalize_handlerton(st_plugin_int *plugin)
{
- uint tmp= ht->savepoint_offset;
- ht->savepoint_offset= savepoint_alloc_size;
- savepoint_alloc_size+= tmp;
- ht->slot= total_ha++;
- if (ht->prepare)
- total_ha_2pc++;
+ handlerton *hton;
+ DBUG_ENTER("ha_finalize_handlerton");
+
+ if (!(hton= (handlerton *) plugin->plugin->info))
+ DBUG_RETURN(1);
+
+ switch (hton->state)
+ {
+ case SHOW_OPTION_NO:
+ case SHOW_OPTION_DISABLED:
+ break;
+ case SHOW_OPTION_YES:
+ if (hton->panic && hton->panic(HA_PANIC_CLOSE))
+ DBUG_RETURN(1);
+ if (installed_htons[hton->db_type] == hton)
+ installed_htons[hton->db_type]= NULL;
+ break;
+ };
+ DBUG_RETURN(0);
}
-int ha_initialize_handlerton(handlerton *hton)
+int ha_initialize_handlerton(st_plugin_int *plugin)
{
+ handlerton *hton;
DBUG_ENTER("ha_initialize_handlerton");
- if (hton == NULL)
+ if (!(hton= (handlerton *) plugin->plugin->info))
DBUG_RETURN(1);
- switch (hton->state)
- {
+ /* for the sake of sanity, we set the handlerton name to be the
+ same as the plugin name */
+ hton->name= plugin->name.str;
+
+
+ switch (hton->state) {
case SHOW_OPTION_NO:
break;
case SHOW_OPTION_YES:
if (!hton->init || !hton->init())
{
- ha_was_inited_ok(hton);
+ uint tmp= hton->savepoint_offset;
+ hton->savepoint_offset= savepoint_alloc_size;
+ savepoint_alloc_size+= tmp;
+ hton->slot= total_ha++;
+ if (hton->prepare)
+ total_ha_2pc++;
+
+ /* now check the db_type for conflict */
+ if (hton->db_type <= DB_TYPE_UNKNOWN ||
+ hton->db_type >= DB_TYPE_DEFAULT ||
+ installed_htons[hton->db_type])
+ {
+ int idx= (int) DB_TYPE_FIRST_DYNAMIC;
+
+ while (idx < (int) DB_TYPE_DEFAULT && installed_htons[idx])
+ idx++;
+
+ if (idx == (int) DB_TYPE_DEFAULT)
+ {
+ sql_print_warning("Too many storage engines!");
+ DBUG_RETURN(1);
+ }
+ if (hton->db_type != DB_TYPE_UNKNOWN)
+ sql_print_warning("Storage engine '%s' has conflicting typecode. "
+ "Assigning value %d.", hton->name, idx);
+ hton->db_type= (enum legacy_db_type) idx;
+ }
+ installed_htons[hton->db_type]= hton;
break;
}
/* fall through */
@@ -436,7 +452,7 @@ static my_bool init_handlerton(THD *unused1, st_plugin_int *plugin,
{
if (plugin->state == PLUGIN_IS_UNINITIALIZED)
{
- ha_initialize_handlerton((handlerton *) plugin->plugin->info);
+ ha_initialize_handlerton(plugin);
plugin->state= PLUGIN_IS_READY;
}
return FALSE;
@@ -447,12 +463,15 @@ int ha_init()
{
int error= 0;
total_ha= savepoint_alloc_size= 0;
+ DBUG_ENTER("ha_init");
+
+ bzero(installed_htons, sizeof(installed_htons));
if (ha_init_errors())
- return 1;
+ DBUG_RETURN(1);
if (plugin_foreach(NULL, init_handlerton, MYSQL_STORAGE_ENGINE_PLUGIN, 0))
- return 1;
+ DBUG_RETURN(1);
DBUG_ASSERT(total_ha < MAX_HA);
/*
@@ -462,37 +481,7 @@ int ha_init()
*/
opt_using_transactions= total_ha>(ulong)opt_bin_log;
savepoint_alloc_size+= sizeof(SAVEPOINT);
- return error;
-}
-
-
-int ha_register_builtin_plugins()
-{
- handlerton **hton;
- uint size= 0;
- struct st_mysql_plugin *plugin;
- DBUG_ENTER("ha_register_builtin_plugins");
-
- for (hton= sys_table_types; *hton; hton++)
- size+= sizeof(struct st_mysql_plugin);
-
- if (!(plugin= (struct st_mysql_plugin *)
- my_once_alloc(size, MYF(MY_WME | MY_ZEROFILL))))
- DBUG_RETURN(1);
-
- for (hton= sys_table_types; *hton; hton++, plugin++)
- {
- plugin->type= MYSQL_STORAGE_ENGINE_PLUGIN;
- plugin->info= *hton;
- plugin->version= 0;
- plugin->name= (*hton)->name;
- plugin->author= NULL;
- plugin->descr= (*hton)->comment;
-
- if (plugin_register_builtin(plugin))
- DBUG_RETURN(1);
- }
- DBUG_RETURN(0);
+ DBUG_RETURN(error);
}
diff --git a/sql/handler.h b/sql/handler.h
index e93fdfe67e3..90bee61dc14 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -233,6 +233,7 @@ enum legacy_db_type
DB_TYPE_BLACKHOLE_DB,
DB_TYPE_PARTITION_DB,
DB_TYPE_BINLOG,
+ DB_TYPE_FIRST_DYNAMIC=32,
DB_TYPE_DEFAULT=127 // Must be last
};
@@ -1545,8 +1546,8 @@ static inline bool ha_storage_engine_is_enabled(const handlerton *db_type)
/* basic stuff */
int ha_init(void);
-int ha_register_builtin_plugins();
-int ha_initialize_handlerton(handlerton *hton);
+int ha_initialize_handlerton(st_plugin_int *plugin);
+int ha_finalize_handlerton(st_plugin_int *plugin);
TYPELIB *ha_known_exts(void);
int ha_panic(enum ha_panic_function flag);
diff --git a/sql/handlerton-win.cc b/sql/handlerton-win.cc
deleted file mode 100644
index 9ce4eab2444..00000000000
--- a/sql/handlerton-win.cc
+++ /dev/null
@@ -1,72 +0,0 @@
-#include "mysql_priv.h"
-
-extern handlerton heap_hton;
-extern handlerton myisam_hton;
-extern handlerton myisammrg_hton;
-extern handlerton binlog_hton;
-#ifdef WITH_INNOBASE_STORAGE_ENGINE
-extern handlerton innobase_hton;
-#endif
-#ifdef WITH_BERKELEY_STORAGE_ENGINE
-extern handlerton berkeley_hton;
-#endif
-#ifdef WITH_EXAMPLE_STORAGE_ENGINE
-extern handlerton example_hton;
-#endif
-#ifdef WITH_ARCHIVE_STORAGE_ENGINE
-extern handlerton archive_hton;
-#endif
-#ifdef WITH_CSV_STORAGE_ENGINE
-extern handlerton tina_hton;
-#endif
-#ifdef WITH_BLACKHOLE_STORAGE_ENGINE
-extern handlerton blackhole_hton;
-#endif
-#ifdef WITH_FEDERATED_STORAGE_ENGINE
-extern handlerton federated_hton;
-#endif
-#ifdef WITH_NDBCLUSTER_STORAGE_ENGINE
-extern handlerton ndbcluster_hton;
-#endif
-#ifdef WITH_PARTITION_STORAGE_ENGINE
-extern handlerton partition_hton;
-#endif
-
-/*
- This array is used for processing compiled in engines.
-*/
-handlerton *sys_table_types[]=
-{
- &heap_hton,
- &myisam_hton,
-#ifdef WITH_INNOBASE_STORAGE_ENGINE
- &innobase_hton,
-#endif
-#ifdef WITH_BERKELEY_STORAGE_ENGINE
- &berkeley_hton,
-#endif
-#ifdef WITH_EXAMPLE_STORAGE_ENGINE
- &example_hton,
-#endif
-#ifdef WITH_ARCHIVE_STORAGE_ENGINE
- &archive_hton,
-#endif
-#ifdef WITH_CSV_STORAGE_ENGINE
- &tina_hton,
-#endif
-#ifdef WITH_BLACKHOLE_STORAGE_ENGINE
- &blackhole_hton,
-#endif
-#ifdef WITH_FEDERATED_STORAGE_ENGINE
- &federated_hton,
-#endif
-#ifdef WITH_NDBCLUSTER_STORAGE_ENGINE
- &ndbcluster_hton,
-#endif
-#ifdef WITH_PARTITION_STORAGE_ENGINE
- &partition_hton,
-#endif
- &myisammrg_hton,
- &binlog_hton,
- NULL
-};
diff --git a/sql/handlerton.cc.in b/sql/handlerton.cc.in
deleted file mode 100644
index 55af8cdd8cf..00000000000
--- a/sql/handlerton.cc.in
+++ /dev/null
@@ -1,14 +0,0 @@
-
-#include "mysql_priv.h"
-
-extern handlerton heap_hton,myisam_hton,myisammrg_hton,
- binlog_hton@mysql_se_decls@;
-
-/*
- This array is used for processing compiled in engines.
-*/
-handlerton *sys_table_types[]=
-{
- &heap_hton,&myisam_hton@mysql_se_htons@,&myisammrg_hton,&binlog_hton,NULL
-};
-
diff --git a/sql/log.cc b/sql/log.cc
index 5c67443d238..82f430f968f 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -34,6 +34,8 @@
#include "message.h"
#endif
+#include <mysql/plugin.h>
+
/* max size of the log message */
#define MAX_LOG_BUFFER_SIZE 1024
#define MAX_USER_HOST_SIZE 512
@@ -4331,3 +4333,16 @@ err1:
return 1;
}
+
+mysql_declare_plugin(binlog)
+{
+ MYSQL_STORAGE_ENGINE_PLUGIN,
+ &binlog_hton,
+ binlog_hton.name,
+ "MySQL AB",
+ "Binlog Engine",
+ NULL, /* Plugin Init */
+ NULL, /* Plugin Deinit */
+ 0x0100 /* 1.0 */,
+}
+mysql_declare_plugin_end;
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 71067630535..0c7908c6b1a 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -2703,12 +2703,6 @@ static int init_common_variables(const char *conf_file_name, int argc,
return 1;
}
- if (ha_register_builtin_plugins())
- {
- sql_print_error("Failed to register built-in storage engines.");
- return 1;
- }
-
load_defaults(conf_file_name, groups, &argc, &argv);
defaults_argv=argv;
get_options(argc,argv);
@@ -3077,6 +3071,19 @@ static int init_server_components()
}
}
+ if (xid_cache_init())
+ {
+ sql_print_error("Out of memory");
+ unireg_abort(1);
+ }
+
+ /* We have to initialize the storage engines before CSV logging */
+ if (ha_init())
+ {
+ sql_print_error("Can't init databases");
+ unireg_abort(1);
+ }
+
#ifdef WITH_CSV_STORAGE_ENGINE
if (opt_bootstrap)
log_output_options= LOG_FILE;
@@ -3240,17 +3247,6 @@ server.");
using_update_log=1;
}
- if (xid_cache_init())
- {
- sql_print_error("Out of memory");
- unireg_abort(1);
- }
- if (ha_init())
- {
- sql_print_error("Can't init databases");
- unireg_abort(1);
- }
-
/*
Check that the default storage engine is actually available.
*/
diff --git a/sql/partition_info.cc b/sql/partition_info.cc
index e2bf37d6ef3..9646e913851 100644
--- a/sql/partition_info.cc
+++ b/sql/partition_info.cc
@@ -21,9 +21,10 @@
#endif
#include "mysql_priv.h"
-#include "ha_partition.h"
#ifdef WITH_PARTITION_STORAGE_ENGINE
+#include "ha_partition.h"
+
partition_info *partition_info::get_clone()
{
diff --git a/sql/sql_builtin.cc.in b/sql/sql_builtin.cc.in
new file mode 100644
index 00000000000..18705aa3dfb
--- /dev/null
+++ b/sql/sql_builtin.cc.in
@@ -0,0 +1,13 @@
+
+#include <mysql/plugin.h>
+
+typedef struct st_mysql_plugin builtin_plugin[];
+
+extern builtin_plugin
+ builtin_binlog_plugin@mysql_plugin_defs@;
+
+struct st_mysql_plugin *mysqld_builtins[]=
+{
+ builtin_binlog_plugin@mysql_plugin_defs@,(struct st_mysql_plugin *)0
+};
+
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index 4365d5b04ce..44b0fe1a2f1 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -21,7 +21,9 @@
*/
#include "mysql_priv.h"
+#ifdef WITH_INNOBASE_STORAGE_ENGINE
#include "ha_innodb.h"
+#endif
#include "sql_select.h"
#include "sp_head.h"
#include "sql_trigger.h"
diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc
index 3d42bfea104..70dfb8bded9 100644
--- a/sql/sql_plugin.cc
+++ b/sql/sql_plugin.cc
@@ -19,6 +19,8 @@
#define REPORT_TO_LOG 1
#define REPORT_TO_USER 2
+extern struct st_mysql_plugin *mysqld_builtins[];
+
char *opt_plugin_dir_ptr;
char opt_plugin_dir[FN_REFLEN];
LEX_STRING plugin_type_names[]=
@@ -540,6 +542,53 @@ err:
DBUG_RETURN(1);
}
+static int plugin_finalize(THD *thd, struct st_plugin_int *plugin)
+{
+ int rc;
+ DBUG_ENTER("plugin_finalize");
+
+ if (plugin->ref_count)
+ {
+ push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, 0,
+ "Plugin is busy and will be uninstalled on shutdown");
+ goto err;
+ }
+
+ switch (plugin->plugin->type)
+ {
+ case MYSQL_STORAGE_ENGINE_PLUGIN:
+ if (ha_finalize_handlerton(plugin))
+ {
+ push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, 0,
+ "Storage engine shutdown failed. "
+ "It will be uninstalled on shutdown");
+ sql_print_warning("Storage engine '%s' shutdown failed. "
+ "It will be uninstalled on shutdown", plugin->name.str);
+ goto err;
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (plugin->plugin->deinit)
+ {
+ if ((rc= plugin->plugin->deinit()))
+ {
+ push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, 0,
+ "Plugin deinit failed. "
+ "It will be uninstalled on shutdown");
+ sql_print_warning("Plugin '%s' deinit failed. "
+ "It will be uninstalled on shutdown", plugin->name.str);
+ goto err;
+ }
+ }
+
+ DBUG_RETURN(0);
+err:
+ DBUG_RETURN(1);
+}
+
static void plugin_call_initializer(void)
{
uint i;
@@ -598,6 +647,8 @@ static byte *get_hash_key(const byte *buff, uint *length,
int plugin_init(void)
{
int i;
+ struct st_mysql_plugin **builtins;
+ struct st_mysql_plugin *plugin;
DBUG_ENTER("plugin_init");
if (initialized)
@@ -617,6 +668,16 @@ int plugin_init(void)
get_hash_key, NULL, 0))
goto err;
}
+
+ /* Register all the built-in plugins */
+ for (builtins= mysqld_builtins; *builtins; builtins++)
+ {
+ for (plugin= *builtins; plugin->info; plugin++)
+ {
+ if (plugin_register_builtin(plugin))
+ goto err;
+ }
+ }
initialized= 1;
@@ -823,18 +884,10 @@ my_bool mysql_uninstall_plugin(THD *thd, LEX_STRING *name)
goto err;
}
- if (plugin->ref_count)
- {
- plugin->state= PLUGIN_IS_DELETED;
- push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, 0,
- "Plugin is not deleted, waiting on tables.");
- }
- else
- {
- if (plugin->plugin->deinit)
- plugin->plugin->deinit();
+ if (!plugin_finalize(thd, plugin))
plugin_del(name);
- }
+ else
+ plugin->state= PLUGIN_IS_DELETED;
table->field[0]->store(name->str, name->length, system_charset_info);
table->file->extra(HA_EXTRA_RETRIEVE_ALL_COLS);
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 95433828a1e..042c0397be3 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -111,6 +111,10 @@ static my_bool show_plugins(THD *thd, st_plugin_int *plugin,
CHARSET_INFO *cs= system_charset_info;
char version_buf[20];
+ /* we normally hide all the built-in plugins */
+ if (!plugin->plugin_dl && !thd->lex->verbose)
+ return 0;
+
restore_record(table, s->default_values);
table->field[0]->store(plugin->name.str, plugin->name.length, cs);
@@ -3000,46 +3004,53 @@ int fill_schema_charsets(THD *thd, TABLE_LIST *tables, COND *cond)
}
-int fill_schema_engines(THD *thd, TABLE_LIST *tables, COND *cond)
+static my_bool iter_schema_engines(THD *thd, st_plugin_int *plugin,
+ void *ptable)
{
+ TABLE *table= (TABLE *) ptable;
+ handlerton *hton= (handlerton *) plugin->plugin->info;
const char *wild= thd->lex->wild ? thd->lex->wild->ptr() : NullS;
- TABLE *table= tables->table;
CHARSET_INFO *scs= system_charset_info;
- handlerton **types;
+ DBUG_ENTER("iter_schema_engines");
- DBUG_ENTER("fill_schema_engines");
-
- for (types= sys_table_types; *types; types++)
+ if (!(hton->flags & HTON_HIDDEN))
{
- if ((*types)->flags & HTON_HIDDEN)
- continue;
-
if (!(wild && wild[0] &&
- wild_case_compare(scs, (*types)->name,wild)))
+ wild_case_compare(scs, hton->name,wild)))
{
const char *tmp;
restore_record(table, s->default_values);
- table->field[0]->store((*types)->name, strlen((*types)->name), scs);
- tmp= (*types)->state ? "DISABLED" : "ENABLED";
+ table->field[0]->store(hton->name, strlen(hton->name), scs);
+ tmp= hton->state ? "DISABLED" : "ENABLED";
table->field[1]->store( tmp, strlen(tmp), scs);
- table->field[2]->store((*types)->comment, strlen((*types)->comment), scs);
- tmp= (*types)->commit ? "YES" : "NO";
+ table->field[2]->store(hton->comment, strlen(hton->comment), scs);
+ tmp= hton->commit ? "YES" : "NO";
table->field[3]->store( tmp, strlen(tmp), scs);
- tmp= (*types)->prepare ? "YES" : "NO";
+ tmp= hton->prepare ? "YES" : "NO";
table->field[4]->store( tmp, strlen(tmp), scs);
- tmp= (*types)->savepoint_set ? "YES" : "NO";
+ tmp= hton->savepoint_set ? "YES" : "NO";
table->field[5]->store( tmp, strlen(tmp), scs);
if (schema_table_store_record(thd, table))
DBUG_RETURN(1);
}
}
-
DBUG_RETURN(0);
}
+int fill_schema_engines(THD *thd, TABLE_LIST *tables, COND *cond)
+{
+ const char *wild= thd->lex->wild ? thd->lex->wild->ptr() : NullS;
+ TABLE *table= tables->table;
+ CHARSET_INFO *scs= system_charset_info;
+
+ return plugin_foreach(thd, iter_schema_engines,
+ MYSQL_STORAGE_ENGINE_PLUGIN, table);
+}
+
+
int fill_schema_collation(THD *thd, TABLE_LIST *tables, COND *cond)
{
CHARSET_INFO **cs;
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index f570cbcd782..6a8a4f745ba 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -8173,7 +8173,7 @@ show_param:
if (prepare_schema_table(YYTHD, lex, 0, SCH_OPEN_TABLES))
YYABORT;
}
- | PLUGIN_SYM
+ | opt_full PLUGIN_SYM
{
LEX *lex= Lex;
WARN_DEPRECATED(yythd, "5.2", "SHOW PLUGIN", "'SHOW PLUGINS'");
diff --git a/storage/archive/Makefile.am b/storage/archive/Makefile.am
index 415e0dc8f8f..0920fe1a897 100644
--- a/storage/archive/Makefile.am
+++ b/storage/archive/Makefile.am
@@ -14,20 +14,48 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
- @ZLIB_INCLUDES@
+#called from the top level Makefile
-LDADD = libarchive.a \
- $(top_builddir)/mysys/libmysys.a \
- $(top_builddir)/dbug/libdbug.a \
- $(top_builddir)/strings/libmystrings.a \
- @ZLIB_LIBS@
-pkglib_LIBRARIES = libarchive.a
+MYSQLDATAdir = $(localstatedir)
+MYSQLSHAREdir = $(pkgdatadir)
+MYSQLBASEdir= $(prefix)
+MYSQLLIBdir= $(pkglibdir)
+INCLUDES = -I$(top_srcdir)/include \
+ -I$(top_srcdir)/regex \
+ -I$(top_srcdir)/sql \
+ -I$(srcdir) @ZLIB_INCLUDES@
+WRAPLIBS=
+
+LDADD =
+
+DEFS = @DEFS@
+
+noinst_HEADERS = ha_archive.h azlib.h
noinst_PROGRAMS = archive_test
+
+EXTRA_LTLIBRARIES = ha_archive.la
+pkglib_LTLIBRARIES = @plugin_archive_shared_target@
+ha_archive_la_LDFLAGS = -module -rpath $(MYSQLLIBdir)
+ha_archive_la_CXXFLAGS= $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN
+ha_archive_la_CFLAGS = $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN
+ha_archive_la_SOURCES = ha_archive.cc azio.c
+
+
+EXTRA_LIBRARIES = libarchive.a
+noinst_LIBRARIES = @plugin_archive_static_target@
+libarchive_a_CXXFLAGS = $(AM_CFLAGS)
+libarchive_a_CFLAGS = $(AM_CFLAGS)
+libarchive_a_SOURCES = ha_archive.cc azio.c
+
+
+archive_test_SOURCES = archive_test.c azio.c
+archive_test_CFLAGS = $(AM_CFLAGS)
+archive_test_LDADD = $(top_srcdir)/mysys/libmysys.a \
+ $(top_srcdir)/dbug/libdbug.a \
+ $(top_srcdir)/strings/libmystrings.a \
+ @ZLIB_LIBS@
archive_test_LDFLAGS = @NOINST_LDFLAGS@
-noinst_HEADERS = azlib.h
-libarchive_a_SOURCES = azio.c
-EXTRA_DIST = cmakelists.txt
+
# Don't update the files from bitkeeper
%::SCCS/s.%
diff --git a/sql/ha_archive.cc b/storage/archive/ha_archive.cc
index 403855b6a01..3cbb388bba1 100644
--- a/sql/ha_archive.cc
+++ b/storage/archive/ha_archive.cc
@@ -19,10 +19,13 @@
#endif
#include "mysql_priv.h"
+#include <myisam.h>
#include "ha_archive.h"
#include <my_dir.h>
+#include <mysql/plugin.h>
+
/*
First, if you want to understand storage engines you should look at
ha_example.cc and ha_example.h.
@@ -216,6 +219,8 @@ static byte* archive_get_key(ARCHIVE_SHARE *share,uint *length,
bool archive_db_init()
{
DBUG_ENTER("archive_db_init");
+ if (archive_inited)
+ DBUG_RETURN(FALSE);
if (pthread_mutex_init(&archive_mutex, MY_MUTEX_INIT_FAST))
goto error;
if (hash_init(&archive_open_tables, system_charset_info, 32, 0, 0,
@@ -229,7 +234,6 @@ bool archive_db_init()
DBUG_RETURN(FALSE);
}
error:
- have_archive_db= SHOW_OPTION_DISABLED; // If we couldn't use handler
DBUG_RETURN(TRUE);
}
@@ -237,14 +241,14 @@ error:
Release the archive handler.
SYNOPSIS
- archive_db_end()
+ archive_db_done()
void
RETURN
FALSE OK
*/
-int archive_db_end(ha_panic_function type)
+int archive_db_done()
{
if (archive_inited)
{
@@ -255,6 +259,12 @@ int archive_db_end(ha_panic_function type)
return 0;
}
+
+int archive_db_end(ha_panic_function type)
+{
+ return archive_db_done();
+}
+
ha_archive::ha_archive(TABLE_SHARE *table_arg)
:handler(&archive_hton, table_arg), delayed_insert(0), bulk_insert(0)
{
@@ -781,7 +791,7 @@ int ha_archive::write_row(byte *buf)
if (share->crashed)
DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE);
- statistic_increment(table->in_use->status_var.ha_write_count, &LOCK_status);
+ ha_statistic_increment(&SSV::ha_write_count);
if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_INSERT)
table->timestamp_field->set_time();
pthread_mutex_lock(&share->mutex);
@@ -1098,8 +1108,7 @@ int ha_archive::rnd_next(byte *buf)
DBUG_RETURN(HA_ERR_END_OF_FILE);
scan_rows--;
- statistic_increment(table->in_use->status_var.ha_read_rnd_next_count,
- &LOCK_status);
+ ha_statistic_increment(&SSV::ha_read_rnd_next_count);
current_position= aztell(&archive);
rc= get_row(&archive, buf);
@@ -1135,8 +1144,7 @@ void ha_archive::position(const byte *record)
int ha_archive::rnd_pos(byte * buf, byte *pos)
{
DBUG_ENTER("ha_archive::rnd_pos");
- statistic_increment(table->in_use->status_var.ha_read_rnd_next_count,
- &LOCK_status);
+ ha_statistic_increment(&SSV::ha_read_rnd_next_count);
current_position= (my_off_t)my_get_ptr(pos, ref_length);
(void)azseek(&archive, current_position, SEEK_SET);
@@ -1320,8 +1328,8 @@ THR_LOCK_DATA **ha_archive::store_lock(THD *thd,
*/
if ((lock_type >= TL_WRITE_CONCURRENT_INSERT &&
- lock_type <= TL_WRITE) && !thd->in_lock_tables
- && !thd->tablespace_op)
+ lock_type <= TL_WRITE) && !thd_in_lock_tables(thd)
+ && !thd_tablespace_op(thd))
lock_type = TL_WRITE_ALLOW_WRITE;
/*
@@ -1332,7 +1340,7 @@ THR_LOCK_DATA **ha_archive::store_lock(THD *thd,
concurrent inserts to t2.
*/
- if (lock_type == TL_READ_NO_INSERT && !thd->in_lock_tables)
+ if (lock_type == TL_READ_NO_INSERT && !thd_in_lock_tables(thd))
lock_type = TL_READ;
lock.type=lock_type;
@@ -1443,11 +1451,11 @@ int ha_archive::check(THD* thd, HA_CHECK_OPT* check_opt)
{
int rc= 0;
byte *buf;
- const char *old_proc_info=thd->proc_info;
+ const char *old_proc_info;
ha_rows count= share->rows_recorded;
DBUG_ENTER("ha_archive::check");
- thd->proc_info= "Checking table";
+ old_proc_info= thd_proc_info(thd, "Checking table");
/* Flush any waiting data */
azflush(&(share->archive_write), Z_SYNC_FLUSH);
share->forced_flushes++;
@@ -1472,7 +1480,7 @@ int ha_archive::check(THD* thd, HA_CHECK_OPT* check_opt)
my_free((char*)buf, MYF(0));
- thd->proc_info= old_proc_info;
+ thd_proc_info(thd, old_proc_info);
if ((rc && rc != HA_ERR_END_OF_FILE) || count)
{
@@ -1497,3 +1505,17 @@ bool ha_archive::check_and_repair(THD *thd)
DBUG_RETURN(repair(thd, &check_opt));
}
+
+
+mysql_declare_plugin(archive)
+{
+ MYSQL_STORAGE_ENGINE_PLUGIN,
+ &archive_hton,
+ archive_hton.name,
+ "Brian Aker, MySQL AB",
+ "Archive Storage Engine",
+ NULL, /* Plugin Init */
+ archive_db_done, /* Plugin Deinit */
+ 0x0100 /* 1.0 */,
+}
+mysql_declare_plugin_end;
diff --git a/sql/ha_archive.h b/storage/archive/ha_archive.h
index 9b351b7e8da..b64897ff046 100644
--- a/sql/ha_archive.h
+++ b/storage/archive/ha_archive.h
@@ -19,7 +19,7 @@
#endif
#include <zlib.h>
-#include "../storage/archive/azlib.h"
+#include "azlib.h"
/*
Please read ha_archive.cc first. If you are looking for more general
diff --git a/storage/blackhole/Makefile.am b/storage/blackhole/Makefile.am
new file mode 100644
index 00000000000..060eaffce66
--- /dev/null
+++ b/storage/blackhole/Makefile.am
@@ -0,0 +1,51 @@
+# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+#called from the top level Makefile
+
+MYSQLDATAdir = $(localstatedir)
+MYSQLSHAREdir = $(pkgdatadir)
+MYSQLBASEdir= $(prefix)
+MYSQLLIBdir= $(pkglibdir)
+INCLUDES = -I$(top_srcdir)/include \
+ -I$(top_srcdir)/regex \
+ -I$(top_srcdir)/sql \
+ -I$(srcdir)
+WRAPLIBS=
+
+LDADD =
+
+DEFS = @DEFS@
+
+noinst_HEADERS = ha_blackhole.h
+
+EXTRA_LTLIBRARIES = ha_blackhole.la
+pkglib_LTLIBRARIES = @plugin_blackhole_shared_target@
+ha_blackhole_la_LDFLAGS=-module -rpath $(MYSQLLIBdir)
+ha_blackhole_la_CXXFLAGS=$(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN
+ha_blackhole_la_CFLAGS= $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN
+ha_blackhole_la_SOURCES=ha_blackhole.cc
+
+
+EXTRA_LIBRARIES = libblackhole.a
+noinst_LIBRARIES = @plugin_blackhole_static_target@
+libblackhole_a_CXXFLAGS=$(AM_CFLAGS)
+libblackhole_a_CFLAGS = $(AM_CFLAGS)
+libblackhole_a_SOURCES= ha_blackhole.cc
+
+
+# Don't update the files from bitkeeper
+%::SCCS/s.%
diff --git a/sql/ha_blackhole.cc b/storage/blackhole/ha_blackhole.cc
index 2f5e8ee0abc..31d0b0c3917 100644
--- a/sql/ha_blackhole.cc
+++ b/storage/blackhole/ha_blackhole.cc
@@ -22,6 +22,8 @@
#include "mysql_priv.h"
#include "ha_blackhole.h"
+#include <mysql/plugin.h>
+
/* Static declarations for handlerton */
static handler *blackhole_create_handler(TABLE_SHARE *table);
@@ -250,3 +252,15 @@ int ha_blackhole::index_last(byte * buf)
DBUG_RETURN(HA_ERR_END_OF_FILE);
}
+mysql_declare_plugin(blackhole)
+{
+ MYSQL_STORAGE_ENGINE_PLUGIN,
+ &blackhole_hton,
+ blackhole_hton.name,
+ "MySQL AB",
+ "Blackhole Storage Engine",
+ NULL, /* Plugin Init */
+ NULL, /* Plugin Deinit */
+ 0x0100 /* 1.0 */,
+}
+mysql_declare_plugin_end;
diff --git a/sql/ha_blackhole.h b/storage/blackhole/ha_blackhole.h
index 15e12659aa0..15e12659aa0 100644
--- a/sql/ha_blackhole.h
+++ b/storage/blackhole/ha_blackhole.h
diff --git a/storage/csv/Makefile.am b/storage/csv/Makefile.am
index 5573df720a3..0d3fd654745 100644
--- a/storage/csv/Makefile.am
+++ b/storage/csv/Makefile.am
@@ -25,15 +25,20 @@ INCLUDES = -I$(top_builddir)/include \
-I$(top_srcdir)/regex \
-I$(top_srcdir)/sql \
-I$(srcdir)
-
-pkglib_LIBRARIES = libcsv.a
-
LDADD =
DEFS = @DEFS@
+noinst_HEADERS = ha_tina.h
+
+EXTRA_LTLIBRARIES = ha_csv.la
+pkglib_LTLIBRARIES = @plugin_csv_shared_target@
+ha_csv_la_LDFLAGS = -module -rpath $(MYSQLLIBdir)
+ha_csv_la_CXXFLAGS = $(AM_CFLAGS) -DMYSQL_PLUGIN
+ha_csv_la_SOURCES = ha_tina.cc
+EXTRA_LIBRARIES = libcsv.a
+noinst_LIBRARIES = @plugin_csv_static_target@
libcsv_a_CXXFLAGS = $(AM_CFLAGS)
-noinst_HEADERS = ha_tina.h
libcsv_a_SOURCES = ha_tina.cc
# Don't update the files from bitkeeper
diff --git a/storage/csv/ha_tina.cc b/storage/csv/ha_tina.cc
index aed861279d9..8b1cfe71fa2 100644
--- a/storage/csv/ha_tina.cc
+++ b/storage/csv/ha_tina.cc
@@ -1398,8 +1398,8 @@ bool ha_tina::check_if_incompatible_data(HA_CREATE_INFO *info,
return COMPATIBLE_DATA_YES;
}
-#ifdef MYSQL_PLUGIN
-mysql_declare_plugin
+
+mysql_declare_plugin(csv)
{
MYSQL_STORAGE_ENGINE_PLUGIN,
&tina_hton,
@@ -1411,4 +1411,4 @@ mysql_declare_plugin
0x0100 /* 1.0 */,
}
mysql_declare_plugin_end;
-#endif
+
diff --git a/storage/example/Makefile.am b/storage/example/Makefile.am
index 518d82abe2d..5565c5e85fc 100644
--- a/storage/example/Makefile.am
+++ b/storage/example/Makefile.am
@@ -1,15 +1,15 @@
# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
-#
+#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
-#
+#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-#
+#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@@ -26,14 +26,26 @@ INCLUDES = -I$(top_srcdir)/include \
-I$(srcdir)
WRAPLIBS=
-pkglib_LIBRARIES = libexample.a
-
-noinst_HEADERS = ha_example.h
-libexample_a_SOURCES = ha_example.cc
-EXTRA_DIST = cmakelists.txt
LDADD =
-DEFS = -DMYSQL_SERVER @DEFS@
+DEFS = @DEFS@
+
+noinst_HEADERS = ha_example.h
+
+EXTRA_LTLIBRARIES = ha_example.la
+pkglib_LTLIBRARIES = @plugin_example_shared_target@
+ha_example_la_LDFLAGS = -module -rpath $(MYSQLLIBdir)
+ha_example_la_CXXFLAGS= $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN
+ha_example_la_CFLAGS = $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN
+ha_example_la_SOURCES = ha_example.cc
+
+
+EXTRA_LIBRARIES = libexample.a
+noinst_LIBRARIES = @plugin_example_static_target@
+libexample_a_CXXFLAGS = $(AM_CFLAGS)
+libexample_a_CFLAGS = $(AM_CFLAGS)
+libexample_a_SOURCES= ha_example.cc
+
# Don't update the files from bitkeeper
%::SCCS/s.%
diff --git a/storage/example/ha_example.cc b/storage/example/ha_example.cc
index 433fc3e78e0..a8c5c63606f 100644
--- a/storage/example/ha_example.cc
+++ b/storage/example/ha_example.cc
@@ -726,8 +726,8 @@ int ha_example::create(const char *name, TABLE *table_arg,
DBUG_RETURN(0);
}
-#ifdef MYSQL_PLUGIN
-mysql_declare_plugin
+
+mysql_declare_plugin(example)
{
MYSQL_STORAGE_ENGINE_PLUGIN,
&example_hton,
@@ -739,4 +739,4 @@ mysql_declare_plugin
0x0001 /* 0.1 */,
}
mysql_declare_plugin_end;
-#endif
+
diff --git a/storage/innobase/Makefile.am b/storage/innobase/Makefile.am
index 22796b45882..8504d587e09 100644
--- a/storage/innobase/Makefile.am
+++ b/storage/innobase/Makefile.am
@@ -79,5 +79,34 @@ EXTRA_DIST = include/btr0btr.h include/btr0btr.ic include/btr0cur.h include/btr
include/ut0sort.h include/ut0ut.h include/ut0ut.ic \
cmakelists.txt
+noinst_LIBRARIES = libinnobase.a
+libinnobase_a_LIBADD = usr/libusr.a srv/libsrv.a dict/libdict.a \
+ que/libque.a srv/libsrv.a ibuf/libibuf.a \
+ row/librow.a pars/libpars.a btr/libbtr.a \
+ trx/libtrx.a read/libread.a usr/libusr.a \
+ buf/libbuf.a ibuf/libibuf.a eval/libeval.a \
+ log/liblog.a fsp/libfsp.a fut/libfut.a \
+ fil/libfil.a lock/liblock.a mtr/libmtr.a \
+ page/libpage.a rem/librem.a thr/libthr.a \
+ sync/libsync.a data/libdata.a mach/libmach.a \
+ ha/libha.a dyn/libdyn.a mem/libmem.a \
+ ut/libut.a os/libos.a ut/libut.a
+libinnobase_a_SOURCES =
+
+
+libinnobase.a: $(libinnobase_a_LIBADD)
+ -rm -f $@
+ if test "$(host_os)" = "netware" ; \
+ then \
+ $(libmysqld_a_AR) $@ $(libinnobase_a_LIBADD) ; \
+ else \
+ (for arc in $(libinnobase_a_LIBADD); do \
+ arpath=`echo $$arc|sed 's|[^/]*$$||'`; \
+ $(AR) t $$arc|xargs -n 1 find $$arpath -name; \
+ $(AR) t $$arc|xargs -n 1 find `dirname $$arpath` -path \*/`basename $$arpath`/\* -name; \
+ done ) | sort -u | xargs $(AR) cq $@ ; \
+ $(RANLIB) $@ ; \
+ fi
+
# Don't update the files from bitkeeper
%::SCCS/s.%